2017-02-22 5 views
1

私は以下のモデルに合うように)keras model.fit_generatorを(使用しようとしているです発電機の私の定義:こことValueError fit_generator kerasモデル:エラーモデル標的をチェック:4次元を持つことが期待cropping2d_4が、形状を持つ配列を得た(32、1)

from sklearn.utils import shuffle 
IMG_PATH_PREFIX = "./data/IMG/" 
def generator(samples, batch_size=64): 
    num_samples = len(samples) 
    while 1: # Loop forever so the generator never terminates 
     shuffle(samples) 
     for offset in range(0, num_samples, batch_size): 
      batch_samples = samples[offset:offset+batch_size] 

      images = [] 
      angles = [] 
      for batch_sample in batch_samples: 
       name = IMG_PATH_PREFIX + batch_sample[0].split('/')[-1] 

       center_image = cv2.imread(name) 
       center_angle = float(batch_sample[3])     

       images.append(center_image) 
       angles.append(center_angle) 

     X_train = np.array(images) 
     y_train = np.array(angles) 

     #X_train = np.expand_dims(X_train, axis=0) 
     #y_train = np.expand_dims(y_train, axis=1) 
     print("X_train shape: ", X_train.shape, " y_train shape:", y_train.shape) 
     #print("X train: ", X_train) 
     yield X_train, y_train 

train_generator = generator(train_samples, batch_size = 32) 
validation_generator = generator(validation_samples, batch_size = 32) 

出力形状である。 X_train形状:(32、160、320、3)y_train形状:(32)

モデルフィットコードは:

model = Sequential() 
#cropping layer 
model.add(Cropping2D(cropping=((50,20), (1,1)), input_shape=(160,320,3), dim_ordering='tf')) 
model.compile(loss = "mse", optimizer="adam") 
model.fit_generator(train_generator, samples_per_epoch= len(train_samples), validation_data=validation_generator, nb_val_samples=len(validation_samples), nb_epoch=3) 

それから私は、エラーメッセージが出ます:モデル標的チェックする際にエラー:

とValueErrorを4次元を持つことが期待cropping2d_6を、しかし形状(32、1)の配列を得た

誰かが私が問題だか知ってみましょう助けてもらえ?

答えて

1

大きな質問はここです:あなたがしようとしていることを知っていますか?

1)あなたはhereを読めば、入力は4Dテンソルであり、出力も4Dテンソルです。ターゲットは2Dテンソルの形状です(batch_size、1)。 kerasは(バッチ寸法なし)3Dを持って出力して(バッチ寸法なし)1Dを持つターゲットとの間の誤差を計算しようとすると当然のように、その外の意味することはできません。アウトプットとターゲットの寸法は同じでなければなりません。

2)cropping2Dが実際に何をしているのか知っていますか?画像をトリミングしています...トリミングディメンションの最初と最後で値を削除します。あなたの場合、あなたは形状の画像を出力しています(90,218,3)。これは予測ではなく、このレイヤーで訓練する体重がないので、「モデル」に合う理由はありません。あなたのモデルは画像をトリミングするだけです。それに必要なトレーニングはありません。

関連する問題