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
训练损失和验证损失:
训练精度和验证精度:
扫描二维码关注公众号,回复:
8675261 查看本文章
附:
《AI:普通列表数组转化为one-hot编码的numpy数组矩阵》