我正在尝试基于部分连接的层创建一个keras网络。我使用的是我编写的两个自定义图层,即Outer()和Inner()。
def pcsm(depth=5,batch_shape=(5,128,128)):
inputs = Input(batch_shape=batch_shape, dtype='float', name='inputs')
front_L = Outer()
middle_L = Inner()
back_L = Outer()
front_old = inputs
# middle_old = Lambda(lambda: tf.random.normal(batch_shape)
# back_old = Lambda(lambda: tf.random.normal(batch_shape)
middle_old = tf.random.normal(batch_shape)
back_old = tf.random.normal(batch_shape)
for _ in range(0,depth):
front = front_L([front_old,middle_old])
middle = middle_L([front_old,middle_old,back_old])
back = back_L([middle_old,back_old])
front_old=front
middle_old = middle
back_old = back
pcsm = Model(input=inputs,output=back)
pcsm.compile(optimizer=Adam(lr=1e-4), loss='binary_crossentropy')
return pcsm
尝试创建模型时,它将引发AttributeError: 'NoneType' object has no attribute '_inbound_nodes'
。在寻找解决方案时,我发现此错误主要是在模型包含非keraslayer操作时发生的。建议改用keras lambda层包装操作。因此,我尝试用其对应的keras lambda替换掉代码中可能导致问题middle_old = tf.random.normal(batch_shape)
和back_old = tf.random.normal(batch_shape)
的行。现在又有一个问题ValueError: Layer outer_1 was called with an input that isn't a symbolic tensor.
,这表明我以前不使用lambda图层的尝试是正确的,这是有道理的,因为所有..._ old值都用作模型中图层的张量输出。
所以现在我不知道为什么首先抛出AttributeError了。除了这两行以外,我的模型中没有其他非keras操作。