2016-10-17 3 views
4

Ich versuche derzeit, das Beispiel here mit einem Datensatz zu verfolgen, den ich selbst erstellt habe. Das Backend läuft mit Theano. Die Verzeichnisstruktur ist genau das gleiche:Keras imageGenerator Ausnahme: Die Ausgabe des Generators sollte ein Tupel (x, y, sample_weight) oder (x, y) sein. Gefunden: Keine

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

Hier ist mein Code für das keras Faltungs neuronales Netz ist.

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') 

Antwort

0

Ihr Generator sollte ein Python-Generator sein. Sie können mehr von diesem here lesen.

Kurz erklärt, ein Generator ermöglicht es Ihnen, Ausbeute eine Reihe von Wert aus der Funktion, ohne seine Variablen genannt gereinigt werden (wie es der Fall bei einer return Anweisung zum Beispiel ist).

1

Ich lief das gleiche Problem beim Ausführen des Codes, aber ich verwendete Tensorflow als Backend. Mein Problem war, dass ich es auf einer älteren Version von Keras ausgeführt habe.

Upgrade auf keras 2.0 von

pip install --upgrade keras

Dann als fit_generator Funktion aktualisieren folgt-

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

Hier 16 ist Ihr batch_size.

Sie können den vollständigen aktualisierten Code von fchollet finden: Here.

Verwandte Themen