为了账号安全,请及时绑定邮箱和手机立即绑定

按元素乘法 - 'NoneType' 对象没有属性 '_inbound_nodes'

按元素乘法 - 'NoneType' 对象没有属性 '_inbound_nodes'

呼如林 2021-09-14 20:40:48
使用 Tensorflow 的 Keras 代码存在问题。我有一个简单的网络,我需要在输入后立即进行元素乘法。这部分代码如下所示。我总是收到错误:*** AttributeError: 'NoneType' 对象没有属性 '_inbound_nodes'我的代码:    input_img = Input(shape=(256, 256, 2, 1, 2))    masked = Lambda(lambda x: tf.multiply(x[0], x[1]))([input_img[:,:,:,:,:,0], input_img[:,:,:,:,:,1]])    conv1 = Conv3D(1, (5, 5, 2), padding='same',  activation=activation, kernel_regularizer=regularizers.l2(1e-9))(masked)    net_head = Model(inputs=input_img, outputs=conv1)我已经使用了 Lambda 层,所以我很困惑是什么导致了这个问题。输入的维度很适合模型,所以这应该不是问题。有人有线索吗?这种逐元素乘法实际上是将一些像素屏蔽为零。在上面的代码中,掩码在附加的最后一个维度中连接到输入变量中。或者,我还尝试使用掩码专用的变量,例如 input_mask,而不是将其作为 input_image 中的附加最后一个维度包含在内,以进行乘法运算,这对相同的错误信息也不起作用。我必须在网络的输入层之后而不是在输入层之前对输入数据进行掩码处理的原因是,我需要输入图像的完整数据(包括被掩码)在使用shuffle进行损失计算在。
查看完整描述

2 回答

?
DIEA

TA贡献1820条经验 获得超2个赞

您正在层之外操作张量。(获取切片也是操作)

您将需要采取片input_img[:,:,:,:,:,0]input_img[:,:,:,:,:,1] 里面的一层。

masked = Lambda(lambda x: x[:,:,:,:,:,0]*x[:,:,:,:,:,1])(input_img)


查看完整回答
反对 回复 2021-09-14
?
蝴蝶不菲

TA贡献1810条经验 获得超4个赞

正如丹尼尔指出的那样,你不能从层中取出切片,因为它会在没有 Keras 使用的注释的情况下生成“原始”张量。如果出于某种原因您仍然希望拥有双输入层,您也可以将切片封装到层中:


input_img = Input(shape=(256, 256, 2, 1, 2))

slice0 = Lambda(lambda x: x[:, :, :, :, :, 0])(input_img)

slice1 = Lambda(lambda x: x[:, :, :, :, :, 1])(input_img)

masked = Lambda(lambda x: tf.multiply(x[0], x[1]))([slice0, slice1])

net_head = Model(inputs=input_img, outputs=masked)

# ...


查看完整回答
反对 回复 2021-09-14
  • 2 回答
  • 0 关注
  • 202 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信