如何在 keras 中使用 tf.losses.sigmoid_cross_entropy 进行标签平滑

Ser*_*n89 3 tensorflow

我想在 keras model.fit 中使用标签平滑,但它给出错误。如果我尝试

model = tf.keras.Model(inputs=inputs, outputs=predictions)
optimizer = tf.keras.optimizers.Adam(0.001)
model.compile(optimizer=optimizer, loss=tf.losses.sigmoid_cross_entropy(label_smoothing=0.1))
Run Code Online (Sandbox Code Playgroud)

它给出了错误

 TypeError: sigmoid_cross_entropy() missing 2 required positional arguments: 'multi_class_labels' and 'logits'
Run Code Online (Sandbox Code Playgroud)

如果我添加

loss=tf.losses.sigmoid_cross_entropy(y_true, y_pred, label_smoothing=0.1))
Run Code Online (Sandbox Code Playgroud)

它给

NameError: name 'y_true' is not defined
Run Code Online (Sandbox Code Playgroud)

我该如何使用这个损失函数?

Sha*_*rky 5

Keras 将两个参数传递给其损失函数。为了使用更多,您可以将任何原生 TF 函数包装为自定义函数,传递所需的参数并将其传递给 Kerasmodel.fit

def custom_loss(y_true, y_pred):
    return tf.compat.v1.losses.sigmoid_cross_entropy(y_true, y_pred, label_smoothing=0.1)

model.compile(optimizer, loss=custom_loss)
Run Code Online (Sandbox Code Playgroud)