为了做一些参数调整,我喜欢用 Keras 循环一些训练函数。但是,我意识到当tensorflow.keras.metrics.AUC()用作度量时,对于每个训练循环,都会将一个整数添加到 auc 度量名称中(例如 auc_1、auc_2、...)。所以实际上,即使从训练函数中出来,keras 指标也会以某种方式存储。
这首先导致回调不再识别指标,并且还让我想知道是否没有其他东西像模型权重一样存储。
如何重置指标以及是否有其他由 keras 存储的内容需要重置才能重新启动以进行培训?
您可以在下面找到一个最小的工作示例:
编辑:这个例子似乎只适用于 tensorflow 2.2
import numpy as np
import tensorflow as tf
import tensorflow.keras as keras
from tensorflow.keras.metrics import AUC
def dummy_network(input_shape):
model = keras.Sequential()
model.add(keras.layers.Dense(10,
input_shape=input_shape,
activation=tf.nn.relu,
kernel_initializer='he_normal',
kernel_regularizer=keras.regularizers.l2(l=1e-3)))
model.add(keras.layers.Flatten())
model.add(keras.layers.Dense(11, activation='sigmoid'))
model.compile(optimizer='adagrad',
loss='binary_crossentropy',
metrics=[AUC()])
return model
def train():
CB_lr = tf.keras.callbacks.ReduceLROnPlateau(
monitor="val_auc",
patience=3,
verbose=1,
mode="max",
min_delta=0.0001,
min_lr=1e-6)
CB_es = tf.keras.callbacks.EarlyStopping(
monitor="val_auc",
min_delta=0.00001,
verbose=1,
patience=10,
mode="max",
restore_best_weights=True)
callbacks = [CB_lr, CB_es]
y = [np.ones((11, 1)) for …Run Code Online (Sandbox Code Playgroud)