我有一个关于如何定义神经网络的基本初学者问题,我正在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'])
据我所知已经阅读了分类交叉熵的公式,但它似乎是按输出节点计算的。我的问题是,在训练过程中,如何将交叉熵的值组合起来创建一个标量值的目标函数?这只是一个平均值吗?
答案 0 :(得分:2)
Keras计算每个实例丢失值的平均值,可能是加权的(如果您有兴趣,请参阅sample_weight_mode
参数)。
以下是对源代码的引用:training.py
。如您所见,结果值经过K.mean(...)
,这可确保结果为标量。
然而,一般情况下,可以不同地减少损失,例如,只是一个总和,但它通常表现更差,所以更优选平均值(见this question)。