解决NotImplementedError: Layer XX has arguments in `__init__` and therefore must override `get_config`

一、报错提示

NotImplementedError: Layer XX has arguments in __init__ and therefore must override get_config.
(XX表示自定义的CLASS)

二、错误原因

使用save方法后,未重新在Class中自定义属性

三、原因

模型保存有两种接口,save和save_weights方法。
区别如下:
save:保存网络模型图结构和参数。
save_weights:仅保存网络模型的参数。

如果使用save方法,自定义的Class里面的声明需要get_config重新配置声明一遍,否则Tensorflow无法保存模型的图结构(至于具体为什么,我就不深究了,毕竟用的人家的接口,只是知道了这个特点)。

如果不想重写,可以用save_weights暂时解决参数的保存的问题,也就不会有上述错误了。但毕竟save()更全面,为了后期的省事,还是推荐使用它(虽然稍占内存)。

四、解决方案

解决save()报错的具体操作如下:
在定义的Class里,增加一个get_config函数用于配置的更新(具体操作如下)。
其中__init__中的声明过的所有属性,需要在get_config函数中update一下。见下图圈中部分

get_config模板如下,替换掉再跑就好了。

def get_config(self):
        config = super().get_config().copy()
        config.update({
            '属性1': self.属性1,
            '属性2': self.属性2,
            '属性3': self.属性3,
        })
        return config

在这里插入图片描述
再次运行,模型保存成功!

  • 28
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 32
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 32
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sinysama

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值