Keras model.evaluate () не работает - PullRequest
       7

Keras model.evaluate () не работает

0 голосов
/ 25 сентября 2018

Я создал небольшую ConvNet, которая выглядит примерно так:

model = Sequential()
optimizer = Adam()

model.add(Lambda(lambda x: x / 127.5 - 1., input_shape=(28, 28, 1)))
model.add(Convolution2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(NUM_CLASSES, activation='softmax'))

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

Я тренирую ее с данными формы

X_train.shape = (48000, 28, 28, 1)
X_val.shape = (12000, 28, 28, 1)

И она работает хорошо.

Однако теперь я хотел бы протестировать модель с использованием функции keras.evaluate():

score = trained_model.evaluate(X_test, y_test, batch_size=128)
# X_test.shape = (10000, 28, 28, 1)
# y_test.shape (10000,)

, что приводит к следующей ошибке:

ValueError: Error when checking target: expected dense_2 to have shape (10,) but got array with shape (1,)

Я не знаюЯ не совсем понимаю эту ошибку, учитывая, что я использую одну и ту же форму для обучения, проверки и набора тестов.

Не могли бы вы объяснить, в чем заключается моя ошибка и как ее исправить?

Большое спасибо!

Редактировать: Вывод trained_model.summary()

_________________________________________________________________
Layer (type)                 Output Shape              Param #
=================================================================
lambda_1 (Lambda)            (None, 28, 28, 1)         0
_________________________________________________________________
conv2d_1 (Conv2D)            (None, 26, 26, 64)        640
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 13, 13, 64)        0
_________________________________________________________________
dropout_1 (Dropout)          (None, 13, 13, 64)        0
_________________________________________________________________
flatten_1 (Flatten)          (None, 10816)             0
_________________________________________________________________
dense_1 (Dense)              (None, 128)               1384576
_________________________________________________________________
dropout_2 (Dropout)          (None, 128)               0
_________________________________________________________________
dense_2 (Dense)              (None, 10)                1290
=================================================================
Total params: 1,386,506
Trainable params: 1,386,506
Non-trainable params: 0

Решение приведено в комментарии Я забыл на один горячий бис мои y_train, y_val и y_test данные.Решено с:

from keras.utils.np_utils import to_categorical
y_train = to_categorical(y_train)

1 Ответ

0 голосов
/ 25 сентября 2018

Ошибка говорит о том, что цели (у), как ожидается, будут иметь форму, которая закодирована в горячем виде, каждый образец с 10 элементами.Вы показываете, что y_test имеет форму (10000,), которая не имеет горячего кодирования.

Вы можете сделать это с помощью:

y_test = kera.utils.np_utils.to_categorical(y_test)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...