2017-06-04 4 views
1

Ich benutze Keras 2.04 mit Tensorflow-Backend. Ich versuche ein einfaches Modell mit ImageDataGenerator auf MNIST Bildern zu trainieren. Allerdings habe ich immer die folgende Fehlermeldung aus fit_generator bekommen:fit_generator Eingabemaße Fehler bei der Verwendung von ImageDataGenerator (Keras)

ValueError: Error when checking input: expected input_1 to have 2 dimensions, but got array with shape (8, 28, 28, 1).

Dies ist der Code:

#loading data & reshaping 
(x_train, y_train), (x_test, y_test) = mnist.load_data() 
x_train = x_train.reshape(x_train.shape[0], 28, 28,1) 

#building the model 
input_img = Input(shape=(784,)) 
encoded = Dense(30, activation='relu')(input_img) 
decoded = Dense(784, activation='sigmoid')(encoded) 
autoencoder = Model(input_img, decoded) 
autoencoder.compile(optimizer='adam', loss='mse') 

#creating ImageDataGenerator 
datagen = ImageDataGenerator(featurewise_center=True, featurewise_std_normalization=True) 
datagen.fit(x_train) 

autoencoder.fit_generator(
     #x_train, x_train because the target is to reconstruct the input 
     datagen.flow(x_train, x_train, batch_size=8), 
     steps_per_epoch=int(len(x_train)/8), 
     epochs=64, 
     ) 

Soweit ich verstehe ImageDataGenerator sollte eine Charge von Trainingsbeispielen jeder Iteration erzeugen, wie es tatsächlich tut (in diesem Fall, batch_size = 8), aber aus dem Fehler scheint es, als ob es ein einzelnes Trainingsbeispiel erwartet.

Danke!

Antwort

0

gelöst - es hätte sein sollen:

autoencoder = Sequential() 
autoencoder.add(Reshape((784,), input_shape=(28,28,1))) 
autoencoder.add(Dense(30, activation='relu')) 
autoencoder.add(Dense(784, activation='relu')) 
. 
. 
. 

autoencoder.fit_generator(
     datagen.flow(x_train, x_train.reshape(len(x_train),784,), batch_size=8), 
     steps_per_epoch=int(len(x_train)/8), 
     epochs=64, 
     ) 
Verwandte Themen