【717】Keras报错'NoneType' object has no attribute '_inbound_nodes'
2022/6/1 1:19:42
本文主要是介绍【717】Keras报错'NoneType' object has no attribute '_inbound_nodes',对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
参考:‘NoneType‘ object has no attribute ‘_inbound_nodes‘解决方法汇总
问题原因
出现上图所示是因为在Keras的网络中一切都是要用层来表示,即当网络中一些keras.backend库中的函数如batch_dot、repeat_elements、Subtract、expand_dims函数、当直接使用tensorflow的一些运算函数如tf.matmul等时,均不是Keras中网络的层的概念,故会出现这种情况。
解决方法
解决方法为将自己所需的函数包装成keras的层。
最简单的解决方法就是把所有相乘、相加、数组操作以及相关函数,都用 Lambda 进行修改,注意所有的都要修改!
我自己的代码,我是拆解了,一行一行比对出来的。实际上 Multiple、Add 是可以的,但是直接用“+”就是不行的,这个之前一直没注意!
原函数:
def GFM(F_Net1, F_Net2, channel, G_input): F_Net1 = Conv2D(channel, 1, padding='same')(F_Net1) F_Net2 = Conv2D(channel, 1, padding='same')(F_Net2) F_Net_Cat = Concatenate(axis=3)([F_Net1, F_Net2]) F_Net_Cat = Conv2D(channel, 3, activation='relu', padding='same')(F_Net_Cat) F_Net_Cat = Conv2D(channel, 3, activation='relu', padding='same')(F_Net_Cat) F_Net_Cat = Conv2D(2, 1, padding='same')(F_Net_Cat) G_input = UpSampling2D(size=(2,2))(G_input) F_G_Add = add([G_input, F_Net_Cat]) F_G_SoftMax = Conv2D(2, 1, activation="softmax")(F_G_Add) G_Net1 = F_G_SoftMax[:,:,:,0] G_Net2 = F_G_SoftMax[:,:,:,1] G_Net1 = K.expand_dims(G_Net1, -1) G_Net2 = K.expand_dims(G_Net2, -1) A_F = multiply([F_Net1, G_Net1]) + multiply([F_Net2, G_Net2]) G_output = F_G_Add return A_F, G_output
改写后的函数:
def GFM(F_Net1, F_Net2, channel, G_input): F_Net1 = Conv2D(channel, 1, padding='same')(F_Net1) F_Net2 = Conv2D(channel, 1, padding='same')(F_Net2) F_Net_Cat = Concatenate(axis=3)([F_Net1, F_Net2]) F_Net_Cat = Conv2D(channel, 3, activation='relu', padding='same')(F_Net_Cat) F_Net_Cat = Conv2D(channel, 3, activation='relu', padding='same')(F_Net_Cat) F_Net_Cat = Conv2D(2, 1, padding='same')(F_Net_Cat) G_input = UpSampling2D(size=(2,2))(G_input) F_G_Add = Add()([G_input, F_Net_Cat]) F_G_SoftMax = Conv2D(2, 1, activation="softmax")(F_G_Add) # 转换为下面的形式 G_Net1 = Lambda(lambda x: x[:,:,:,0])(F_G_SoftMax) G_Net2 = Lambda(lambda x: x[:,:,:,1])(F_G_SoftMax) G_Net1 = Lambda(lambda x: K.expand_dims(x, -1))(G_Net1) G_Net2 = Lambda(lambda x: K.expand_dims(x, -1))(G_Net2) # 以下两种写法都可以 A_F1 = Multiply()([F_Net1, G_Net1]) A_F2 = Multiply()([F_Net2, G_Net2]) A_F = Add()([A_F1, A_F2]) #A_F1 = Lambda(lambda x: multiply([x[0], x[1]]))([F_Net1, G_Net1]) #A_F2 = Lambda(lambda x: multiply([x[0], x[1]]))([F_Net2, G_Net2]) #A_F = Lambda(lambda x: add([x[0], x[1]]))([A_F1, A_F2]) G_output = F_G_Add return A_F, G_output
这篇关于【717】Keras报错'NoneType' object has no attribute '_inbound_nodes'的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享