# 실행마다 동일한 결과를 얻기 위해 케라스에 랜덤 시드를 사용하고 텐서플로 연산을 결정적으로 만듭니다.
import tensorflow as tf
tf.keras.utils.set_random_seed(42)
tf.config.experimental.enable_op_determinism()
from tensorflow.keras.datasets import imdb
from sklearn.model_selection import train_test_split
(train_input, train_target), (test_input, test_target) = imdb.load_data(
num_words=500)
train_input, val_input, train_target, val_target = train_test_split(
train_input, train_target, test_size=0.2, random_state=42)
Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/imdb.npz 17464789/17464789 [==============================] - 1s 0us/step
from tensorflow.keras.preprocessing.sequence import pad_sequences
train_seq = pad_sequences(train_input, maxlen=100)
val_seq = pad_sequences(val_input, maxlen=100)
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'))
model.summary()
Model: "sequential" _________________________________________________________________ Layer (type) Output Shape Param # ================================================================= embedding (Embedding) (None, 100, 16) 8000 lstm (LSTM) (None, 8) 800 dense (Dense) (None, 1) 9 ================================================================= Total params: 8809 (34.41 KB) Trainable params: 8809 (34.41 KB) Non-trainable params: 0 (0.00 Byte) _________________________________________________________________
rmsprop = keras.optimizers.RMSprop(learning_rate=1e-4)
model.compile(optimizer=rmsprop, loss='binary_crossentropy',
metrics=['accuracy'])
checkpoint_cb = keras.callbacks.ModelCheckpoint('best-lstm-model.h5',
save_best_only=True)
early_stopping_cb = keras.callbacks.EarlyStopping(patience=3,
restore_best_weights=True)
history = model.fit(train_seq, train_target, epochs=100, batch_size=64,
validation_data=(val_seq, val_target),
callbacks=[checkpoint_cb, early_stopping_cb])
Epoch 1/100 313/313 [==============================] - 23s 39ms/step - loss: 0.6927 - accuracy: 0.5277 - val_loss: 0.6924 - val_accuracy: 0.5368 Epoch 2/100 13/313 [>.............................] - ETA: 3s - loss: 0.6920 - accuracy: 0.5853
/usr/local/lib/python3.10/dist-packages/keras/src/engine/training.py:3079: UserWarning: You are saving your model as an HDF5 file via `model.save()`. This file format is considered legacy. We recommend using instead the native Keras format, e.g. `model.save('my_model.keras')`. saving_api.save_model(
313/313 [==============================] - 5s 17ms/step - loss: 0.6916 - accuracy: 0.5677 - val_loss: 0.6911 - val_accuracy: 0.5668 Epoch 3/100 313/313 [==============================] - 6s 20ms/step - loss: 0.6896 - accuracy: 0.6011 - val_loss: 0.6883 - val_accuracy: 0.6062 Epoch 4/100 313/313 [==============================] - 5s 15ms/step - loss: 0.6842 - accuracy: 0.6363 - val_loss: 0.6792 - val_accuracy: 0.6618 Epoch 5/100 313/313 [==============================] - 4s 14ms/step - loss: 0.6589 - accuracy: 0.6827 - val_loss: 0.6277 - val_accuracy: 0.7076 Epoch 6/100 313/313 [==============================] - 6s 20ms/step - loss: 0.6084 - accuracy: 0.7135 - val_loss: 0.5964 - val_accuracy: 0.7114 Epoch 7/100 313/313 [==============================] - 5s 15ms/step - loss: 0.5834 - accuracy: 0.7280 - val_loss: 0.5746 - val_accuracy: 0.7330 Epoch 8/100 313/313 [==============================] - 5s 17ms/step - loss: 0.5617 - accuracy: 0.7452 - val_loss: 0.5553 - val_accuracy: 0.7452 Epoch 9/100 313/313 [==============================] - 5s 16ms/step - loss: 0.5421 - accuracy: 0.7560 - val_loss: 0.5375 - val_accuracy: 0.7578 Epoch 10/100 313/313 [==============================] - 4s 14ms/step - loss: 0.5248 - accuracy: 0.7675 - val_loss: 0.5226 - val_accuracy: 0.7646 Epoch 11/100 313/313 [==============================] - 5s 16ms/step - loss: 0.5089 - accuracy: 0.7749 - val_loss: 0.5087 - val_accuracy: 0.7740 Epoch 12/100 313/313 [==============================] - 6s 18ms/step - loss: 0.4946 - accuracy: 0.7822 - val_loss: 0.4974 - val_accuracy: 0.7750 Epoch 13/100 313/313 [==============================] - 5s 16ms/step - loss: 0.4822 - accuracy: 0.7883 - val_loss: 0.4860 - val_accuracy: 0.7860 Epoch 14/100 313/313 [==============================] - 6s 18ms/step - loss: 0.4706 - accuracy: 0.7948 - val_loss: 0.4763 - val_accuracy: 0.7866 Epoch 15/100 313/313 [==============================] - 5s 15ms/step - loss: 0.4605 - accuracy: 0.7986 - val_loss: 0.4776 - val_accuracy: 0.7790 Epoch 16/100 313/313 [==============================] - 5s 15ms/step - loss: 0.4518 - accuracy: 0.8043 - val_loss: 0.4627 - val_accuracy: 0.7866 Epoch 17/100 313/313 [==============================] - 5s 17ms/step - loss: 0.4438 - accuracy: 0.8074 - val_loss: 0.4557 - val_accuracy: 0.7920 Epoch 18/100 313/313 [==============================] - 5s 15ms/step - loss: 0.4376 - accuracy: 0.8080 - val_loss: 0.4491 - val_accuracy: 0.7932 Epoch 19/100 313/313 [==============================] - 6s 18ms/step - loss: 0.4320 - accuracy: 0.8108 - val_loss: 0.4467 - val_accuracy: 0.7942 Epoch 20/100 313/313 [==============================] - 6s 20ms/step - loss: 0.4278 - accuracy: 0.8116 - val_loss: 0.4420 - val_accuracy: 0.7982 Epoch 21/100 313/313 [==============================] - 4s 14ms/step - loss: 0.4246 - accuracy: 0.8116 - val_loss: 0.4392 - val_accuracy: 0.7986 Epoch 22/100 313/313 [==============================] - 5s 15ms/step - loss: 0.4220 - accuracy: 0.8141 - val_loss: 0.4414 - val_accuracy: 0.7982 Epoch 23/100 313/313 [==============================] - 5s 16ms/step - loss: 0.4198 - accuracy: 0.8146 - val_loss: 0.4356 - val_accuracy: 0.8000 Epoch 24/100 313/313 [==============================] - 4s 14ms/step - loss: 0.4175 - accuracy: 0.8149 - val_loss: 0.4367 - val_accuracy: 0.7986 Epoch 25/100 313/313 [==============================] - 5s 16ms/step - loss: 0.4161 - accuracy: 0.8140 - val_loss: 0.4334 - val_accuracy: 0.8000 Epoch 26/100 313/313 [==============================] - 5s 16ms/step - loss: 0.4143 - accuracy: 0.8163 - val_loss: 0.4328 - val_accuracy: 0.7990 Epoch 27/100 313/313 [==============================] - 5s 15ms/step - loss: 0.4131 - accuracy: 0.8158 - val_loss: 0.4314 - val_accuracy: 0.8000 Epoch 28/100 313/313 [==============================] - 5s 16ms/step - loss: 0.4120 - accuracy: 0.8150 - val_loss: 0.4326 - val_accuracy: 0.8002 Epoch 29/100 313/313 [==============================] - 5s 16ms/step - loss: 0.4106 - accuracy: 0.8156 - val_loss: 0.4333 - val_accuracy: 0.8034 Epoch 30/100 313/313 [==============================] - 4s 14ms/step - loss: 0.4092 - accuracy: 0.8170 - val_loss: 0.4315 - val_accuracy: 0.8010
import matplotlib.pyplot as plt
plt.plot(history.history['loss'])
plt.plot(history.history['val_loss'])
plt.xlabel('epoch')
plt.ylabel('loss')
plt.legend(['train', 'val'])
plt.show()
model2 = keras.Sequential()
model2.add(keras.layers.Embedding(500, 16, input_length=100))
model2.add(keras.layers.LSTM(8, dropout=0.3))
model2.add(keras.layers.Dense(1, activation='sigmoid'))
rmsprop = keras.optimizers.RMSprop(learning_rate=1e-4)
model2.compile(optimizer=rmsprop, loss='binary_crossentropy',
metrics=['accuracy'])
checkpoint_cb = keras.callbacks.ModelCheckpoint('best-dropout-model.h5',
save_best_only=True)
early_stopping_cb = keras.callbacks.EarlyStopping(patience=3,
restore_best_weights=True)
history = model2.fit(train_seq, train_target, epochs=100, batch_size=64,
validation_data=(val_seq, val_target),
callbacks=[checkpoint_cb, early_stopping_cb])
Epoch 1/100 313/313 [==============================] - 14s 30ms/step - loss: 0.6924 - accuracy: 0.5317 - val_loss: 0.6917 - val_accuracy: 0.5696 Epoch 2/100 313/313 [==============================] - 6s 19ms/step - loss: 0.6907 - accuracy: 0.5788 - val_loss: 0.6897 - val_accuracy: 0.5984 Epoch 3/100 313/313 [==============================] - 5s 16ms/step - loss: 0.6879 - accuracy: 0.6057 - val_loss: 0.6861 - val_accuracy: 0.6232 Epoch 4/100 313/313 [==============================] - 5s 15ms/step - loss: 0.6826 - accuracy: 0.6251 - val_loss: 0.6787 - val_accuracy: 0.6392 Epoch 5/100 313/313 [==============================] - 5s 17ms/step - loss: 0.6674 - accuracy: 0.6511 - val_loss: 0.6529 - val_accuracy: 0.6630 Epoch 6/100 313/313 [==============================] - 5s 15ms/step - loss: 0.6258 - accuracy: 0.6999 - val_loss: 0.6108 - val_accuracy: 0.7108 Epoch 7/100 313/313 [==============================] - 5s 17ms/step - loss: 0.5967 - accuracy: 0.7250 - val_loss: 0.5894 - val_accuracy: 0.7274 Epoch 8/100 313/313 [==============================] - 5s 17ms/step - loss: 0.5771 - accuracy: 0.7402 - val_loss: 0.5723 - val_accuracy: 0.7396 Epoch 9/100 313/313 [==============================] - 5s 14ms/step - loss: 0.5599 - accuracy: 0.7513 - val_loss: 0.5534 - val_accuracy: 0.7522 Epoch 10/100 313/313 [==============================] - 5s 17ms/step - loss: 0.5442 - accuracy: 0.7606 - val_loss: 0.5381 - val_accuracy: 0.7640 Epoch 11/100 313/313 [==============================] - 5s 15ms/step - loss: 0.5293 - accuracy: 0.7683 - val_loss: 0.5235 - val_accuracy: 0.7690 Epoch 12/100 313/313 [==============================] - 5s 15ms/step - loss: 0.5166 - accuracy: 0.7732 - val_loss: 0.5114 - val_accuracy: 0.7700 Epoch 13/100 313/313 [==============================] - 5s 16ms/step - loss: 0.5052 - accuracy: 0.7791 - val_loss: 0.5009 - val_accuracy: 0.7844 Epoch 14/100 313/313 [==============================] - 5s 15ms/step - loss: 0.4928 - accuracy: 0.7819 - val_loss: 0.4905 - val_accuracy: 0.7852 Epoch 15/100 313/313 [==============================] - 6s 19ms/step - loss: 0.4837 - accuracy: 0.7881 - val_loss: 0.4857 - val_accuracy: 0.7782 Epoch 16/100 313/313 [==============================] - 5s 17ms/step - loss: 0.4753 - accuracy: 0.7911 - val_loss: 0.4750 - val_accuracy: 0.7890 Epoch 17/100 313/313 [==============================] - 4s 14ms/step - loss: 0.4669 - accuracy: 0.7939 - val_loss: 0.4688 - val_accuracy: 0.7916 Epoch 18/100 313/313 [==============================] - 4s 14ms/step - loss: 0.4599 - accuracy: 0.7969 - val_loss: 0.4637 - val_accuracy: 0.7898 Epoch 19/100 313/313 [==============================] - 5s 17ms/step - loss: 0.4538 - accuracy: 0.7991 - val_loss: 0.4582 - val_accuracy: 0.7918 Epoch 20/100 313/313 [==============================] - 4s 14ms/step - loss: 0.4504 - accuracy: 0.7995 - val_loss: 0.4541 - val_accuracy: 0.7952 Epoch 21/100 313/313 [==============================] - 5s 15ms/step - loss: 0.4468 - accuracy: 0.8002 - val_loss: 0.4514 - val_accuracy: 0.7942 Epoch 22/100 313/313 [==============================] - 7s 23ms/step - loss: 0.4440 - accuracy: 0.8015 - val_loss: 0.4500 - val_accuracy: 0.7952 Epoch 23/100 313/313 [==============================] - 4s 14ms/step - loss: 0.4414 - accuracy: 0.8028 - val_loss: 0.4478 - val_accuracy: 0.7942 Epoch 24/100 313/313 [==============================] - 4s 14ms/step - loss: 0.4390 - accuracy: 0.8008 - val_loss: 0.4482 - val_accuracy: 0.7948 Epoch 25/100 313/313 [==============================] - 5s 17ms/step - loss: 0.4371 - accuracy: 0.8021 - val_loss: 0.4450 - val_accuracy: 0.7960 Epoch 26/100 313/313 [==============================] - 4s 14ms/step - loss: 0.4352 - accuracy: 0.8040 - val_loss: 0.4442 - val_accuracy: 0.7998 Epoch 27/100 313/313 [==============================] - 5s 15ms/step - loss: 0.4324 - accuracy: 0.8061 - val_loss: 0.4417 - val_accuracy: 0.7974 Epoch 28/100 313/313 [==============================] - 6s 18ms/step - loss: 0.4325 - accuracy: 0.8048 - val_loss: 0.4414 - val_accuracy: 0.7976 Epoch 29/100 313/313 [==============================] - 4s 14ms/step - loss: 0.4299 - accuracy: 0.8065 - val_loss: 0.4431 - val_accuracy: 0.7990 Epoch 30/100 313/313 [==============================] - 5s 16ms/step - loss: 0.4293 - accuracy: 0.8058 - val_loss: 0.4400 - val_accuracy: 0.7984 Epoch 31/100 313/313 [==============================] - 5s 16ms/step - loss: 0.4276 - accuracy: 0.8077 - val_loss: 0.4421 - val_accuracy: 0.7936 Epoch 32/100 313/313 [==============================] - 4s 14ms/step - loss: 0.4258 - accuracy: 0.8087 - val_loss: 0.4384 - val_accuracy: 0.7978 Epoch 33/100 313/313 [==============================] - 5s 16ms/step - loss: 0.4255 - accuracy: 0.8073 - val_loss: 0.4382 - val_accuracy: 0.8018 Epoch 34/100 313/313 [==============================] - 5s 17ms/step - loss: 0.4244 - accuracy: 0.8074 - val_loss: 0.4375 - val_accuracy: 0.8026 Epoch 35/100 313/313 [==============================] - 5s 14ms/step - loss: 0.4247 - accuracy: 0.8068 - val_loss: 0.4369 - val_accuracy: 0.8034 Epoch 36/100 313/313 [==============================] - 5s 17ms/step - loss: 0.4223 - accuracy: 0.8102 - val_loss: 0.4357 - val_accuracy: 0.7988 Epoch 37/100 313/313 [==============================] - 5s 15ms/step - loss: 0.4238 - accuracy: 0.8077 - val_loss: 0.4401 - val_accuracy: 0.8006 Epoch 38/100 313/313 [==============================] - 4s 14ms/step - loss: 0.4199 - accuracy: 0.8087 - val_loss: 0.4349 - val_accuracy: 0.8016 Epoch 39/100 313/313 [==============================] - 5s 16ms/step - loss: 0.4214 - accuracy: 0.8091 - val_loss: 0.4339 - val_accuracy: 0.8018 Epoch 40/100 313/313 [==============================] - 5s 15ms/step - loss: 0.4215 - accuracy: 0.8102 - val_loss: 0.4375 - val_accuracy: 0.7934 Epoch 41/100 313/313 [==============================] - 4s 14ms/step - loss: 0.4203 - accuracy: 0.8094 - val_loss: 0.4332 - val_accuracy: 0.8018 Epoch 42/100 313/313 [==============================] - 6s 18ms/step - loss: 0.4176 - accuracy: 0.8083 - val_loss: 0.4341 - val_accuracy: 0.8046 Epoch 43/100 313/313 [==============================] - 4s 14ms/step - loss: 0.4189 - accuracy: 0.8105 - val_loss: 0.4345 - val_accuracy: 0.7974 Epoch 44/100 313/313 [==============================] - 4s 14ms/step - loss: 0.4178 - accuracy: 0.8117 - val_loss: 0.4335 - val_accuracy: 0.8038
plt.plot(history.history['loss'])
plt.plot(history.history['val_loss'])
plt.xlabel('epoch')
plt.ylabel('loss')
plt.legend(['train', 'val'])
plt.show()
model3 = keras.Sequential()
model3.add(keras.layers.Embedding(500, 16, input_length=100))
model3.add(keras.layers.LSTM(8, dropout=0.3, return_sequences=True))
model3.add(keras.layers.LSTM(8, dropout=0.3))
model3.add(keras.layers.Dense(1, activation='sigmoid'))
model3.summary()
Model: "sequential_2" _________________________________________________________________ Layer (type) Output Shape Param # ================================================================= embedding_2 (Embedding) (None, 100, 16) 8000 lstm_2 (LSTM) (None, 100, 8) 800 lstm_3 (LSTM) (None, 8) 544 dense_2 (Dense) (None, 1) 9 ================================================================= Total params: 9353 (36.54 KB) Trainable params: 9353 (36.54 KB) Non-trainable params: 0 (0.00 Byte) _________________________________________________________________
rmsprop = keras.optimizers.RMSprop(learning_rate=1e-4)
model3.compile(optimizer=rmsprop, loss='binary_crossentropy',
metrics=['accuracy'])
checkpoint_cb = keras.callbacks.ModelCheckpoint('best-2rnn-model.h5',
save_best_only=True)
early_stopping_cb = keras.callbacks.EarlyStopping(patience=3,
restore_best_weights=True)
history = model3.fit(train_seq, train_target, epochs=100, batch_size=64,
validation_data=(val_seq, val_target),
callbacks=[checkpoint_cb, early_stopping_cb])
Epoch 1/100 313/313 [==============================] - 16s 37ms/step - loss: 0.6929 - accuracy: 0.5168 - val_loss: 0.6927 - val_accuracy: 0.5280 Epoch 2/100 313/313 [==============================] - 6s 20ms/step - loss: 0.6914 - accuracy: 0.5788 - val_loss: 0.6893 - val_accuracy: 0.6228 Epoch 3/100 313/313 [==============================] - 7s 24ms/step - loss: 0.6750 - accuracy: 0.6473 - val_loss: 0.6432 - val_accuracy: 0.6782 Epoch 4/100 313/313 [==============================] - 7s 23ms/step - loss: 0.6067 - accuracy: 0.6889 - val_loss: 0.5798 - val_accuracy: 0.7046 Epoch 5/100 313/313 [==============================] - 6s 20ms/step - loss: 0.5611 - accuracy: 0.7233 - val_loss: 0.5406 - val_accuracy: 0.7358 Epoch 6/100 313/313 [==============================] - 7s 21ms/step - loss: 0.5311 - accuracy: 0.7439 - val_loss: 0.5173 - val_accuracy: 0.7542 Epoch 7/100 313/313 [==============================] - 6s 20ms/step - loss: 0.5142 - accuracy: 0.7568 - val_loss: 0.5006 - val_accuracy: 0.7670 Epoch 8/100 313/313 [==============================] - 8s 24ms/step - loss: 0.4986 - accuracy: 0.7653 - val_loss: 0.4950 - val_accuracy: 0.7680 Epoch 9/100 313/313 [==============================] - 7s 21ms/step - loss: 0.4860 - accuracy: 0.7739 - val_loss: 0.4806 - val_accuracy: 0.7778 Epoch 10/100 313/313 [==============================] - 7s 22ms/step - loss: 0.4782 - accuracy: 0.7804 - val_loss: 0.4716 - val_accuracy: 0.7838 Epoch 11/100 313/313 [==============================] - 6s 19ms/step - loss: 0.4717 - accuracy: 0.7793 - val_loss: 0.4670 - val_accuracy: 0.7842 Epoch 12/100 313/313 [==============================] - 7s 22ms/step - loss: 0.4669 - accuracy: 0.7839 - val_loss: 0.4628 - val_accuracy: 0.7850 Epoch 13/100 313/313 [==============================] - 6s 18ms/step - loss: 0.4599 - accuracy: 0.7875 - val_loss: 0.4589 - val_accuracy: 0.7896 Epoch 14/100 313/313 [==============================] - 7s 22ms/step - loss: 0.4566 - accuracy: 0.7892 - val_loss: 0.4575 - val_accuracy: 0.7864 Epoch 15/100 313/313 [==============================] - 6s 20ms/step - loss: 0.4520 - accuracy: 0.7928 - val_loss: 0.4676 - val_accuracy: 0.7814 Epoch 16/100 313/313 [==============================] - 7s 21ms/step - loss: 0.4506 - accuracy: 0.7913 - val_loss: 0.4557 - val_accuracy: 0.7878 Epoch 17/100 313/313 [==============================] - 6s 19ms/step - loss: 0.4492 - accuracy: 0.7930 - val_loss: 0.4538 - val_accuracy: 0.7876 Epoch 18/100 313/313 [==============================] - 6s 19ms/step - loss: 0.4460 - accuracy: 0.7958 - val_loss: 0.4477 - val_accuracy: 0.7942 Epoch 19/100 313/313 [==============================] - 6s 20ms/step - loss: 0.4446 - accuracy: 0.7962 - val_loss: 0.4477 - val_accuracy: 0.7932 Epoch 20/100 313/313 [==============================] - 6s 18ms/step - loss: 0.4403 - accuracy: 0.7969 - val_loss: 0.4451 - val_accuracy: 0.7952 Epoch 21/100 313/313 [==============================] - 7s 23ms/step - loss: 0.4405 - accuracy: 0.7970 - val_loss: 0.4439 - val_accuracy: 0.7940 Epoch 22/100 313/313 [==============================] - 6s 18ms/step - loss: 0.4382 - accuracy: 0.7983 - val_loss: 0.4471 - val_accuracy: 0.7950 Epoch 23/100 313/313 [==============================] - 7s 22ms/step - loss: 0.4367 - accuracy: 0.8008 - val_loss: 0.4430 - val_accuracy: 0.7932 Epoch 24/100 313/313 [==============================] - 6s 18ms/step - loss: 0.4350 - accuracy: 0.8009 - val_loss: 0.4456 - val_accuracy: 0.7908 Epoch 25/100 313/313 [==============================] - 7s 21ms/step - loss: 0.4353 - accuracy: 0.8008 - val_loss: 0.4414 - val_accuracy: 0.7936 Epoch 26/100 313/313 [==============================] - 6s 19ms/step - loss: 0.4335 - accuracy: 0.7994 - val_loss: 0.4426 - val_accuracy: 0.7892 Epoch 27/100 313/313 [==============================] - 6s 20ms/step - loss: 0.4313 - accuracy: 0.8015 - val_loss: 0.4407 - val_accuracy: 0.7932 Epoch 28/100 313/313 [==============================] - 6s 21ms/step - loss: 0.4313 - accuracy: 0.8003 - val_loss: 0.4401 - val_accuracy: 0.7932 Epoch 29/100 313/313 [==============================] - 6s 18ms/step - loss: 0.4312 - accuracy: 0.8038 - val_loss: 0.4453 - val_accuracy: 0.7968 Epoch 30/100 313/313 [==============================] - 7s 22ms/step - loss: 0.4296 - accuracy: 0.8054 - val_loss: 0.4393 - val_accuracy: 0.7938 Epoch 31/100 313/313 [==============================] - 6s 18ms/step - loss: 0.4296 - accuracy: 0.8038 - val_loss: 0.4470 - val_accuracy: 0.7890 Epoch 32/100 313/313 [==============================] - 7s 21ms/step - loss: 0.4270 - accuracy: 0.8030 - val_loss: 0.4395 - val_accuracy: 0.7910 Epoch 33/100 313/313 [==============================] - 6s 19ms/step - loss: 0.4283 - accuracy: 0.8027 - val_loss: 0.4434 - val_accuracy: 0.7984
plt.plot(history.history['loss'])
plt.plot(history.history['val_loss'])
plt.xlabel('epoch')
plt.ylabel('loss')
plt.legend(['train', 'val'])
plt.show()
model4 = keras.Sequential()
model4.add(keras.layers.Embedding(500, 16, input_length=100))
model4.add(keras.layers.GRU(8))
model4.add(keras.layers.Dense(1, activation='sigmoid'))
model4.summary()
Model: "sequential_3" _________________________________________________________________ Layer (type) Output Shape Param # ================================================================= embedding_3 (Embedding) (None, 100, 16) 8000 gru (GRU) (None, 8) 624 dense_3 (Dense) (None, 1) 9 ================================================================= Total params: 8633 (33.72 KB) Trainable params: 8633 (33.72 KB) Non-trainable params: 0 (0.00 Byte) _________________________________________________________________
rmsprop = keras.optimizers.RMSprop(learning_rate=1e-4)
model4.compile(optimizer=rmsprop, loss='binary_crossentropy',
metrics=['accuracy'])
checkpoint_cb = keras.callbacks.ModelCheckpoint('best-gru-model.h5',
save_best_only=True)
early_stopping_cb = keras.callbacks.EarlyStopping(patience=3,
restore_best_weights=True)
history = model4.fit(train_seq, train_target, epochs=100, batch_size=64,
validation_data=(val_seq, val_target),
callbacks=[checkpoint_cb, early_stopping_cb])
Epoch 1/100 313/313 [==============================] - 15s 40ms/step - loss: 0.6920 - accuracy: 0.5486 - val_loss: 0.6912 - val_accuracy: 0.5724 Epoch 2/100 313/313 [==============================] - 5s 16ms/step - loss: 0.6898 - accuracy: 0.5790 - val_loss: 0.6889 - val_accuracy: 0.5830 Epoch 3/100 313/313 [==============================] - 5s 16ms/step - loss: 0.6865 - accuracy: 0.5975 - val_loss: 0.6852 - val_accuracy: 0.5958 Epoch 4/100 313/313 [==============================] - 6s 18ms/step - loss: 0.6813 - accuracy: 0.6107 - val_loss: 0.6792 - val_accuracy: 0.5994 Epoch 5/100 313/313 [==============================] - 4s 14ms/step - loss: 0.6732 - accuracy: 0.6204 - val_loss: 0.6701 - val_accuracy: 0.6134 Epoch 6/100 313/313 [==============================] - 5s 16ms/step - loss: 0.6608 - accuracy: 0.6387 - val_loss: 0.6556 - val_accuracy: 0.6302 Epoch 7/100 313/313 [==============================] - 5s 16ms/step - loss: 0.6404 - accuracy: 0.6581 - val_loss: 0.6304 - val_accuracy: 0.6640 Epoch 8/100 313/313 [==============================] - 5s 15ms/step - loss: 0.6019 - accuracy: 0.6898 - val_loss: 0.5781 - val_accuracy: 0.7058 Epoch 9/100 313/313 [==============================] - 5s 16ms/step - loss: 0.5315 - accuracy: 0.7373 - val_loss: 0.5158 - val_accuracy: 0.7470 Epoch 10/100 313/313 [==============================] - 5s 15ms/step - loss: 0.4969 - accuracy: 0.7618 - val_loss: 0.4963 - val_accuracy: 0.7624 Epoch 11/100 313/313 [==============================] - 4s 14ms/step - loss: 0.4798 - accuracy: 0.7743 - val_loss: 0.4828 - val_accuracy: 0.7722 Epoch 12/100 313/313 [==============================] - 5s 16ms/step - loss: 0.4667 - accuracy: 0.7823 - val_loss: 0.4724 - val_accuracy: 0.7772 Epoch 13/100 313/313 [==============================] - 4s 14ms/step - loss: 0.4567 - accuracy: 0.7879 - val_loss: 0.4655 - val_accuracy: 0.7826 Epoch 14/100 313/313 [==============================] - 4s 14ms/step - loss: 0.4485 - accuracy: 0.7962 - val_loss: 0.4589 - val_accuracy: 0.7856 Epoch 15/100 313/313 [==============================] - 5s 17ms/step - loss: 0.4425 - accuracy: 0.7997 - val_loss: 0.4651 - val_accuracy: 0.7866 Epoch 16/100 313/313 [==============================] - 5s 15ms/step - loss: 0.4375 - accuracy: 0.8038 - val_loss: 0.4533 - val_accuracy: 0.7942 Epoch 17/100 313/313 [==============================] - 4s 14ms/step - loss: 0.4331 - accuracy: 0.8059 - val_loss: 0.4504 - val_accuracy: 0.7922 Epoch 18/100 313/313 [==============================] - 5s 16ms/step - loss: 0.4300 - accuracy: 0.8080 - val_loss: 0.4471 - val_accuracy: 0.7930 Epoch 19/100 313/313 [==============================] - 4s 14ms/step - loss: 0.4270 - accuracy: 0.8095 - val_loss: 0.4477 - val_accuracy: 0.7920 Epoch 20/100 313/313 [==============================] - 4s 14ms/step - loss: 0.4246 - accuracy: 0.8117 - val_loss: 0.4448 - val_accuracy: 0.7942 Epoch 21/100 313/313 [==============================] - 5s 16ms/step - loss: 0.4231 - accuracy: 0.8102 - val_loss: 0.4453 - val_accuracy: 0.7912 Epoch 22/100 313/313 [==============================] - 5s 15ms/step - loss: 0.4215 - accuracy: 0.8124 - val_loss: 0.4476 - val_accuracy: 0.7946 Epoch 23/100 313/313 [==============================] - 4s 14ms/step - loss: 0.4201 - accuracy: 0.8131 - val_loss: 0.4430 - val_accuracy: 0.7964 Epoch 24/100 313/313 [==============================] - 5s 17ms/step - loss: 0.4187 - accuracy: 0.8145 - val_loss: 0.4433 - val_accuracy: 0.7908 Epoch 25/100 313/313 [==============================] - 5s 15ms/step - loss: 0.4181 - accuracy: 0.8130 - val_loss: 0.4419 - val_accuracy: 0.7932 Epoch 26/100 313/313 [==============================] - 4s 14ms/step - loss: 0.4168 - accuracy: 0.8151 - val_loss: 0.4433 - val_accuracy: 0.7934 Epoch 27/100 313/313 [==============================] - 5s 17ms/step - loss: 0.4162 - accuracy: 0.8148 - val_loss: 0.4412 - val_accuracy: 0.7930 Epoch 28/100 313/313 [==============================] - 5s 15ms/step - loss: 0.4157 - accuracy: 0.8142 - val_loss: 0.4418 - val_accuracy: 0.7916 Epoch 29/100 313/313 [==============================] - 4s 14ms/step - loss: 0.4148 - accuracy: 0.8148 - val_loss: 0.4455 - val_accuracy: 0.7964 Epoch 30/100 313/313 [==============================] - 5s 17ms/step - loss: 0.4136 - accuracy: 0.8165 - val_loss: 0.4423 - val_accuracy: 0.7914
plt.plot(history.history['loss'])
plt.plot(history.history['val_loss'])
plt.xlabel('epoch')
plt.ylabel('loss')
plt.legend(['train', 'val'])
plt.show()
test_seq = pad_sequences(test_input, maxlen=100)
rnn_model = keras.models.load_model('best-2rnn-model.h5')
rnn_model.evaluate(test_seq, test_target)
782/782 [==============================] - 5s 6ms/step - loss: 0.4346 - accuracy: 0.7975
[0.43462270498275757, 0.7974799871444702]