在同一地块上进行地块训练,验证和测试集

时间:2020-02-19 13:09:38

标签: python matplotlib keras

这就是我分割数据的方式

(X, y), (X_test, y_test) = mnist.load_data()
X_train, X_val, y_train, y_val = train_test_split(X, 
                                                  y, 
                                                  test_size=0.1, 
                                                  random_state=1)

下面的代码绘制了X_train和X_val,我想添加X_test绘制

history = model.fit(
    x= X_train,
    y= y_train,
    epochs = 10,
    validation_data = (X_val, y_val),
    batch_size = 128
)

from matplotlib import pyplot as plt


plt.plot(history.history['loss'])
plt.plot(history.history['val_loss'])
plt.title('model loss')
plt.ylabel('loss')
plt.xlabel('epoch')
plt.legend(['train', 'val'], loc='upper left')
plt.show()

是否还可以在此图上绘制test_loss以获得同一图上所有三个图的概览?

没有history.history['test_loss']

enter image description here

1 个答案:

答案 0 :(得分:1)

您尚未计算test_loss。 您首先需要使用X_test预测一些标签,然后根据预测值和y_test计算损失。或者,您可以使用评估直接做到这一点:

test_loss = model.evaluate(X_test, y_test)

您不能将它们一起绘制,因为test_loss是在训练结束时一次计算的单个值,而不是像验证那样的每个时期都计算一次。

尽管如此,您不应在训练中使用X_test和y_test,因为您将对所有可用数据进行训练,因此无法再进行测试。

X_test和y_test仅在测试模型性能的所有步骤结束时使用。

在您训练时,验证数据用于“测试数据”的目的。完成所有训练和优化之后,您可以在训练广告验证的组合数据集上对网络进行再训练,并使用生成的网络来测试其在测试数据集(X_test,y_test)上的效果