%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from tensorflow.keras.preprocessing import sequence
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Embedding
from tensorflow.keras.layers import LSTM
from tensorflow.keras.datasets import imdb
(x_train, y_train), (x_test, y_test) = imdb.load_data(num_words=10000)
len(x_train)
25000
len(x_test)
25000
len(x_train[0])
218
len(x_train[1])
189
y_train[0]
1
y_train[1]
0
x_train = sequence.pad_sequences(x_train, maxlen=100)
x_test = sequence.pad_sequences(x_test, maxlen=100)
model = Sequential()
model.add(Embedding(10000, 128))
model.add(LSTM(128, dropout=0.2, recurrent_dropout=0.2))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy',
optimizer='adam',
metrics=['accuracy'])
model.summary()
Model: "sequential" _________________________________________________________________ Layer (type) Output Shape Param # ================================================================= embedding (Embedding) (None, None, 128) 1280000 _________________________________________________________________ lstm (LSTM) (None, 128) 131584 _________________________________________________________________ dense (Dense) (None, 1) 129 ================================================================= Total params: 1,411,713 Trainable params: 1,411,713 Non-trainable params: 0 _________________________________________________________________
model.fit(x_train, y_train, batch_size=32, epochs=10,
validation_data=(x_test, y_test))
Train on 25000 samples, validate on 25000 samples Epoch 1/10 25000/25000 [==============================] - 56s 2ms/sample - loss: 0.4650 - accuracy: 0.7825 - val_loss: 0.3699 - val_accuracy: 0.8407 Epoch 2/10 25000/25000 [==============================] - 55s 2ms/sample - loss: 0.3338 - accuracy: 0.8605 - val_loss: 0.3968 - val_accuracy: 0.8246 Epoch 3/10 25000/25000 [==============================] - 55s 2ms/sample - loss: 0.2651 - accuracy: 0.8946 - val_loss: 0.3817 - val_accuracy: 0.8421 Epoch 4/10 25000/25000 [==============================] - 55s 2ms/sample - loss: 0.2111 - accuracy: 0.9174 - val_loss: 0.4227 - val_accuracy: 0.8417 Epoch 5/10 25000/25000 [==============================] - 55s 2ms/sample - loss: 0.1767 - accuracy: 0.9317 - val_loss: 0.4423 - val_accuracy: 0.8346 Epoch 6/10 25000/25000 [==============================] - 55s 2ms/sample - loss: 0.1407 - accuracy: 0.9488 - val_loss: 0.5240 - val_accuracy: 0.8298 Epoch 7/10 25000/25000 [==============================] - 54s 2ms/sample - loss: 0.1140 - accuracy: 0.9600 - val_loss: 0.5509 - val_accuracy: 0.8305 Epoch 8/10 25000/25000 [==============================] - 54s 2ms/sample - loss: 0.0905 - accuracy: 0.9678 - val_loss: 0.5966 - val_accuracy: 0.8280 Epoch 9/10 25000/25000 [==============================] - 54s 2ms/sample - loss: 0.0735 - accuracy: 0.9745 - val_loss: 0.6462 - val_accuracy: 0.8071 Epoch 10/10 25000/25000 [==============================] - 53s 2ms/sample - loss: 0.0537 - accuracy: 0.9820 - val_loss: 0.6997 - val_accuracy: 0.8206
<tensorflow.python.keras.callbacks.History at 0x7ff0ae1d90f0>
這次是把 model 和訓練權重分開存, 使用上更有彈性。
model_json = model.to_json()
open('imdb_model_architecture.json', 'w').write(model_json)
model.save_weights('imdb_model_weights.h5')