-
TensorFlow 기초 37 - RNN(Recurrent Neural Network)TensorFlow 2022. 12. 13. 17:01
RNN(Recurrent Neural Network)은 히든 노드가 방향을 가진 엣지로 연결되어 순환구조를 이루는(directed cycle) 인공신경망의 한 종류입니다.
음성, 문자 등 순차적으로 등장하는 데이터 처리에 적합한 모델로 알려져 있다.
Convolutional Neural Networks(CNN)과 더불어 최근 들어 각광받고 있는 알고리즘이다.
활용 : 텍스트 분류, 품사 태깅, 문서 요약, 문서 작성, 기계 번역, 이미지 캡션... 등 사용RNN은 sequence data : 입력값에 대해 현재의 state가 다음의 state에 영향을 준다.
# RNN(Recurrent Neural Network)은 히든 노드가 방향을 가진 엣지로 연결되어 순환구조를 이루는(directed cycle) 인공신경망의 한 종류입니다. # 음성, 문자 등 순차적으로 등장하는 데이터 처리에 적합한 모델로 알려져 있다. # Convolutional Neural Networks(CNN)과 더불어 최근 들어 각광받고 있는 알고리즘이다. # 활용 : 텍스트 분류, 품사 태깅, 문서 요약, 문서 작성, 기계 번역, 이미지 캡션... 등 사용 # RNN은 sequence data : 입력값에 대해 현재의 state가 다음의 state에 영향을 준다. from keras.models import Sequential from keras.layers import SimpleRNN, LSTM, GRU, Dense model = Sequential() # model.add(SimpleRNN(units=3, input_shape=(2, 10))) # model.add(SimpleRNN(3, input_length=2, input_dim=10)) # 위와 동일 model.add(LSTM(units=3, input_shape=(2, 10))) # Long Short-Term Memory units print(model.summary()) model = Sequential() model.add(LSTM(units=3, batch_input_shape=(8, 2, 10))) # batch_size=8, input_length=2, input_dim=10 print(model.summary()) model = Sequential() model.add(LSTM(units=3, batch_input_shape=(8, 2, 10), return_sequences=True)) # 다음 층으로 모든 은닉상태를 전달 print(model.summary()) # LSTM으로 다음 숫자 예측하기 from numpy import array x = array([[1,2,3],[2,3,4],[3,4,5],[4,5,6],[5,6,7],[10,20,30],[20,30,40],[30,40,50]]) y = array([4,5,6,7,8,40,50,60]) print(x, x.shape) # (8, 3) print(y, y.shape) # (8,) print(x, x.shape) # (8, 3, 1) # 모델 구성 model = Sequential() model.add(LSTM(10, activation='tanh', input_shape=(3, 1))) # model.add(LSTM(10, activation='tanh', input_shape=(3, 1), return_sequences=True)) # many-to-many model.add(Dense(5, activation='relu')) model.add(Dense(1)) model.compile(optimizer='adam', loss='mse') print(model.summary()) from keras.callbacks import EarlyStopping es = EarlyStopping(monitor='loss', patience=5, mode='auto') model.fit(x, y, epochs=1000, batch_size=1, verbose=0, callbacks=[es]) pred = model.predict(x) print('예측값 :', pred.flatten()) print('실제값 :', y) x_new = array([[3, 5, 7]]) new_pred = model.predict(x_new) print('새로운 예측값 :', new_pred.flatten()) <console> 2022-12-13 16:29:16.224256: I tensorflow/core/platform/cpu_feature_guard.cc:193] This TensorFlow binary is optimized with oneAPI Deep Neural Network Library (oneDNN) to use the following CPU instructions in performance-critical operations: AVX AVX2 To enable them in other operations, rebuild TensorFlow with the appropriate compiler flags. Model: "sequential" _________________________________________________________________ Layer (type) Output Shape Param # ================================================================= lstm (LSTM) (None, 3) 168 ================================================================= Total params: 168 Trainable params: 168 Non-trainable params: 0 _________________________________________________________________ None Model: "sequential_1" _________________________________________________________________ Layer (type) Output Shape Param # ================================================================= lstm_1 (LSTM) (8, 3) 168 ================================================================= Total params: 168 Trainable params: 168 Non-trainable params: 0 _________________________________________________________________ None Model: "sequential_2" _________________________________________________________________ Layer (type) Output Shape Param # ================================================================= lstm_2 (LSTM) (8, 2, 3) 168 ================================================================= Total params: 168 Trainable params: 168 Non-trainable params: 0 _________________________________________________________________ None [[ 1 2 3] [ 2 3 4] [ 3 4 5] [ 4 5 6] [ 5 6 7] [10 20 30] [20 30 40] [30 40 50]] (8, 3) [ 4 5 6 7 8 40 50 60] (8,) [[ 1 2 3] [ 2 3 4] [ 3 4 5] [ 4 5 6] [ 5 6 7] [10 20 30] [20 30 40] [30 40 50]] (8, 3) Model: "sequential_3" _________________________________________________________________ Layer (type) Output Shape Param # ================================================================= lstm_3 (LSTM) (None, 10) 480 dense (Dense) (None, 5) 55 dense_1 (Dense) (None, 1) 6 ================================================================= Total params: 541 Trainable params: 541 Non-trainable params: 0 _________________________________________________________________ None 1/1 [==============================] - ETA: 0s 1/1 [==============================] - 0s 236ms/step 예측값 : [ 4.0012474 4.9936314 5.99559 6.952085 8.063006 39.780865 49.39792 56.75779 ] 실제값 : [ 4 5 6 7 8 40 50 60] 1/1 [==============================] - ETA: 0s 1/1 [==============================] - 0s 8ms/step 새로운 예측값 : [9.879905]
'TensorFlow' 카테고리의 다른 글
TensorFlow 기초 39 - LSTM을 이용한 텍스트 생성, 문맥을 반영하여 다음 단어를 예측하기 (0) 2022.12.14 TensorFlow 기초 38 - 문자열(corpus - 자연어 데이터 집합) 토큰화 + LSTM으로 감성 분류 (0) 2022.12.13 TensorFlow 기초 36 - 네이버 영화 리뷰 데이터로 word2vec 객체 생성 후 특정 단에 대한 유사도 확인 (0) 2022.12.13 TensorFlow 기초 35 - naver 제공 영화 5편을 웹스크래핑 해서 평점을 읽어 영화 간 유사도 확인 (1) 2022.12.13 TensorFlow 기초 34 - 한글 데이터로 워드 카운트 (0) 2022.12.13