Почему я получаю несоответствие формы Keras? - PullRequest
0 голосов
/ 04 февраля 2019

Я следую примеру Keras Mnist для начинающих.Я попытался изменить метки, чтобы они соответствовали моим собственным данным, которые имеют 3 различные текстовые классификации.Я использую "to_categorical" для достижения этой цели.Форма выглядит правильно для меня, но «подгонка» вызывает ошибку:

train_labels = keras.utils.to_categorical(train_labels, num_classes=3)

print(train_images.shape)
print(train_labels.shape)

model = keras.Sequential([
    keras.layers.Flatten(input_shape=(28, 28)),
    keras.layers.Dense(128, activation=tf.nn.relu),
    keras.layers.Dense(3, activation=tf.nn.softmax)
])

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

model.fit(train_images, train_labels, epochs=5)

(7074, 28, 28)

(7074, 3)

Блочная цитата Трассировка блочной цитаты (последний вызов был последним): Файл "C: /Users/lawrence/PycharmProjects/tester2019/KeraTest.py", строка 131, в файле model.fit (train_images, train_labels, epochs = 5) Файл "C: \Users \ lawrence \ PycharmProjects \ tester2019 \ venv \ lib \ site-packages \ tenorflow \ python \ keras \ engine \ training.py ", строка 1536, в файле fit validation_split = validation_split) Файл" C: \ Users \ lawrence \ PycharmProjects \ tester2019 "\ venv \ lib \ site-packages \ tenorflow \ python \ keras \ engine \ training.py ", строка 992, в _standardize_user_data class_weight, batch_size) Файл" C: \ Users \ lawrence \ PycharmProjects \ tester2019 \ venv \ lib \ site- "packages \ensorflow \ python \ keras \ engine \ training.py ", строка 1154, в _standardize_weights exception_prefix = 'target') Файл" C: \ Users \ lawrence \ PycharmProjects \ tester2019 \ venv \ lib \ site-packages \ tenorsflow \ python\ keras \ engine \ training_utils.py ", строка 332, в standardize_input_data 'но получил массив с формой' + str (data_shape)) ValueError: Ошибка при проверке цели: ожидается, что плотность_1 имеет форму (1,), но получил массив с формой (3,)

1 Ответ

0 голосов
/ 04 февраля 2019

Вам необходимо использовать categorical_crossentropy вместо sparse_categorical_crossentropy в качестве потерь, поскольку ваши метки имеют горячее кодирование.

В качестве альтернативы, вы можете использовать sparse_categorical_crossentropy, если вы не используете горячее кодирование меток.В этом случае этикетки должны иметь форму (batch_size, 1).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...