Keras中存在自定义loss或layer如何解决load_model报错问题

Keras是一种可以快速帮助研究人员实现模型搭建,测试模型性能的框架。正是其简洁高效的特点也使得很多人在使用中往往忽略了其潜在的可扩展性。其实,Keras不仅可以快速实现深度学习中的一些常用模型,还可以根据实际需求来自定义模型的Layer和Loss。毕竟,能够解决所有问题的模型一般是不存在的。关于如何自定义模型的Layer和Loss本文不在此详述,大家可以参考Keras文档,本文主要和大家分享一下在模型中存在自定义Layer或者Loss的情况下,如何解决load_model报错问题,成功导入模型文件。

下面以简单神经网络为例。

当我们使用keras中模块搭建模型和训练模型时,模型训练完毕后可以成功加载训练完成的模型文件。

model = Sequential()
model.add(Dense(10,input_shape=(None, 1))
model.add(Dense(1))
model.compile(optimizer='adam', loss='mse')
model.fit(train_X, train_Y, batch_size=32, epochs=10)
model.save('1.h5')

model = load_model('1.h5')
predicted = model.predict(test_X)

当我们自定义loss或者layer时,如果依旧采用上述代码进行训练后模型文件加载,将会出现Value error 或layer 不存在等问题。

model = Sequential()
model.add(NLSTM(10,input_shape=(None, 1)) # NLSTM为自定义layer
model.add(Dense(1))
model.compile(optimizer='adam', loss=my_loss) # my_loss为自定义loss
model.fit(train_X, train_Y, batch_size=32, epochs=10)
model.save('1.h5')

model = load_model('1.h5')
predicted = model.predict(test_X)

那么,如何解决上述问题呢?在Keras中,如果存在自定义layer或者loss,需要在load_model()中以字典形式指定layer或loss。

model = load_model('1.h5', custom_objects={'my_loss':my_loss,'NestedLSTM': NestedLSTM})

 

  • 7
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值