Оценка модели Keras показывает, что объект TypeError: numpy.float64 не является итеративным для набора данных mnist - PullRequest
0 голосов
/ 02 декабря 2018

Я только начал работать с keras и попытался построить модель для набора данных mnist в keras.datasets

Вот мой исходный код:

import tensorflow as tf

(train_images, train_labels), (test_images, test_labels) = tf.keras.datasets.mnist.load_data()

Затем,Я определил модель:

model = tf.keras.Sequential()

model.add(tf.keras.layers.Flatten(input_shape=(28,28)))
model.add(tf.keras.layers.Dense(512, activation = tf.nn.relu))
model.add(tf.keras.layers.Dense(10, activation = tf.nn.softmax))

model.compile(loss = 'sparse_categorical_crossentropy', optimizer='rmsprop')
model.fit(train_images, train_labels, epochs=10)

Я попробовал эту модель, используя model.compile(loss = 'sparse_categorical_crossentropy', optimizer='rmsprop'), и модель только что отработала отлично

Позже я попытался оценить модель:

loss, accuracy = model.evaluate(test_images, test_labels)
print('Accuracy on the test set: '+str(accuracy))

и он показал следующее ошибка :

10000/10000 [==============================] - 0s 50us/step
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-68-7ccd830be0cb> in <module>()
----> 1 loss, accuracy = model.evaluate(test_images, test_labels)
      2 print('Accuracy on the test set: '+str(accuracy))

TypeError: 'numpy.float64' object is not iterable

Но когда я пытаюсь делать прогнозы для test_images с помощью predictions = model.predict(test_images), он работает нормально.

Я использую Google Colab для кодирования.Пожалуйста, помогите!

1 Ответ

0 голосов
/ 02 декабря 2018

Ваша модель не имеет метрик из-за отсутствия параметра метрик вашего model.compile ()

Компиляция

compile (оптимизатор, потеря = нет, метрика = нет, loss_weights = нет, sample_weight_mode = нет, weighted_metrics = нет, target_tensors = нет)

вызов, таким образом, согласно документация :

Возвращает

Скалярные тестовые потери (если модель имеет один выход и без метрик ) или список скаляров (если модель имеет несколько выходов и / или метрик).Атрибут model.metrics_names предоставит вам метки отображения для скалярных выходов.

Модель Keras evaluate() возвращает только потери.

Так что если вы измените свой код:

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

вы можете получить точность тоже.

...