0
nadam
オプティマイザを使用してモデルを開発しています。検証の損失が2つのエポックで減少しない場合、トレーニング中にsgd
に切り替える方法があるかどうか疑問に思っていました。トレーニング中にケラのオプティマイザを変更する
nadam
オプティマイザを使用してモデルを開発しています。検証の損失が2つのエポックで減少しない場合、トレーニング中にsgd
に切り替える方法があるかどうか疑問に思っていました。トレーニング中にケラのオプティマイザを変更する
コールバックを作成してトレーニングを停止することができます。このコールバックでは、オプティマイザを変更して再びフィットする関数を作成します。
以下のコールバックは、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])
https://stackoverflow.com/questions/47842931/valueerror-error-when-checking-target-expected-model-2-to-have-shape-none-25提案がありますか? –