我对 ML 相当陌生,目前正在使用 tensorflow 和 keras 在 python 中实现一个简单的 3D CNN。我想根据 AUC 进行优化,并且还想在 AUC 分数方面使用提前停止/保存最佳网络。我一直在使用 tensorflow 的 AUC 函数,如下所示,它在训练中效果很好。但是,未保存 hdf5 文件(尽管检查点 save_best_only=True),因此我无法获得评估的最佳权重。
以下是相关的代码行:
model.compile(loss='binary_crossentropy',
optimizer=keras.optimizers.Adam(lr=lr),
metrics=[tf.keras.metrics.AUC()])
model.load_weights(path_weights)
filepath = mypath
check = tf.keras.callbacks.ModelCheckpoint(filepath, monitor=tf.keras.metrics.AUC(), save_best_only=True,
mode='auto')
earlyStopping = tf.keras.callbacks.EarlyStopping(monitor=tf.keras.metrics.AUC(), patience=hyperparams['pat'],mode='auto')
history = model.fit(X_trn, y_trn,
batch_size=bs,
epochs=n_epochs,
verbose=1,
callbacks=[check, earlyStopping],
validation_data=(X_val, y_val),
shuffle=True)
有趣的是,如果我只在早期停止和检查点更改 monitor='val_loss'(而不是 model.compile 中的 'metrics'),hdf5 文件会被保存,但显然在验证损失方面给出了最好的结果。我也尝试过使用 mode='max' 但问题是一样的。我非常感谢您的建议,或任何其他建设性的想法如何解决这个问题。