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