Ошибка при проверке целевого объекта: ожидалось, что dens_18 будет иметь форму (1,), но получил массив с формой (10,) - PullRequest
0 голосов
/ 15 октября 2019
  Y_train = to_categorical(Y_train, num_classes = 10)#
    random_seed = 2
    X_train,X_val,Y_train,Y_val = train_test_split(X_train, Y_train, test_size = 0.1, random_state=random_seed)
    Y_train.shape
    model = Sequential()

    model.add(Flatten())
    model.add(Dense(64, activation='relu'))
    model.add(Dense(128, activation='relu'))
    model.add(Dense(10, activation='softmax'))
    model.compile(optimizer = 'adam', loss = 'sparse_categorical_crossentropy',metrics=['accuracy'])

    model.fit(X_train, Y_train, batch_size = 86, epochs = 3,validation_data = (X_val, Y_val), verbose =2)

Я должен классифицировать данные MNIST на 10 классов. Я конвертирую Y_train в один горячий кодированный массив. Я прошел через несколько ответов, но ни один не помог. Пожалуйста, направьте меня в этом отношении, так как я новичок в ML и нейронной сети.

1 Ответ

0 голосов
/ 15 октября 2019

Кажется, нет необходимости использовать model.add(Flatten()) в вашем первом слое. Вместо этого вы можете использовать плотный слой с определенным размером ввода, например: model.add(Dense(64, input_shape=your_input_shape, activation="relu").

Чтобы убедиться, что эта проблема возникает из-за слоев, вы можете проверить, работает ли функция to_categorical() в одиночку с jupyter. Записная книжка.

Обновленный ответ

Перед моделью вы должны изменить свою модель. В этом случае от 28 * 28 до 784.

train_images = train_images.reshape((-1, 784))
test_images = test_images.reshape((-1, 784))

Я также предлагаю нормализовать данные, которые можно сделать, просто разделив изображения на 255

. После этого шага вы должны создать свою модель. .

model = Sequential([
Dense(64, activation='relu', input_shape=(784,)),
Dense(64, activation='relu'),
Dense(10, activation='softmax'),
])

Замечали ли вы input_shape=(784,) Это форма вашего сплющенного ввода.

Последний шаг, компиляция и подгонка.

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

model.fit(
train_images,
train_labels,
epochs=10,
batch_size=16,
)

Что вы делаетеесли вы только что сгладили входной слой без подачи в сеть входных данных. Вот почему у вас возникли проблемы. Дело в том, что вы должны вручную изменить свои входные данные и перейти к слоям Dense() с параметром input_shape

...