AttributeError: объект 'NoneType' не имеет атрибута '_inbound_nodes'. Добавить слои свёртки в один горячий кодировщик? - PullRequest
0 голосов
/ 05 мая 2020

У меня следующая модель, состоящая из 2-х кодировщиков и декодера. Один кодирует личность лица, а другой - соответствующий текст. Поскольку классы текста ограничены (35), я планировал использовать один горячий кодировщик для отправки в качестве параллельного ввода в текстовый кодировщик.

Однако при построении модели (вторая последняя строка кода) я получил ошибку, указанную в заголовке. Пожалуйста, объясни мне, что не так. (конечно, в одном горячем кодировщике текстового кодировщика)

############# кодировщик для лица / личности

input_face = Input(shape=(args.img_size, args.img_size, 6), name="input_face")

identity_mapping = conv_block(input_face, 32, kernel_size=7)  # 96x96

x1_face = conv_block(identity_mapping, 64, kernel_size=5, strides=2)  # 48x48
x1_face = residual_block(x1_face, 64)
x1_face = residual_block(x1_face, 64)

x2_face = conv_block(x1_face, 128, 3, 2)  # 24x24
x2_face = residual_block(x2_face, 128)
x2_face = residual_block(x2_face, 128)
x2_face = residual_block(x2_face, 128)

x3_face = conv_block(x2_face, 256, 3, 2)  # 12x12
x3_face = residual_block(x3_face, 256)
x3_face = residual_block(x3_face, 256)

x4_face = conv_block(x3_face, 512, 3, 2)  # 6x6
x4_face = residual_block(x4_face, 512)
x4_face = residual_block(x4_face, 512)

x5_face = conv_block(x4_face, 512, 3, 2)  # 3x3
x6_face = conv_block(x5_face, 512, 3, 1, padding='valid')
x7_face = conv_block(x6_face, 512, 1, 1)

############# encoder for text

x = np.zeros(shape=(36, 1, 1, 512))
for i in range(1, 36):
    a = np.zeros(512, dtype=float)
    a[i] = 1.0
    x[i] = [[a]]
X = tf.placeholder_with_default(x, shape=(None, 1, 1, 512)) # to match the embedding parameter1.shape

input_text = Input(shape=(1,1,512), name="input_text")
X = tf.cast(X, dtype=tf.float32)
embedding = Concatenate(axis=3)([x7_face, X])


############# decoder
x = conv_t_block(embedding, 512, 3, 3)  # 3x3
x = Concatenate(axis=3)([x5_face, x])

x = conv_t_block(x, 512)  # 6x6
x = residual_block(x, 512)
x = residual_block(x, 512)
x = Concatenate(axis=3)([x4_face, x])

x = conv_t_block(x, 256)  # 12x12
x = residual_block(x, 256)
x = residual_block(x, 256)
x = Concatenate(axis=3)([x3_face, x])

x = conv_t_block(x, 128)  # 24x24
x = residual_block(x, 128)
x = residual_block(x, 128)
x = Concatenate(axis=3)([x2_face, x])

x = conv_t_block(x, 64)  # 48x48
x = residual_block(x, 64)
x = residual_block(x, 64)
x = Concatenate(axis=3)([x1_face, x])

x = conv_t_block(x, 32)  # 96x96
x = Concatenate(axis=3)([identity_mapping, x])
x = conv_block(x, 16)  # 96x96
x = conv_block(x, 16)  # 96x96

x = Conv2D(filters=3, kernel_size=1, strides=1, padding="same")(x)
prediction = Activation("sigmoid", name="prediction")(x)

model = Model(inputs=[input_face, input_text], outputs=prediction)
model.summary()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...