Concat OP в Tensorflow2.0.0 - PullRequest
       23

Concat OP в Tensorflow2.0.0

0 голосов
/ 22 октября 2019

Я пытался использовать Tensorflow2.0 для реализации некоторых глубоких обучающих алогритов.

Однако проблема, с которой я столкнулся, кажется странной. Это проблема размерности при объединении тензоров

Исходный код прямо здесь

import tensorflow as tf
import numpy as np


image = tf.keras.layers.Input(shape=(224, 224, 6), name='image')
conv1_2 = tf.keras.layers.Input(shape=(224, 224, 64), name='block1_conv2')
conv2_2 = tf.keras.layers.Input(shape=(112, 112, 128), name='block2_conv2')
conv3_4 = tf.keras.layers.Input(shape=(56, 56, 256), name='block3_conv4')
conv4_4 = tf.keras.layers.Input(shape=(28, 28, 512), name='block4_conv4')
conv5_4 = tf.keras.layers.Input(shape=(14, 14, 512), name='block5_conv4')

x = image
for merge_input in [conv1_2, conv2_2, conv3_4, conv4_4, conv5_4]:
    x = tf.keras.layers.Concatenate()([x, merge_input])
    x = tf.keras.layers.Conv2D(filters=56,
                               kernel_size=2,
                               padding='same',
                               activation='relu',
                               kernel_initializer=tf.initializers.he_normal())(x)
    # x = tf.keras.layers.Dropout(self.keep_prob)(x)
    x = tf.keras.layers.MaxPooling2D(pool_size=(2, 2))(x)

model = tf.keras.Model(inputs=[image, conv1_2, conv2_2, conv3_4, conv4_4, conv5_4], outputs=x)

i = np.random.randn(1, 224, 224, 6)
c1 = np.random.randn(1, 224, 224, 64)
c2 = np.random.randn(1, 112, 112, 128)
c3 = np.random.randn(1, 56, 56, 256)
c4 = np.random.randn(1, 28, 28, 512)
c5 = np.random.randn(1, 14, 14, 512)

Q_value = model({'image': i,
                 'block1_conv2': c1,
                 'block2_conv2': c2,
                 'block3_conv4': c3,
                 'block4_conv4': c4,
                 'block5_conv4': c5})

Ошибка интерпретатора:

ConcatOp : Dimensions of inputs should match: shape[0] = [1,224,224,64] vs. shape[1] = [1,112,112,128] [Op:ConcatV2] name: concat

Размеры тензоров совпадаютпри констатации

Кто-нибудь может иметь представление об этой проблеме?

Большое спасибо.

1 Ответ

0 голосов
/ 22 октября 2019

Когда вы определяете модель, вы используете список в качестве входных данных. Почему бы также не кормить вводные данные, используя список? Следующий код работает для меня.

i = np.random.randn(1, 224, 224, 6).astype(np.float32)
c1 = np.random.randn(1, 224, 224, 64).astype(np.float32)
c2 = np.random.randn(1, 112, 112, 128).astype(np.float32)
c3 = np.random.randn(1, 56, 56, 256).astype(np.float32)
c4 = np.random.randn(1, 28, 28, 512).astype(np.float32)
c5 = np.random.randn(1, 14, 14, 512).astype(np.float32)

Q_value = model(inputs=[i, c1, c2, c3, c4, c5])
...