按照每次batch级别的训练结果来画loss与acc曲线

因为有的模型是epoch敏感的,只需要很少的epoch就能够达到比较好的训练结果,因此采用常规的记录方式没办法比较好的画lossacc的图(横轴epoch数据太少),需要在每个batch之后就能够画出当前batch级别的训练信息。
可以用过自定义的类来继承Callback,然后把这个类传给fitcallbacks参数,这样训练的时候回调该类里面的函数达到信息记录的目的:

from keras import callbacks
class LossAndAccHistory(callbacks.Callback):
    '''
    继承自Callback,实现特定的方法
    '''
    def on_train_begin(self, logs={}):
        self.loss = []
        self.acc = []

    def on_batch_end(self, batch, logs={}):
        self.loss.append(logs.get('loss'))
        self.acc.append(logs.get('acc'))


history = LossAndAccHistory()
epochs = 2
model.fit(x_train, y_train, batch_size=64, epochs=epochs, validation_data=(x_val, y_val),
                    callbacks=[history]) #自定义的函数给到callback回调,每次在固定的时间点记录训练信息
plt.figure()
plt.plot(range(0, len(history.loss)), history.loss, label='train_loss')
plt.plot(range(0, len(history.acc)), history.acc, label='train_acc')
plt.xlabel('Batch')
plt.title('Training Loss and Accuracy')
plt.ylabel('Loss / Accuracy')
plt.legend()
plt.savefig('./train-results.png')
plt.show()
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容