2016-10-17 4 views
4

私は現在、自分で作成したデータセットを使用して例hereを実行しようとしています。バックエンドはTheanoを使用して実行されます。ディレクトリ構造はまったく同じです:Keras imageGenerator例外:ジェネレータの出力はタプル(x、y、sample_weight)または(x、y)である必要があります。見つかった:なし

image_sets/ 
    dogs/ 
     dog001.jpg 
     dog002.jpg 
     ... 
    cats/ 
     cat001.jpg 
     cat002.jpg 
     ... 
validation/ 
    dogs/ 
     dog001.jpg 
     dog002.jpg 
     ... 
    cats/ 
     cat001.jpg 

はここkeras畳み込みニューラルネットワークのための私のコードです。

img_width, img_height = 150, 150 

img_width, img_height = 150, 150 
train_data_dir = './image_sets' 
validation_data_dir = './validation' 
nb_train_samples = 267 
print nb_train_samples 
#number of validation images I have 
nb_validation_samples = 2002 
print nb_validation_samples 
nb_epoch = 50 
# from keras import backend as K 
# K.set_image_dim_ordering('th') 

model = Sequential() 
model.add(Convolution2D(32, 3, 3, input_shape=(3,img_width, img_height))) 
model.add(Activation('relu')) 
model.add(MaxPooling2D(pool_size=(2, 2))) 

model.add(Convolution2D(32, 3, 3)) 
model.add(Activation('relu')) 
model.add(MaxPooling2D(pool_size=(2, 2))) 

model.add(Convolution2D(64, 3, 3)) 
model.add(Activation('relu')) 
model.add(MaxPooling2D(pool_size=(2, 2))) 

model.add(Flatten()) 
model.add(Dense(64)) 
model.add(Activation('relu')) 
model.add(Dropout(0.5)) 
model.add(Dense(1)) 
model.add(Activation('sigmoid')) 

model.compile(loss='binary_crossentropy', 
       optimizer='rmsprop', 
       metrics=['accuracy']) 

train_datagen = ImageDataGenerator(
     rescale=1./255, 
     shear_range=0.2, 
     zoom_range=0.2, 
     horizontal_flip=True) 

test_datagen = ImageDataGenerator(rescale=1./255) 
train_generator = train_datagen.flow_from_directory(
     train_data_dir, 
     target_size=(img_width, img_height), 
     batch_size=32, 
     class_mode='binary') 
validation_generator = test_datagen.flow_from_directory(
     validation_data_dir, 
     target_size=(img_width, img_height), 
     batch_size=32, 
     class_mode='binary') 

model.fit_generator(
     train_generator, 
     samples_per_epoch=nb_train_samples, 
     nb_epoch=nb_epoch, 
     validation_data=validation_generator, 
     nb_val_samples=nb_validation_samples) 
model.save_weights('first_try.h5') 

答えて

0

あなたのジェネレータは、Pythonのジェネレータでなければなりません。 それ以上のことを読むことができますhere

簡単に説明、ジェネレータは、あなたは歩留まり洗浄すべきその変数を使用せずに呼び出された関数からの値の一連の(それは例えばreturnの文の場合のように)することができます。

1

コードを実行しているときに同じ問題が発生しましたが、テンソルフローをバックエンドとして使用していました。私の問題は、古いバージョンのkerasで実行していたことでした。

pip install --upgrade keras

によってkeras 2.0へ

アップグレードが続いてここでfollows-

model.fit_generator(generator=train_generator, 
        steps_per_epoch=2048 // 16, 
        epochs=20, 
        validation_data=validation_generator, 
        validation_steps=832//16) 

としてあなたfit_generator機能を更新し、16はあなたのBATCH_SIZEです。

fchollet:Hereで完全なコードを見つけることができます。

関連する問題