Я сделал собственный обратный вызов для Keras, чтобы остановить чрезмерную подгонку, где logi c означает, что если потеря проверки текущей эпохи меньше, чем потеря проверки И потеря проверки меньше минимума потеря валидации когда-либо происходила, за исключением весов или всей модели. Я думаю, что здесь есть некоторые проблемы с функциональностью, потому что он не работает должным образом.
class StopOverFit(tf.keras.callbacks.Callback):
'''
A class that stops Overfitting by saving the model/weights if val_loss < loss and val_loss < min_val_loss ever encountered
'''
def __init__(self,filename,weights_only=True):
'''
Constructor of the Callback
args:
filename: {str} should in the format "Epoch: {epoch:02d}- val_loss: {val_loss:.3f}.hdf5"
weights_only: {bool} whether to save the whole model or just the weights
'''
super(StopOverFit,self).__init__()
self.filename = filename
self.weights_only = weights_only
self.best_min_val_loss = np.inf # "best" means without overfitting
def on_epoch_end(self, epoch, logs=None):
val_loss = logs['val_loss']
loss = logs['loss']
if (val_loss<self.best_min_val_loss) and (val_loss<loss):
print(f"best val loss improved from {self.best_min_val_loss:.4f} to {val_loss:.4f}. saving..")
self.best_min_val_loss = val_loss
if self.weights_only:
self.model.save_weights(self.filename)
else:
self.model.save(self.filename)
Я инициализировал обратный вызов как
filepath="Epoch: {epoch:02d}- val_loss: {val_loss:.3f}.h5"
sof = StopOverFit(filepath)
и использовал его в обучении модели, но когда я использую это , он ничего не печатает , а веса модели, сохраненные в текущем рабочем каталоге, точно такие как Epoch: {epoch:02d}- val_loss: {val_loss:.3f}.h5
.
Я хочу сохранить веса модели примерно как Epoch: 02- val_loss: 0.654.h5