Python Matplotlib未显示培训、测试损失/精度曲线?

Python Matplotlib未显示培训、测试损失/精度曲线?,python,tensorflow,matplotlib,deep-learning,conv-neural-network,Python,Tensorflow,Matplotlib,Deep Learning,Conv Neural Network,我正在尝试使用Matplotlib构建一个显示精度和损耗曲线的图形,但它不显示曲线,而只是显示图形,其x轴从负值开始,为什么不0 代码: model.compile(loss='classifical_crossentropy',optimizer='adam',metrics=['accurity']) 最大精度=0.70 对于范围(10)内的i: 打印(“历元编号”,i+1) 历史=模型.fit(序列数据,序列标签,历代=1,批次大小=32,详细=1,验证数据=(测试数据,测试标签)) 如果

我正在尝试使用Matplotlib构建一个显示精度和损耗曲线的图形,但它不显示曲线,而只是显示图形,其
x轴
从负值开始,为什么不
0

代码:

model.compile(loss='classifical_crossentropy',optimizer='adam',metrics=['accurity'])
最大精度=0.70
对于范围(10)内的i:
打印(“历元编号”,i+1)
历史=模型.fit(序列数据,序列标签,历代=1,批次大小=32,详细=1,验证数据=(测试数据,测试标签))
如果历史记录.history['val\u精度][0]>最大精度:
打印(“上述新的最佳型号”)
最大精度=历史记录。历史记录['val\u精度][0]
model.save('CNN-logo.h5')
model=tf.keras.models.load_model('CNN-logo.h5'))
[列车损失、列车精度]=模型。评估(列车数据、列车标签)
打印(“列车数据评估结果:损耗={},精度={}”。格式(列车损耗,列车精度))
[测试损耗,测试acc]=模型评估(测试数据,测试标签)
打印(“测试数据的评估结果:损失={},准确度={}”。格式(测试损失,测试acc))
#绘制损失曲线
plt.图(figsize=[8,6])
plt.plot(history.history['loss'],'r',线宽=3.0)
plt.绘图(历史记录['valu loss'],'b',线宽=3.0)
plt.legend(['Training loss','Validation loss',],fontsize=18)
plt.xlabel('Epochs',fontsize=16)
plt.ylabel('Loss',fontsize=16)
plt.title(“损失曲线”,fontsize=1)
plt.show()
#绘制精度曲线
plt.图(figsize=[8,6])
plt.plot(历史记录['accurity'],'r',线宽=3.0)
plt.绘图(历史记录['val_accurity'],'b',线宽=3.0)
plt.图例([‘培训准确度’、‘验证准确度’],fontsize=18)
plt.xlabel('Epochs',fontsize=16)
plt.ylabel('精度',fontsize=16)
plt.title(“精度曲线”,fontsize=16)
plt.show()
图形

您正在运行一个历元的模型,因此它只有一个历元的历史记录。要保存最佳模型,您可以使用回调

checkpoint_callback = tf.keras.callbacks.ModelCheckpoint(filepath='CNN-logo.h5',
                      monitor='val_accuracy', mode='max', save_best_only=True)
earlystopping_callback = tf.keras.callbacks.EarlyStopping(monitor='loss', patience=3)

history = model.fit(x, y, epochs=50, batch_size=32, verbose=1, validation_split=0.2,
callbacks=[checkpoint_callback, earlystopping_callback])

model=tf.keras.models.load_model('CNN-logo.h5')
[train_loss, train_accuracy] = model.evaluate(x, y)
print("Evaluation result on Train Data : Loss = {}, accuracy = {}".format(train_loss, train_accuracy))
[test_loss, test_acc] = model.evaluate(x, y)
print("Evaluation result on Test Data : Loss = {}, accuracy = {}".format(test_loss, test_acc))

#Plot the loss curves
plt.figure(figsize=[8,6])
plt.plot(history.history['loss'],'r',linewidth=3.0)
plt.plot(history.history['val_loss'],'b',linewidth=3.0)
plt.legend(['Training loss', 'Validation Loss'],fontsize=18)
plt.xlabel('Epochs ',fontsize=16)
plt.ylabel('Loss',fontsize=16)
plt.title('Loss Curves',fontsize=1)
plt.show()

#Plot the Accuracy Curves
plt.figure(figsize=[8,6]) 
plt.plot(history.history['accuracy'],'r',linewidth=3.0) 
plt.plot(history.history['val_accuracy'],'b',linewidth=3.0)
plt.legend(['Training Accuracy', 'Validation Accuracy'],fontsize=18)
plt.xlabel('Epochs ',fontsize=16) 
plt.ylabel('Accuracy',fontsize=16)
plt.title('Accuracy Curves',fontsize=16)
plt.show()
输出:


好的,谢谢Mohil,但您可以在上面看到,我在epochs下使用了一个循环,循环转到第10次迭代。你能详细说明一下什么是“仅保存最佳”和monitor=val\u loss吗?
save\u best\u only
以最佳性能保存模型<代码>监控是监控模型性能时应考虑的因素。可以找到详细的文件。你能描述一下我应该停止训练多少年吗?。就我而言,我认为我必须停止训练直到第六纪元,以防止过度训练。你可以使用回调来实现这一点。当你监测的指标停止改善时,它将停止训练。你能在我上面的代码中写下提前停止的代码吗。这对我会有帮助的