순환층에 있는 첫 번째 뉴런(r1)의 hidden state가 다음 timestep에 재사용될 때 첫 번째 뉴런과 두 번째 뉴런, 세 번째 뉴런에 모두 전달됨
만약 입력층의 뉴런이 4개, 순환층에 뉴런이 3개라면
"I am a boy"라는 문장
마지막 cell의 출력이 1차원이기 때문에 Flatten 클래스로 펼칠 필요가 없음
from tensorflow.keras.preprocessing.sequence import pad_sequences # pad_sequences () 함수를 사용하여 길이를 100으로
train_seq = pad_sequences(train_input, maxlen=100)
from tensorflow import keras
model = keras.Sequential()
model.add(keras.layers.SimpleRNN(8, input_shape=(100,500))) # 활성화 함수 기본값 tanh 사용 # 500은 정숫값의 범위가 0~499여서 원핫인코딩으로 표현하려면 배열의 길이가 500이어야 함
model.add(keras.layers.Dense(1,activation='sigmoid'))
train_oh = keras.utils.to_categorical(train_seq)
rmsprop = keras.optimizers.RMSprop(learning_rate=1e-4)
model.compile(optimizer=rmsprop, loss='binary_crossentropy',metrics=['accuracy'])
checkpoint_cb = keras.callbacks.ModelCheckpoint('best-simplernn-model.h5', save_best_only=True)
early_stopping_cb = keras.callbacks.EarlyStopping(patience=3, restore_best_weights=True)
history = model.fit(train_oh, train_target, epochs=100, batch_size=64, validation_data=(val_oh, val_target),
callbacks=[checkpoint_cb, early_stopping_cb])
model2 = keras.Sequential()
model2.add(keras.layers.Embedding(500,16,input_length=100)) # 500: 어휘사전의 크기, 16: 임베딩 벡터의 크기(원핫인코딩보다 훨씬 작음)
model2.add(keras.layers.SimpleRNN(8))
model2.add(keras.layers.Dense(1,activation='sigmoid'))
from tensorflow import keras
model = keras.Sequential()
model.add(keras.layers.Embedding(500,16,input_length=100))
model.add(keras.layers.LSTM(8))
model.add(keras.layers.Dense(1,activation='sigmoid'))
[출처] https://wikidocs.net/22886
혼자공부하는 머신러닝+딥러닝