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

 

 

訓練損失和驗證損失:

 

 

訓練精度和驗證精度:

 

 

附:

《AI:普通列表數組轉化爲one-hot編碼的numpy數組矩陣》

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

發佈了1033 篇原創文章 · 獲贊 999 · 訪問量 340萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章