weixin_50745076 2023-04-10 17:09 采纳率: 100%
浏览 76
已结题

提问:加载包含多个自定义loss的预训练模型报错

错误说明:

在使用tensorflow.keras加载包含多个自定义loss预训练神经网络时,Visual Studio Code蹿红:

Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "D:\ProgramFiles\Anaconda3\envs\MatlabEngine\lib\site-packages\keras\utils\traceback_utils.py", line 70, in error_handler
    raise e.with_traceback(filtered_tb) from None
  File "D:\ProgramFiles\Anaconda3\envs\MatlabEngine\lib\site-packages\keras\dtensor\utils.py", line 144, in _wrap_function
    init_method(instance, *args, **kwargs)
TypeError: __init__() got an unexpected keyword argument 'reduction'

 加载模型代码为:

M = tf.keras.models.load_model('D:/MODEL/my_model.h5', {'user_loss1': user_loss1, 'user_loss2': user_loss2})

自定义损失函数如下:

# Define the loss functions
def user_loss1(y_true, y_pred):
      loss = tf.keras.backend.mean(tf.keras.backend.std(y_true - y_pred)) / tf.keras.backend.std(tf.keras.backend.square(y_true))
      return loss
def user_loss2(y_true, y_pred):
      loss = tf.keras.backend.std(y_true - y_pred)
      return loss

环境配置如下:

# 输入:

Python --version

conda list tensorflow


# 输出:

Python 3.9.16

# packages in environment at D:\ProgramFiles\Anaconda3\envs\MatlabEngine:#

# Name Version Build Channel

tensorflow 2.11.1 pypi_0 pypi

tensorflow-estimator 2.11.0 pypi_0 pypi

tensorflow-intel 2.11.1 pypi_0 pypi

tensorflow-io-gcs-filesystem 0.31.0 pypi_0 pypi

测试描述:

单一只使用user_loss1或者user_loss2时,该报错消失,而给出如下报错

M = tf.keras.models.load_model('D:/MODEL/my_model.h5', {'user_loss1': user_loss1})

# 输出
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "D:\ProgramFiles\Anaconda3\envs\MatlabEngine\lib\site-packages\keras\utils\traceback_utils.py", line 70, in error_handler
    raise e.with_traceback(filtered_tb) from None
  File "D:\ProgramFiles\Anaconda3\envs\MatlabEngine\lib\site-packages\keras\saving\legacy\serialization.py", line 557, in deserialize_keras_object
    raise ValueError(
ValueError: Unknown loss function: 'user_loss2'. Please ensure you are using a `keras.utils.custom_object_scope` and that this object is included in the scope. See https://www.tensorflow.org/guide/keras/save_and_serialize#registering_the_custom_object for details.

 有遇到过类似错误的小伙伴不?后面是如何解决的呀?

  • 写回答

3条回答 默认 最新

  • 2301_77547549 2023-04-10 17:16
    关注

    该报错可能是由于在加载模型时没有正确注册自定义损失函数导致的。另一个可能的原因是,使用的 TensorFlow 版本不支持 reduction 参数,但在自定义损失函数中使用了该参数。
    在 TensorFlow 2.0 以后的版本中,reduction 参数被添加到了许多损失函数中,用于指定损失函数在计算损失值时如何将不同样本的损失值进行聚合,例如取平均值、求和等。如果您的 TensorFlow 版本过旧,可能不支持该参数。
    解决方法是,在自定义损失函数中移除 reduction 参数,或者升级 TensorFlow 版本至 2.0 或以上版本。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 4月18日
  • 已采纳回答 4月10日
  • 创建了问题 4月10日

悬赏问题

  • ¥20 西门子S7-Graph,S7-300
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改