Python 在同一地块上绘制培训、验证和测试集

Python 在同一地块上绘制培训、验证和测试集,python,matplotlib,keras,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,

这就是我分割数据的方式

(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\u loss']


您还没有计算测试损失。 首先需要使用X_检验预测一些标签,然后根据预测值和y_检验计算损失。或者,您可以使用evaluate直接执行此操作:

test_loss = model.evaluate(X_test, y_test)
您无法将它们绘制在一起,因为test_loss是在训练结束时计算一次的单个值,而不是每个历元式的验证

尽管如此,您不应该在培训中使用X_测试和y_测试,因为您已经对所有可用数据进行了培训,因此无法再进行测试

X_测试和y_测试仅用于测试模型性能的所有步骤结束时


验证数据用于在培训时使用“测试数据”。完成所有训练和优化后,您可以在train ad validation的组合数据集上重新训练网络,并使用生成的网络在测试数据集上测试其性能(X_测试,y_测试)

您是否尝试添加类似于
plt.plot(history.history['test_loss')的内容)
?当我打印
历史记录时。历史记录
只有损失和价值损失,但没有测试损失。
测试损失
?@mkrieger1请现在检查,希望它清晰。如果使用
plt.plot(X\u测试),会发生什么
?我是否也可以计算模型。使用传递到模型验证集的x_测试重新拟合并绘制它?可以,但与获得val_损失时相比,权重将发生变化。无论如何,在优化结束之前,不应该使用X_测试和y_测试作为模型的度量performace@Matthew那么,你会接受这个答案吗?或者,你想要一些其他信息吗?