如何在 Keras 中绘制 MLP 模型的训练损失和准确度曲线?

Die*_*ego 0 neural-network roc scikit-learn keras tensorflow

我使用Keras模拟神经网络,我试图用一个图来评估它accval_acc。我在以下代码行中有 3 个错误:

  1. print(history.keys())错误是function' object has not attribute 'keys'
  2. y_pred = classifier.predict(X_test)错误是name 'classifier' is not defined
  3. plt.plot(history.history['acc'])错误是 'History' object is not subscriptable

我也在尝试绘制 ROC 曲线,我该怎么做?

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import keras
from keras.models import Sequential
from keras.layers import Dense
from sklearn import cross_validation
from matplotlib import pyplot
from keras.utils import plot_model

dataset = pd.read_csv('Data_BP.csv')
X = dataset.iloc[:, 0:11].values
y = dataset.iloc[:, -1].values

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = cross_validation.train_test_split(X, y, test_size = 0.2, random_state = 0)

from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)

def Model():
    classifier = Sequential()
    classifier.add(Dense(units = 12, kernel_initializer = 'uniform', activation = 'relu', input_dim = 11))
    classifier.add(Dense(units = 8, kernel_initializer = 'uniform', activation = 'relu'))
    classifier.add(Dense(units = 1, kernel_initializer = 'uniform', activation = 'sigmoid'))
    classifier.compile(optimizer = 'adam', loss = 'mean_squared_error', metrics = ['mse', 'acc'])
    return classifier

classifier = Model()
history = classifier.fit(X_train, y_train, validation_split=0.25, batch_size = 10, epochs = 5)

print('\n', history.history.keys())

y_pred = classifier.predict(X_test)
y_pred = (y_pred > 0.5)

from sklearn.metrics import recall_score, classification_report, auc, roc_curve
cm = confusion_matrix(y_test, y_pred)
print(cm)


plt.plot(history.history['acc'])
plt.plot(history.history['val_acc'])
plt.title('Model accuracy')
plt.ylabel('Accuracy')
plt.xlabel('Epoch')
plt.legend(['Train', 'Test'], loc='upper left')
plt.show()
Run Code Online (Sandbox Code Playgroud)

应该增加哪些功能?

tod*_*day 7

更改historyclassifier以下几行(实际上Historyobject 是 object 上fit调用的方法的返回值Model),如下所示:

classifier = Model()
history = classifier.fit(...)
Run Code Online (Sandbox Code Playgroud)

不要将fit方法的返回值与您的模型混淆。该History对象,顾名思义,只包含训练历史。然而,你的模型是classifier它是有方法的一个fit()predict()evaluate()compile(),等。

此外,该History对象有一个名为的属性history,它是一个包含训练过程中损失和度量值的字典。因此,您需要改为使用print(history.history.keys())

现在,如果您想在训练期间绘制损失曲线(即每个时期结束时的损失),您可以这样做:

loss_values = history.history['loss']
epochs = range(1, len(loss_values)+1)

plt.plot(epochs, loss_values, label='Training Loss')
plt.xlabel('Epochs')
plt.ylabel('Loss')
plt.legend()

plt.show()
Run Code Online (Sandbox Code Playgroud)