Keras fit_generator выдает ошибку несоответствия размеров - PullRequest
0 голосов
/ 27 апреля 2020

Я работаю над набором данных MNIST, в котором X_train = (42000,28,28,1) является обучающим набором. y_train = (42000,10) - соответствующий набор меток. Теперь я создаю итератор из генератора изображений, используя Keras, следующим образом:

iter=datagen.flow(X_train,y_train,batch_size=32)

, который отлично работает.

Затем я тренирую модель, используя;

model.fit_generator(iter,steps_per_epoch=len(X_train)/32,epochs=1)

Здесь выдает следующую ошибку:

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

Я пытался, но не смог найти ошибку. Также я искал здесь, но не было никакого ответа:

ожидал, что dens_218_input будет иметь 2 измерения, но получил массив с формой (512, 28, 28, 1)

BTW это сводка моей модели Model structure

Пожалуйста, помогите мне.

Обновление:

model=Sequential()
model.add(Dense(256,activation='relu',kernel_initializer='he_normal',input_shape=(28,28,1)))
model.add(Flatten())
model.add(Dense(10,activation='softmax',kernel_initializer='he_normal'))

1 Ответ

1 голос
/ 27 апреля 2020

Несоответствие формы было причиной root. Форма ввода не совпадает с ожидаемой ImageDataGenetor. Пожалуйста, проверьте следующий пример с mnist данными. Я использовал Tensorflow 2.1.

import tensorflow as tf
from tensorflow.keras.preprocessing.image import ImageDataGenerator

mnist = tf.keras.datasets.mnist

(x_train, y_train),(x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0
x_train = tf.expand_dims(x_train,axis=-1)
x_test = tf.expand_dims(x_test,axis=-1)

datagen = ImageDataGenerator(
        rotation_range=40,
        width_shift_range=0.2,
        height_shift_range=0.2,
        shear_range=0.2,
        zoom_range=0.2)

iter=datagen.flow(x_train,y_train,batch_size=32)

model = tf.keras.models.Sequential([
  tf.keras.layers.Flatten(input_shape=(28, 28,1)),
  tf.keras.layers.Dense(128, activation='relu'),
  tf.keras.layers.Dropout(0.2),
  tf.keras.layers.Dense(10, activation='softmax')
])

model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

#model.fit_generator(iter,steps_per_epoch=len(X_train)/32,epochs=1) # deprecated in TF2.1
model.fit_generator(iter,steps_per_epoch=len(iter),epochs=1)
model.evaluate(x_test, y_test) 

Полный код здесь

...