我有以下简单的神经网络(只有 1 个神经元)来测试Keras的sigmoid激活和计算精度binary_crossentropy:
model = Sequential()
model.add(Dense(1, input_dim=1, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
为了简化测试,我手动设置唯一权重为1,偏置为0,然后用2点训练集评估模型{(-a, 0), (a, 1)},即
y = numpy.array([0, 1])
for a in range(40):
x = numpy.array([-a, a])
keras_ce[a] = model.evaluate(x, y)[0] # cross-entropy computed by keras/tensorflow
my_ce[a] = np.log(1+exp(-a)) # My own computation
我的问题: 我发现由 Keras keras_ce/Tensorflow 计算的二元交叉熵 ( ) 达到了大约1.09e-7什么时候的下限a。16,如下图(蓝线)。随着“a”不断增长,它不会进一步减少。这是为什么?
该神经网络只有 1 个神经元,其权重设置为 1,偏差为 0。使用 2 点训练集{(-a, 0), (a, 1)}
,binary_crossentropy
只需
-1/2 [ log(1 - 1/(1+exp(a)) ) + log( 1/(1+exp(-a)) ) ] = log(1+exp(-a))
所以交叉熵应该随着a
增加而减少,如上面的橙色('my')所示。是否有一些 Keras/Tensorflow/Python 设置我可以更改以提高其精度?还是我在某个地方弄错了?我很感激任何建议/评论/答案。
相关分类