我已经在TensorFlow中编写了一个简单的MLP,它正在对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)
以及其他一些尝试。
但是,无论我的设置是什么,的错误GradientDescentOptimizer
减少的速度都比的慢得多AdamOptimizer
。
实际上tf.train.AdamOptimizer(0.01)
,经过400-800个学习步骤(取决于学习率,在哪里0.01
获得最好的结果)后产生了非常好的结果,而tf.train.GradientDescentOptimizer
无论使用哪种交叉熵计算或学习率,始终需要超过2000个学习步骤。
为什么会这样呢?看来AdamOptimizer
永远是更好的选择?!
2
Adam优化器比梯度下降器更复杂(基于本文)。
—
马克·克莱森