2

我有一个关于如何定义神经网络的基本初学者问题,我正在 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'])

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

4

1 回答 1

2

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

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

然而,一般来说,可以以不同的方式减少损失,例如,只是一个总和,但它通常表现更差,所以平均值更可取(见这个问题)。

于 2018-01-18T20:04:57.587 回答