我正在循环中测试顺序模型的准确性,包括提前停止回调。
我的环境是
tensorflow 2.1.0 gpu_py37h7a4bb67_0
tensorflow-base 2.1.0 gpu_py37h6c5654b_0
tensorflow-estimator 2.0.1 pypi_0 pypi
tensorflow-gpu 2.0.0 pypi_0 pypi
我在 jupyter notebook 中运行我的测试。
Python 版本是 3.7.7
for x in range:
create_model()
history=model.fit(..callback=[es_val_loss]..)
我的回调是
es_val_loss = EarlyStopping(monitor='val_loss',
mode='auto',
verbose=0,
patience=PATIENCE,
min_delta=ES_VAL_LOSS_MIN_DELTA,
baseline=None,
restore_best_weights=True)
我的 create_model() 是
def create_model( ... ):
## Create our model
model = Sequential()
# 1st layer
model.add(Dense())
model.add(Dropout())
# other layers
model.add(Dense())
model.add(Dropout())
model.add(Dense())
model.add(Dropout())
# output layer: dim=1, activation sigmoid
model.add(Dense( ))
myoptimizer = optimizers.Adam(lr=learning_rate)
# Compile the model
model.compile(loss='binary_crossentropy', # since we are predicting 0/1
optimizer=myoptimizer,
metrics=['accuracy'])
return model
对于第一个模型,回调响应从 inf 开始,用于 val_loss
Epoch 00001: val_loss improved from inf to ... saving model to ...
对于循环中的其他模型,我的回调保留了前一个模型的结果,并且不是从 inf 开始,而是使用前一个模型的最佳最小 val_loss 值。
Epoch 00001: val_loss improved from ... to ..., saving model to ...
如何解决这种行为,以便每个模型迭代都以自己的回调清除值开始?
我尝试设置model.reset_states()
和/或tf.keras.backend.clear_session()
在循环中没有成功。
编辑
经过进一步调查,我发现回调发送的消息具有误导性。如果我verbose=0
输入回调参数和verbose=2
参数**model.fit**
,我可以看到回调按预期工作。