2017-01-30 16 views
0

Kerasを使用してデータをニューラルネットワークに 'フロー'しようとしています。私は.flow_from_directoryメソッドを使用しています。プロセスは私に合っています。私は長い間の周りいじりと発見されているImageDataGeneratorを使用したKerasディメンションの不一致

Exception: Error when checking model target: expected convolution2d_84 to have 4 dimensions, but got array with shape (32, 1) 

:私は次のエラーを取得する

これを実行する
ROWS = 64 
COLS = 64 
CHANNELS = 3 

from keras.preprocessing.image import ImageDataGenerator 
train_datagen = ImageDataGenerator(
    rescale=1./255) 

test_datagen = ImageDataGenerator(rescale=1./255) 

train_generator = train_datagen.flow_from_directory(
    'train', 
    target_size=(64, 64), 
    batch_size=32, 
    class_mode='binary') 

validation_generator = test_datagen.flow_from_directory(
    '../tutorial/l1/kaggle_solutions/dogs_vs_cats/valid', 
    target_size=(64, 64), 
    batch_size=1, 
    class_mode='binary') 
from keras.models import Sequential 
from keras.layers import Convolution2D 
from keras.layers import Dense, Activation, Flatten, Dropout, MaxPooling2D 
from keras.regularizers import l2 

model = Sequential() 
model.add(Convolution2D(4, 4, 4, border_mode='same', input_shape=(64, 64,3), activation='relu')) 
from keras.utils.np_utils import to_categorical 
from keras.optimizers import SGD, RMSprop 

model.compile(loss='binary_crossentropy', optimizer=RMSprop(lr=1e-4), metrics=['accuracy']) 


model.fit_generator(
    train_generator, 
    samples_per_epoch=2500, 
    nb_epoch=20, 
    validation_data=validation_generator, 
    nb_val_samples=3100) 

:私はkerasドキュメント(私はtensorflowを使用しています)からの基本的な例を使用しています次のようにして 'model.add'をグレースケール入力に切り替える model.add(Convolution2D(4,4,4、border_mode = 'same'、input_shape =(64、64,3)、activation = 'relu')) は次のようなエラーを表示します(予想どおり、元の入力が正しいことを確認しているようです):

Error when checking model input: expected convolution2d_input_49 to have shape (None, 64, 64, 1) but got array with shape (32, 64, 64, 3) 

元のまま32 -64,64,3の4-d配列を渡していますが、エラーが発生しています。 予想(1,64,64、 3)とgot(32,64,64,3)

私は32のバッチでデータを送信しています。奇妙なことにバッチをゼロに設定しても(0,64,64,3の入力を与えるために)私は(fit_generatorを使用したとき、私はモデルにバッチサイズを渡すことはできません、それはそのBATCH_SIZE表示されます - ドキュメントに基づいて、私はモデルにデータを流すための適切な方法を把握することはできません

Exception: Error when checking model target: expected convolution2d_87 to have 4 dimensions, but got array with shape (0, 1) 

:取得〜の数サンプル)が問題です。

ご協力いただければ幸いです。

答えて

1

ImageDataGeneratorに問題はありません。エラーメッセージに記載されているように、モデル出力の形状とターゲットの形状との間に不一致があります。 class_mode = 'binary'を使用すると、予想されるモデルの出力は単一の値になりますが、畳み込みレイヤーを1つしか持たないので、形状は(batch_size, 64, 64, 4)の出力になります。

はこのような何か試してみてください:おそらく良い点

model.add(Convolution2D(4, 4, 4, border_mode='same', input_shape=(64, 64,3), activation='relu')) 
model.add(Flatten()) 
model.add(Dense(1)) 
model.add(Activation('sigmoid')) 
+0

ザッツを、私は私のネットの私のトップ層を食い物にしていたし、ちょうど(私が言ったように、私はとてもイライラした)ことを確認されました。結局、私は自分の発電機を "バイナリ"から "カテゴリー"に切り換えて、カーネルを再起動しなければなりませんでした(古いものです)。今でもバイナリは動作しませんが、正しく入力すると、入力シェイプと関係があります。私はこの答えを「受け入れる」と答えているが、それは問題であったラベルだが「入力」だった。私はあなたにこれを見ていただきありがとうございます。約fit_generatorの例はあまりありません。私の例を待っているかわいそうにグループがあります – RDS

関連する問題