如何解决AttributeError: Keras losses模块无BinaryFocalCrossentropy属性问题
解决AttributeError: 'keras.api._v2.keras.losses'无BinaryFocalCrossentropy属性的问题
问题原因
BinaryFocalCrossentropy 是TensorFlow 2.8及以上版本才新增到tf.keras.losses模块中的API,若你的TensorFlow版本低于2.8,就会触发该属性错误;另外也可能是导入路径或依赖库的使用方式有误。
可行解决方案
方案1:升级TensorFlow到稳定新版本
执行以下命令完成升级:
pip install --upgrade tensorflow
升级完成后,原代码中的tf.keras.losses.BinaryFocalCrossentropy即可正常调用。
方案2:自定义实现二元焦点损失函数(适用于无法升级版本的场景)
如果受环境限制不能升级TensorFlow,可以手动实现等价的损失函数:
import tensorflow as tf def binary_focal_crossentropy(y_true, y_pred, gamma=2.0, from_logits=True): if from_logits: y_pred = tf.sigmoid(y_pred) # 计算二元交叉熵 cross_entropy = -y_true * tf.math.log(y_pred) - (1 - y_true) * tf.math.log(1 - y_pred) # 计算焦点损失的权重项 weight = tf.pow(1 - y_pred, gamma) * y_true + tf.pow(y_pred, gamma) * (1 - y_true) focal_loss = weight * cross_entropy return tf.reduce_mean(focal_loss)
然后在模型编译时替换原损失函数:
model.compile( loss=lambda y_true, y_pred: binary_focal_crossentropy(y_true, y_pred, gamma=2.0, from_logits=True), metrics=METRICS, optimizer=adam )
方案3:调整导入方式(若使用独立Keras库)
如果你的项目使用的是独立Keras库而非TensorFlow集成的tf.keras,直接从keras核心库导入:
from keras.losses import BinaryFocalCrossentropy
编译模型时直接使用导入的类:
model.compile( loss=BinaryFocalCrossentropy(gamma=2.0, from_logits=True), metrics=METRICS, optimizer=adam )
内容的提问来源于stack exchange,提问作者Farhana Yasmin
相关产品推荐
相关产品推荐

