Я пытаюсь создать сеть 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'
. При поиске решения я обнаружил, что эта ошибка возникает главным образом, когда модель содержит операции, не связанные с кераслоями. Вместо этого предлагается использовать лямбда-слои keras для переноса операций. Поэтому я попытался заменить строки в моем коде, которые могут вызвать проблемы middle_old = tf.random.normal(batch_shape)
и back_old = tf.random.normal(batch_shape)
, с их аналогами keras lambda. Теперь есть еще одна проблема ValueError: Layer outer_1 was called with an input that isn't a symbolic tensor.
, предполагающая, что моя предыдущая попытка не использовать лямбда-слои была правильной, что имеет смысл, поскольку все ..._ старые значения используются в качестве тензорных выходов слоев в моей модели. Так что теперь я понятия не имею, почему AttributeError выбрасывается в первую очередь; кроме этих двух строк, в моей модели нет операций не-keras.