2

こんにちは私は1クラス分類用の画像分類器を構築していますValueError:ターゲットを確認する際にエラーが発生しました:model_2にshape(None、252、252、1)が含まれていると予想されますが、配列には次のようなものがあります。形状(300、128、128、3)。)ValueError:target:expected model_2がshape(None、252、252、1)を持っているが、形状(300,128,128,3)の配列を持っているとエラーが発生しました

num_of_samples = img_data.shape[0] 
labels = np.ones((num_of_samples,),dtype='int64') 



labels[0:376]=0 
names = ['cats'] 


input_shape=img_data[0].shape 



X_train, X_test = train_test_split(img_data, test_size=0.2, random_state=2) 


inputTensor = Input(input_shape) 
x = Conv2D(16, (3, 3), activation='relu', padding='same')(inputTensor) 
x = Conv2D(8, (3, 3), activation='relu', padding='same')(x) 
x = MaxPooling2D((2, 2), padding='same')(x) 
x = Conv2D(8, (3, 3), activation='relu', padding='same')(x) 
encoded_data = MaxPooling2D((2, 2), padding='same')(x) 

encoder_model = Model(inputTensor,encoded_data) 

# at this point the representation is (4, 4, 8) i.e. 128-dimensional 
encoded_input = Input((4,4,8)) 
x = Conv2D(8, (3, 3), activation='relu', padding='same')(encoded_input) 
x = UpSampling2D((2, 2))(x) 
x = Conv2D(8, (3, 3), activation='relu', padding='same')(x) 
x = UpSampling2D((2, 2))(x) 
x = Conv2D(16, (3, 3), activation='relu',padding='same')(x) 
x = UpSampling2D((2, 2))(x) 
decoded_data = Conv2D(1, (3, 3), activation='sigmoid', padding='same')(x) 

decoder_model = Model(encoded_input,decoded_data) 

autoencoder_input = Input(input_shape) 
encoded = encoder_model(autoencoder_input) 
decoded = decoder_model(encoded) 
autoencoder_model = Model(autoencoder_input, decoded) 
autoencoder_model.compile(optimizer='adadelta', 
`enter code here`loss='binary_crossentropy') 


autoencoder_model.fit(X_train, X_train, 
      epochs=50, 
      batch_size=32, 
      validation_data=(X_test, X_test), 
      callbacks=[TensorBoard(log_dir='/tmp/autoencoder')]) 
+1

画像のサイズはどのくらいですか?あなたは 'input_shape'と' img_data.shape'を印刷し、あなたが期待しているものを確認できますか?それが 'autoencoder_model.summary()'と一致することを確認してください。 – ncfirth

+0

何をしているのですか? –

+0

input_shape - (128,128,3)、img_data.shape - (376,128,128,3) –

答えて

1

これは、デコーダの出力形状とトレーニングデータの形状の単純な非互換性です。 (目標は出力を意味する)。

2つのMaxPoolings(画像サイズを4で割ったもの)と3つのアップサンプリング(デコーダの入力に8を掛けたもの)があります。

自動エンコーダーの最終出力が大きすぎて、データと一致しません。モデルで作業して、出力形状をトレーニングデータと一致させる必要があります。

+0

を投稿していただきありがとうございましたdaniel :) –

0

は、あなたが使用している間違ったAPI

autoencoder_model.fit(X_train, X_train, <--- This one is wrong 
     epochs=50, 
     batch_size=32, 
     validation_data=(X_test, X_test), 
     callbacks=[TensorBoard(log_dir='/tmp/autoencoder')]) 

は.fitを見てみましょうhttps://github.com/keras-team/keras/blob/master/keras/models.py

def fit(self, 
     x=None, 
     y=None, 
     batch_size=None, 
     epochs=1, 
     verbose=1, 
     callbacks=None, 
     validation_split=0., 
     validation_data=None, 
     shuffle=True, 
     class_weight=None, 
     sample_weight=None, 
     initial_epoch=0, 
     steps_per_epoch=None, 
     validation_steps=None, 
     **kwargs): 
    """Trains the model for a fixed number of epochs (iterations on a dataset). 
    # Arguments 
     x: Numpy array of training data. 
      If the input layer in the model is named, you can also pass a 
      dictionary mapping the input name to a Numpy array. 
      `x` can be `None` (default) if feeding from 
      framework-native tensors (e.g. TensorFlow data tensors). 
     y: Numpy array of target (label) data. 
      If the output layer in the model is named, you can also pass a 
      dictionary mapping the output name to a Numpy array. 
      `y` can be `None` (default) if feeding from 
      framework-native tensors (e.g. TensorFlow data tensors). 

からメソッドのソースコード だからxはデータであるべきであり、Yは、データのラベルであるべきです。 希望を助けてくれる

+0

いいえオートエンコーダbtw –

関連する問題

 関連する問題