按照每次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()

你可能感兴趣的:(按照每次batch级别的训练结果来画loss与acc曲线)