fit_generator函數
callback類
keras.callbacks.ModelCheckpoint是一個常見的callback類,其重寫了on_epoch_end函數,在每個epoch結束保存模型數據進入文件。
- keras.callbacks.History類主要記錄每一次epoch訓練的結果,包含loss以及acc的值;
- keras.callbacks.ProgbarLogger類實現訓練中間狀態數據信息的輸出,主要涉及進度相關信息。
-
訓練過程中,每次權重的更新都是在一個batch上進行一次,是基於batch量的數據爲單位進行權重的更新;
-
基於生成器模型訓練數據,可以提升效率,降低對物理服務器性能,尤其是內存的要求;
-
訓練過程中,callback函數執行了大量的工作,包括loss、acc值的記錄,以及訓練中間結果的日誌反饋,最重要的是模型數據的輸出,也是通過callback的方式實現;
-
訓練和驗證的邏輯近乎一樣,訓練要更新權重,但是驗證過程,僅僅更新網絡狀態,不涉及權重(loss以及acc參數)信息的更新;
-
Keras採用了生成器,裝飾器,回調等編程思想,另外,對矩陣運算,例如numpy.dot以及numpy.multiply的數學邏輯都有一定要求,對python編程要求還是比較高滴。
我的新的callback函數
class F1ScoreCallback(Callback):
def __init__(self, predict_batch_size=1024, include_on_batch=False):
super(F1ScoreCallback, self).__init__()
self.predict_batch_size = predict_batch_size
self.include_on_batch = include_on_batch
def on_batch_begin(self, batch, logs={}):
pass
def on_train_begin(self, logs={}):
if not ('avg_f1_score_val' in self.params['metrics']):
self.params['metrics'].append('avg_f1_score_val')
def on_batch_end(self, batch, logs={}):
if (self.include_on_batch):
logs['avg_f1_score_val'] = float('-inf')
def on_epoch_end(self, epoch, logs={}):
logs['avg_f1_score_val'] = float('-inf')
if (self.validation_data):
y_predict, predict2, predict3 = self.model.predict(self.validation_data[0],
batch_size=self.predict_batch_size)
y_predict[y_predict >= 0.5] = 1
y_predict[y_predict < 0.5] = 0
f1 = f1_score(self.validation_data[1], y_predict, average='macro')
# print("macro f1_score %.4f " % f1)
f2 = f1_score(self.validation_data[1], y_predict, average='micro')
# print("micro f1_score %.4f " % f2)
avgf1=(f1 + f2) / 2
# print("avg_f1_score %.4f " % (avgf1))
logs['avg_f1_score_val'] =avgf1
只要加入log中,然後在monitor選擇你自己定義的log函數名字,就能在一個epoch後的val中運行