

Tensorflowでプログラムを書いているのですが，

> number of input channels does not match corresponding dimension of filter, 2
> != 11

というエラーが出ています．  
プログラムを以下に添付します．

[code]

    def make_test(self):
    
        inputs = Input(shape=(28, 28, 11), name='label')
        x = Conv2D(64, (5, 5), padding='same')(inputs)
        x = LeakyReLU()(x)
        x = Conv2D(128, (5, 5), kernel_initializer='he_normal', strides=[2, 2])(x)
        x = LeakyReLU()(x)
        x = Conv2D(128, (5, 5), kernel_initializer='he_normal', padding='same', strides=[2, 2])(x)
        x = LeakyReLU()(x)
        x = Flatten()(x)
        x = Dense(1024, kernel_initializer='he_normal')(x)
        x = LeakyReLU()(x)
        x = Dense(1, kernel_initializer='he_normal')(x)
        model = Model(inputs=[inputs], outputs=[x])
    
        return model
    
    def make_hoge(self):
    
        noise_shape = (110,)
    
        inputs = Input(shape=noise_shape)
        x = Dense(1024)(inputs)
        x = LeakyReLU()(x)
        x = Dense(128 * 7 * 7)(x)
        x = BatchNormalization()(x)
        x = LeakyReLU()(x)
        if K.image_data_format() == 'channels_first':
            x = Reshape((128, 7, 7), input_shape=(128 * 7 * 7,))(x)
            bn_axis = 1
        else:
            x = Reshape((7, 7, 128), input_shape=(128 * 7 * 7,))(x)
            bn_axis = -1
        x = Conv2DTranspose(128, (5, 5), strides=2, padding='same')(x)
        x = BatchNormalization(axis=bn_axis)(x)
        x = LeakyReLU()(x)
        x = Conv2D(64, (5, 5), padding='same')(x)
        x = BatchNormalization(axis=bn_axis)(x)
        x = LeakyReLU()(x)
        x = Conv2DTranspose(64, (5, 5), strides=2, padding='same')(x)
        x = BatchNormalization(axis=bn_axis)(x)
        x = LeakyReLU()(x)
        x = Conv2D(1, (5, 5), padding='same', activation='tanh')(x)
        model = Model(inputs=[inputs], outputs=[x])
    
        return model
    
    def loss(self, y_true, y_pred):
    
        return K.mean(y_true * y_pred)
    
    def __init__():
        self.test = self.make_test()
        self.hoge = self.make_hoge()
    
        for layer in self.test.layers:
            layer.trainable = False
        self.test.trainable = False
    
        input_noise = Input(shape=(11,))
        generated_images = self.hoge(input_noise)
        input_label = Input(shape=(28, 28, 10,))
        inputs = concatenate([generated_images, input_label], axis=3)
        outputs = self.test(inputs)
        self.train_model = Model(inputs=[input_noise, input_label], outputs=[outputs])
        self.train_model.compile(optimizer=Adam(0.0001, beta_1=0.5, beta_2=0.9), loss=self.loss)
    
[/code]

アルゴリズムの内容はGANです．変数名を短く書き直して上げたので間違っていたらすみません．  
環境はpython2.7, tensorflow1.12です．  
ちなみにinputs, generated_images, input_labelはshapeを出力するとそれぞれ(?,28,28,11),
(?,?,?,1), (?,28,28,10)になっています．  
generated_imagesをconcatenateせずにself.testに入れると動作することを確認しています．input_labelは動きませんでした．  
conv層を消してみると動きます．

あと，エラー文が出ているのがtensorflowのnn_ops.pyの836行目付近なのですが，input_shape, filter_shape,
num_spatial_dimsを出力してみると(?, 28, 28, 2), (5, 5, 11, 64),
2でした．filter_shape[num_spatial_dims]!=input_shape[num_spatial_dims+1]なのが問題のようです．

よろしくお願いいたします．


CC BY-SA 4.0
2019-01-25T20:11:01.240
52324
2020-07-17T10:00:55.093
31927
question
python tensorflow keras
Tensorflowでnumber of input channels does not match corresponding dimension of filterのエラーが出ます


質問者です．  
Inputのshapeが間違っていました．  
お騒がせしてすみませんでした．


CC BY-SA 4.0
2019-01-26T00:16:02.487
52327
2019-01-26T00:16:02.487
31927
52324
answer