python - keras 无法识别自定义对象
问题描述
我正在使用自定义自定义损失函数加载我的模型,但是当我运行代码时出现错误:ValueError: Unknown loss function:dice_coef_loss
. 是使用 2 个 GPU 创建的。当我使用 1 个 GPU 保存模型时,load_model()
我没有收到错误消息。多 GPU 训练的模型无法识别是否有原因custom_objects
?
import tensorflow as tf
from tensorflow.keras.models import load_model
from tensorflow.keras import backend as K
def dice_coef(y_true, y_pred):
y_true_f = K.flatten(y_true)
y_pred_f = K.flatten(y_pred)
intersection = K.sum(y_true_f * y_pred_f)
return (2. * intersection + smooth) / (K.sum(y_true_f) + K.sum(y_pred_f) + smooth)
def dice_coef_loss(y_true, y_pred):
return -dice_coef(y_true, y_pred)
load_model('test_2gpus_model', custom_objects = {'dice_coef': dice_coef, 'dice_coef_loss': dice_coef_loss}))
我也试过:
load_model('test_2gpus_model', custom_objects = {'dice_coef': dice_coef(y_true, y_pred), 'dice_coef_loss': dice_coef_loss(y_true, y_pred)}))
但后来我得到了错误NameError: name 'y_true' is not defined
解决方案
我遇到了同样的问题,因为函数定义在另一个类中,而不是我从中调用 load_model 的类。当我在调用 load_model 的类中复制函数定义时,它起作用了。
推荐阅读
- android - 按钮颜色和渐变的功能
- perl - 无法在 perl 中获取 YAML 文档节点
- awk - awk zip 行,如 python zip
- android - 毕加索没有在 ImageView 上加载图像
- python - 加载模型和应用预测的正确方法
- java - 使用 if else 语句进行 JOptionPane 输入验证
- php - Query Join table to sort by menudindex
- java - eclipselink的级联删除问题
- ruby-on-rails - Webpacker 安装给出错误:无法加载此类文件 — ubygems
- java - GCloud java错误:java.lang.IllegalStateException:响应已经提交