2017-12-04 13 views

答えて

1

コールバックを作成してトレーニングを停止することができます。このコールバックでは、オプティマイザを変更して再びフィットする関数を作成します。

以下のコールバックは、min_delta以上の改善なしに、検証の損失(val_loss)を監視し、2つのエポック(patience)後のトレーニングを停止します。モデルはトレーニングを終了したときにコールするカスタム関数について

class OptimizerChanger(EarlyStopping): 

    def __init__(self, on_train_end, **kwargs): 

     self.do_on_train_end = on_train_end 
     super(OptimizerChanger,self).__init__(**kwargs) 

    def on_train_end(self, logs=None): 
     super(OptimizerChanger,self).on_train_end(self,logs) 
     self.do_on_train_end() 

min_delta = 0.000000000001 

stopper = EarlyStopping(monitor='val_loss',min_delta=min_delta,patience=2) 

しかし、訓練が終了した後、私たちはこのコールバックを拡張し、on_train_end方法を変更することができ、余分なアクションを追加するための

def do_after_training(): 

    #warining, this creates a new optimizer and, 
    #at the beginning, it might give you a worse training performance than before 
    model.compile(optimizer = 'SGD', loss=...., metrics = ...) 
    model.fit(.....) 

は、今度は、コールバックを使ってみましょう:

changer = OptimizerChanger(on_train_end= do_after_training, 
          monitor='val_loss', 
          min_delta=min_delta, 
          patience=2) 

model.fit(..., ..., callbacks = [changer]) 
+0

https://stackoverflow.com/questions/47842931/valueerror-error-when-checking-target-expected-model-2-to-have-shape-none-25提案がありますか? –

関連する問題