AI:神经网络IMDB电影评论二分类模型训练和评估

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数组矩阵》

https://zhangphil.blog.csdn.net/article/details/103315347

发布了1029 篇原创文章 · 获赞 987 · 访问量 336万+

猜你喜欢

转载自blog.csdn.net/zhangphil/article/details/103317475
今日推荐