Ошибка при проверке ввода: ожидалось, что conv2d_27_input имеет 4 измерения, но получил массив с формой (55000, 28, 28) - PullRequest
0 голосов
/ 13 января 2020

привет, я пытаюсь использовать cnn для данных fashion mnist. Есть 5200 изображений 28 * 28 в оттенках серого, поэтому я использовал 2D cnn, вот мой код:

fashion_mnist=keras.datasets.fashion_mnist
(xtrain,ytrain),(xtest,ytest)=fashion_mnist.load_data()
xvalid,xtrain=xtrain[:5000]/255.0,xtrain[5000:]/255.0
yvalid,ytrain=ytrain[:5000],ytrain[5000:]

defaultcon=partial(keras.layers.Conv2D,kernel_size=3,activation='relu',padding="SAME")

model=keras.models.Sequential([
                           defaultcon(filters=64,kernel_size=7,input_shape=[28,28,1]),
                           keras.layers.MaxPooling2D(pool_size=2),
                           defaultcon(filters=128),
                           defaultcon(filters=128),
                           keras.layers.MaxPooling2D(pool_size=2),
                           defaultcon(filters=256),
                           defaultcon(filters=256),
                           keras.layers.MaxPooling2D(pool_size=2),
                           keras.layers.Flatten(),
                           keras.layers.Dense(units=128,activation='relu'),
                           keras.layers.Dropout(0.5),
                           keras.layers.Dense(units=64,activation='relu'),
                           keras.layers.Dropout(0.5),
                           keras.layers.Dense(units=10,activation='softmax'),

])
model.compile(optimizer='sgd',loss="sparse_categorical_crossentropy", metrics=["accuracy"])
history=model.fit(xtrain,ytrain,epochs=30,validation_data=(xvalid,yvalid))

, но я получаю ошибку при проверке input: ожидалось, что conv2d_27_input будет иметь 4 измерения, но получил массив с формой (55000, 28, 28), как ожидается получить 4D?

1 Ответ

1 голос
/ 14 января 2020

В строке ввода:

defaultcon(filters=64,kernel_size=7,input_shape=[28,28,1])

вы ошибочно определили неправильную форму (28,28,1). А для задачи с m выборками модель будет ожидать данные с размером (m, 28,28,1), который представляет собой 4D.

Видимо, ваши входные данные находятся в форме из (m, 28,28) где m - количество образцов. Таким образом, вы можете решить вашу проблему, изменив строку, которую я упомянул выше:

...