天天看點

深度學習的小知識點Batch NormalizationKeras.callbacks

文章目錄

  • Batch Normalization
  • Keras.callbacks
    • 1. ModelCheckpoint

Batch Normalization

Batch Normalization層(簡稱BN),是将上一層輸出的資料标準化之後再傳遞到下一層,可是BN層放在activation層前面或者後面卻存在不同意見。

此方法原創作者将其放在激活層(用tanh激活)之前,也有人建議放在激活層(用relu激活)之後。後者在一般情況下會獲得更高的準确率。

是以,如果用relu激活的話,還是放在relu之後吧。下面給出理由:

BN層标準化來自CONV層的特征分布。這些特征中的一些可能是負的,它們将被諸如ReLU的非線性激活函數鉗位(即,設定為零)。

如果我們在激活之前進行标準化,我們基本上将标準化中的負值包括在内。然後我們以零為中心的特征通過ReLU,我們消除所有小于零的值(包括在标準化之前可能非負的值)。

如果用tanh激活的話,可以考慮放在激活函數前(原創作者那時還沒有relu)

當上一層輸出的資料直接進入激活層的時候,對于大于2,小于-2的值激活函數的作用不明顯,是以要先将其标準化至激活函數敏感區間。

深度學習的小知識點Batch NormalizationKeras.callbacks
深度學習的小知識點Batch NormalizationKeras.callbacks

在keras中用函數

BatchNormalization(axis=chanDim)

,如果是channels_first資料,chanDim=1;如果是channels_last資料,chanDim=-1

================================================================================

Keras.callbacks

1. ModelCheckpoint

在每個epoch之後儲存模型:

keras.callbacks.ModelCheckpoint(filepath, monitor='val_loss', verbose=0, save_best_only=False, save_weights_only=False, mode='auto', period=1)

參數:

filepath: 字元串,儲存模型的路徑。

monitor: 被監測的資料。

verbose: 詳細資訊模式,0 或者 1 。

save_best_only: 如果 save_best_only=True, 被監測資料的最佳模型就不會被覆寫。

mode: {auto, min, max} 的其中之一。 如果 save_best_only=True,那麼是否覆寫儲存檔案的決定就取決于被監測資料的最大或者最小值。 對于 val_acc,模式就會是 max,而對于 val_loss,模式就需要是 min,等等。 在 auto 模式中,方向會自動從被監測的資料的名字中判斷出來。

save_weights_only: 如果 True,那麼隻有模型的權重會被儲存 (model.save_weights(filepath)), 否則的話,整個模型會被儲存 (model.save(filepath))。

period: 每個檢查點之間的間隔(訓練輪數)。

注意:filepath 可以包括命名格式選項,可以由 epoch 的值和 logs 的鍵(由 on_epoch_end 參數傳遞)來填充。

例如:如果 filepath 是 weights.{epoch:02d}-{val_loss:.2f}.hdf5, 那麼模型被儲存的的檔案名就會有訓練輪數和驗證損失。