keras callback中的stop_training

keras這個框架簡潔優美,設計上堪稱典範。而tensorflow就顯得臃腫龐雜,混亂不清。固然,keras的周邊部件好比callbacks、datasets、preprocessing有許多過分設計的感受,可是keras的核心是好的,這個設計完美的核心使得這個系統可擴展性極強、代碼邏輯性極強。然而,其中由於依舊有一些小細節,一旦理解不透,就會對keras的原理有「神奇」之感,好比本文接下來要講的這個問題:callbacks中的stop_training。框架

keras的Model#fit()函數接受一個callback列表,在訓練的不一樣階段會觸發callback的不一樣操做。其中這些階段包括:函數

  • 訓練開始和結束
  • 批次開始和結束
  • 輪次開始和結束

callback列表中的元素都是Callback的派生類的實例。每一個Callback派生類均可以選擇性的重寫以上六個函數。設計

其中callback中經常使用的一種操做是:callback_model.stop_training=True or Falsecode

callback_model是每一個Callback實例的成員變量,它對應的類型也就是Model。繼承

可是Model並無stop_training這個成員變量,Model繼承自Network,Network也沒有這個成員變量。stop_training這個屬性惟一出現的兩個地方就是:callbacks.py中定義回調接口的時候,train_array.py執行訓練操做的時候。接口

這個屬性彷彿從天而降、無中生有。it

實際上,Model的父類Network實現了__setattr__函數,這樣就能夠隨意往Network上「懸掛」變量了,Model固然也繼承了這樣的特色。變量

相關文章
相關標籤/搜索