我在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)
与其他一些尝试一起。
但是,无论我的设置是什么,带有 a 的错误GradientDescentOptimizer
下降速度都比a慢得多AdamOptimizer
。
事实上tf.train.AdamOptimizer(0.01)
,在 400-800 个学习步骤后产生了非常好的结果(取决于学习率,哪里0.01
有最好的结果),而tf.train.GradientDescentOptimizer
无论使用什么交叉熵计算或学习率,总是需要超过 2000 个学习步骤。
为什么会这样?似乎AdamOptimizer
总是更好的选择?!