如何在优化过程中将交叉熵损失转换为标量?

时间:2018-01-18 19:53:08

标签: neural-network keras keras-layer loss-function cross-entropy

我有一个关于如何定义神经网络的基本初学者问题,我正在Keras库的上下文中学习。继MNIST hello world计划之后,我定义了这个网络:

model = Sequential()
model.add(Dense(NB_CLASSES, input_shape=(RESHAPED,), activation='softmax'))

我的理解是,这会创建一个有两层的神经网络,在这种情况下RESHAPED是784,NB_CLASSES是10,所以网络将有1个输入层,785个神经元和一个输出层有10个神经元。

然后我补充说:

model.compile(loss='categorical_crossentropy', optimizer=OPTIMIZER, metrics=['accuracy'])

据我所知已经阅读了分类交叉熵的公式,但它似乎是按输出节点计算的。我的问题是,在训练过程中,如何将交叉熵的值组合起来创建一个标量值的目标函数?这只是一个平均值吗?

1 个答案:

答案 0 :(得分:2)

Keras计算每个实例丢失值的平均值,可能是加权的(如果您有兴趣,请参阅sample_weight_mode参数)。

以下是对源代码的引用:training.py。如您所见,结果值经过K.mean(...),这可确保结果为标量。

然而,一般情况下,可以不同地减少损失,例如,只是一个总和,但它通常表现更差,所以更优选平均值(见this question)。