Я написал простой MLP в TensorFlow, который моделирует XOR-Gate .
Таким образом, для:
input_data = [[0., 0.], [0., 1.], [1., 0.], [1., 1.]]
он должен произвести следующее:
output_data = [[0.], [1.], [1.], [0.]]
Сеть имеет входной слой, скрытый слой и выходной слой с 2, 5 и 1 нейроном каждый.
В настоящее время у меня есть следующая перекрестная энтропия:
cross_entropy = -(n_output * tf.log(output) + (1 - n_output) * tf.log(1 - output))
Я также попробовал эту более простую альтернативу:
cross_entropy = tf.square(n_output - output)
наряду с некоторыми другими попытками.
Однако, независимо от того, какой была моя установка, ошибка с a GradientDescentOptimizer
уменьшалась намного медленнее, чем a AdamOptimizer
.
На самом tf.train.AdamOptimizer(0.01)
деле результаты были действительно хорошими после 400-800 шагов обучения (в зависимости от скорости обучения, где 0.01
были наилучшие результаты), в то время как tf.train.GradientDescentOptimizer
всегда требовалось более 2000 шагов обучения, независимо от того, какой расчет кросс-энтропии или скорости обучения использовался.
Почему это так? Кажется, AdamOptimizer
всегда лучший выбор ?!