AI:Keras神經網絡IMDB電影評論二分類模型訓練和評估,python
import keras
from keras.layers import Dense
from keras import models
from keras import optimizers
from keras.datasets import imdb
from keras import losses
import numpy as np
import matplotlib.pyplot as plt
def fig_loss(history):
history_dict = history.history
loss_values = history_dict['loss']
val_loss_values = history_dict['val_loss']
epochs = range(1, len(loss_values) + 1)
plt.plot(epochs, loss_values, 'b-.', label='Training loss')
plt.plot(epochs, val_loss_values, 'r--', label='Validation loss')
plt.title('Training and validation loss')
plt.xlabel('Epochs')
plt.ylabel('Loss')
plt.legend()
plt.grid()
plt.show()
def fig_acc(history):
history_dict = history.history
acc = history_dict['accuracy']
val_acc = history_dict['val_accuracy']
epochs = range(1, len(acc) + 1)
plt.plot(epochs, acc, 'g:', label='Training acc')
plt.plot(epochs, val_acc, 'r-', label='Validation acc')
plt.title('Training and validation accuracy')
plt.xlabel('Epochs')
plt.ylabel('Accuracy')
plt.legend()
plt.grid()
plt.show()
def to_array(a, col):
for i in range(len(a)):
a[i] = keras.utils.to_categorical(np.array(a[i]), num_classes=col)
a[i] = np.sum(a[i], axis=0)
return np.array(a.tolist())
if __name__ == "__main__":
SIZE = 10000
model = models.Sequential()
model.add(Dense(64, activation='relu', input_shape=(SIZE,)))
model.add(Dense(32, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
model.compile(optimizer=optimizers.RMSprop(lr=0.001),
loss=losses.binary_crossentropy,
metrics=['accuracy'])
(train_data, train_labels), (test_data, test_labels) = imdb.load_data(num_words=SIZE)
y_train = np.asarray(train_labels).astype('float32')
x_test = to_array(test_data, SIZE)
test_labels = np.asarray(test_labels).astype('float32')
x_train = to_array(train_data, SIZE)
x = x_train[:SIZE]
x_val = x_train[SIZE:]
y = train_labels[:SIZE]
y_val = train_labels[SIZE:]
history = model.fit(x, y, epochs=8, validation_data=(x_val, y_val))
results = model.evaluate(x_test, test_labels)
print('訓練結束,評估模型->')
print('損失:')
print(results[0])
print('精度:')
print(results[1])
# 繪製訓練損失和驗證損失
fig_loss(history)
# 繪製訓練精度和驗證精度
fig_acc(history)
輸出:
訓練結束,評估模型->
損失:
1.0794099688053131
精度:
0.8561199903488159
訓練損失和驗證損失:
訓練精度和驗證精度:
附:
《AI:普通列表數組轉化爲one-hot編碼的numpy數組矩陣》