Не уверен, что это все еще актуально в июне 2018 года, но MNIST руководство для начинающих больше не соответствует коду примеру на Гитхабе. Если вы загрузите и запустите пример кода, он действительно даст вам предполагаемую точность 92%.
Я заметил две вещи, которые пошли не так, следуя инструкциям:
1) Случайный вызов softmax дважды
В учебнике сначала предлагается определить y следующим образом:
y = tf.nn.softmax(tf.matmul(x, W) + b)
Но позже предлагается определить кросс-энтропию с помощью tf.nn.softmax_cross_entropy_with_logits
, что позволит легко случайно сделать следующее:
cross_entropy = tf.nn.softmax_cross_entropy_with_logits(labels=y_, logits=y)
Это дважды отправило бы ваши логиты (tf.matmul(x, W) + b
) через softmax, в результате чего я застрял с точностью 67%.
Однако я заметил, что даже исправление этого по-прежнему привело меня к очень нестабильной точности 80-90%, что приводит меня к следующей проблеме:
2) tf.nn.softmax_cross_entropy_with_logits() устарела
Они еще не обновили учебник, но страница tf.nn.softmax_cross_entropy_with_logits указывает, что эта функция устарела.
В примере кода на Github они заменили его на tf.losses.sparse_softmax_cross_entropy(labels=y_, logits=y)
.
Однако вы не можете просто поменять местами функцию — пример кода также меняет размерность во многих других строках.
Я предлагаю всем, кто делает это впервые, загрузить текущий рабочий код примера с Github и попытаться сопоставить его с концепциями руководства, не воспринимая инструкции буквально. Надеюсь, они соберутся обновить его!
person
Casey L
schedule
14.06.2018