Keras functional API创建神经网络-常见错误之——NoneType‘ object has no attribute ‘_inbound_nodes‘

Keras functional API创建神经网络-常见错误之——NoneType‘ object has no attribute ‘_inbound_nodes‘

在 使用 functional API模式创建神经网络时,每一层网络以及每一个操作都要以 keras中层 的含义来表示,比如 将两个特征拼接,从一个大特征中取出一小块,这些操作不当就会 报错: ‘NoneType‘ object has no attribute ‘_inbound_nodes‘

import keras
import keras as K
from skimage.filters import threshold_otsu
from keras.layers import Input, Dense, Conv2D, Dropout, Flatten, BatchNormalization, Activation

# 会报错的代码
def getModel(CHANNELS, num):
input_plane = Input(shape=(CHANNELS+num, CHANNELS+num, 1)) 

input_1 = input_plane[:,:CHANNELS, :CHANNELS,:]
conv_11 = Conv2D(32, kernel_size=(3, 3))(input_1 )  
conv_1_bn1 = BatchNormalization()(conv_11)
flatten1 = Flatten()(conv_1_bn1 )


input_2 = input_plane[:, :num, :num, :] 
conv_12 = Conv2D(32, kernel_size=(3, 3))(input_2 )  
conv_1_bn2 = BatchNormalization()(conv_12)
flatten2 = Flatten()(conv_1_bn2)

flatten = keras.layers.concatenate([flatten1, flatten2], axis=1) #tf.concat就会报错
fc_1 = Dense(64)(flatten)
fc_1_bn = BatchNormalization()(fc_1)

model = Model(inputs=input_plane , outputs=fc_1_bn ) #模型创建完毕,但还是报错


## 报错: ‘NoneType‘ object has no attribute ‘_inbound_nodes‘

错误原因:其实我有两个输入,一个输出,我把两个输入放进一个数组中,在模型当中,我分别取出,这部分没有处理成 层,因此报错。
正确处理方式:
input_1= Input(shape=(CHANNELS, CHANNELS, 1)) #采用Input层来构建input_1
input_2= Input(shape=(num, num, 1)) #采用Input层来构建input_2
#模型有两个输入,用列表的方式作为输入,不能像pytorch那样,有多个参数传入,只能是inputs 和outpus这两个。
model = Model(inputs=[input_1, input_2 ] , outputs=fc_1_bn )

import keras
import keras as K
from skimage.filters import threshold_otsu
from keras.layers import Input, Dense, Conv2D, Dropout, Flatten, BatchNormalization, Activation

# 修改后 的代码
def getModel(CHANNELS, num):

#input_plane = Input(shape=(CHANNELS+num, CHANNELS+num, 1)) 
#input_1 = input_plane[:,:CHANNELS, :CHANNELS,:]
input_1= Input(shape=(CHANNELS, CHANNELS, 1)) #采用Input层来构建input_1
conv_11 = Conv2D(32, kernel_size=(3, 3))(input_1 )  
conv_1_bn1 = BatchNormalization()(conv_11)
flatten1 = Flatten()(conv_1_bn1 )

#input_2 = input_plane[:, :num, :num, :] 
input_2= Input(shape=(num, num, 1))  #采用Input层来构建input_2
conv_12 = Conv2D(32, kernel_size=(3, 3))(input_2 )  
conv_1_bn2 = BatchNormalization()(conv_12)
flatten2 = Flatten()(conv_1_bn2)

flatten = keras.layers.concatenate([flatten1, flatten2], axis=1) #tf.concat就会报错
fc_1 = Dense(64)(flatten)
fc_1_bn = BatchNormalization()(fc_1)

model = Model(inputs=[input_1, input_2 ] , outputs=fc_1_bn ) #模型创建完毕

keras入门 创建神经网络 可参照:
Keras中文文档,多输入多输出方式 的 神经网络创建

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值