Python 元素级乘法-';非类型';对象没有属性'_入站节点';
使用Tensorflow的Keras代码存在问题 我有一个简单的网络,我需要在输入后立即进行元素乘法。这部分代码如下所示。我总是犯错误: ***AttributeError:“非类型”对象没有属性“\u入站节点” 我的代码:Python 元素级乘法-';非类型';对象没有属性'_入站节点';,python,tensorflow,keras,layer,Python,Tensorflow,Keras,Layer,使用Tensorflow的Keras代码存在问题 我有一个简单的网络,我需要在输入后立即进行元素乘法。这部分代码如下所示。我总是犯错误: ***AttributeError:“非类型”对象没有属性“\u入站节点” 我的代码: input_img = Input(shape=(256, 256, 2, 1, 2)) masked = Lambda(lambda x: tf.multiply(x[0], x[1]))([input_img[:,:,:,:,:,0], input_im
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_图像中的附加最后一个维度,这对相同的错误信息也不起作用
我必须在网络的输入层之后而不是在输入层之前对输入数据进行掩蔽处理的原因是,我需要在启用随机播放的情况下进行损失计算时输入图像的完整数据(包括被掩蔽的数据) 您正在层外操作张量。(获取切片也是一种操作) 您需要将切片
input_img[:,:,:,:,:,:,0]
和input_img[:,:,:,,:,1]
放在一个层内
masked = Lambda(lambda x: x[:,:,:,:,:,0]*x[:,:,:,:,:,1])(input_img)
如前所述,不能从层中取出切片,因为这样会生成“原始”张量,而不需要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)
# ...
太好了,@user2789986。当答案解决您的问题时,请将其标记为已回答:)谢谢!当我使用掩码作为单独变量时,这将非常有用。