Этот пример тензорного потока правильный - мой параметр Dense правильный? - PullRequest
0 голосов
/ 05 июля 2019

Я следую этому уроку по классификации изображений с использованием TensorFlow .

Мне нужно немного дополнительных пояснений по некоторым частям.

Первый вопрос: правильно ли я сказал, что первый Pickle X содержит данные моих изображений, а Pickle y содержит имена классов для моих данных?

Как ссылки в X связаны со ссылками в Y?

Мой главный вопрос в статье гласит:

В строке 37 измените параметр Dense () на количество классов у тебя есть. Это количество возможных выходных данных нейронной сети.

Если у меня есть 3 класса, я должен менять каждые Dense() на Dense(3)?

Означает ли это изменить все ссылки на:

model.add(Dense(x))

model.add(Dense(x)) написано в 3 местах в этом коде. Я должен изменить только последнюю запись этого? Что каждый из них делает?


В заключение, для 3 классов следующий код корректен для финального слоя?:

# The output layer with 3 neurons, for 3 classes
model.add(Dense(3))
model.add(Activation("softmax"))

1 Ответ

0 голосов
/ 05 июля 2019

Сводка

В вашем случае вам нужно только установить количество узлов на 3 в плотном выходном слое, потому что у вас есть 3 класса.Для задач мультиклассовой классификации (с взаимоисключающими классами) вам обычно нужны:

  • Установите функцию активации выходного слоя на softmax
  • Измените функцию потерь на 'categorical_crossentropy' или'sparse_categorical_crossentropy' (при использовании Keras)

Примечание:Разница между обоими потерями - это выходы.Категориальная кросс-энтропия возвращает для каждой выборки вектор с таким же размером, что и количество классов, где k-е значение представляет вероятность того, что выборка относится к классу kС другой стороны, разреженные потери возвращают непосредственно прогнозируемый класс в виде целочисленной метки для каждой выборки.

Например:

[[0.5, 0.3, 0.2], [0.2, 0.5, 0.3]] # Categorical
[0, 1]  # Sparsed
...