Керас: «У операции нет« None »для градиента» в простой сети

Я начинаю работать с Keras и пытаюсь реализовать простую сеть, чтобы протестировать ее на CIFAR10 (изображения 32x32, 10 классов), но модель не поддерживает fit набор данных.

Код модели:

import keras, keras.layers as L

input_shape = [32, 32, 3]
n_inputs = 32 * 32 * 3

model = keras.models.Sequential()
model.add(L.InputLayer(input_shape))
model.add(L.Flatten())
model.add(L.Dense(n_inputs, activation='relu'))
model.add(L.Dense(10, activation='softmax'))

model.compile(optimizer='adam', 
              loss=keras.metrics.sparse_categorical_accuracy,
              metrics=['accuracy'])
model.fit(x=X_train, y=y_train,
          epochs=10)

Ошибка:

ValueError                                Traceback (most recent call last)
<ipython-input-16-be14b685c358> in <module>
      4 model.fit(x=X_train, y=y_train,
      5 #           validation_data=[X_val, y_val],
----> 6           epochs=10)

...\keras\engine\training.py in fit(self, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, **kwargs)
-> 1010         self._make_train_function()

...\keras\engine\training.py in _make_train_function(self)
--> 509                         loss=self.total_loss)

...\keras\legacy\interfaces.py in wrapper(*args, **kwargs)
---> 91             return func(*args, **kwargs)

...\keras\optimizers.py in get_updates(self, loss, params)
    473     @interfaces.legacy_get_updates_support
    474     def get_updates(self, loss, params):
--> 475         grads = self.get_gradients(loss, params)
    476         self.updates = [K.update_add(self.iterations, 1)]
    477 

...\keras\optimizers.py in get_gradients(self, loss, params)
---> 91             raise ValueError('An operation has `None` for gradient. '

ValueError: An operation has `None` for gradient. Please make sure that all of your ops have a gradient defined (i.e. are differentiable). Common ops without gradient: K.argmax, K.round, K.eval.

Я видел подобные фрагменты, работающие правильно в учебных пособиях, и не могу найти ошибку. Что не так с этой моделью?

Вы ошибочно используете метрику в качестве функции потерь. Вместо этого используйте loss='sparse_categorical_crossentropy'.

today 07.10.2018 20:45

О, конечно! Спасибо, что указали на это!

Alex 07.10.2018 20:49
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
2
2 208
0

Другие вопросы по теме