在优化过程中交叉熵损失如何转换为标量?
How is Cross Entropy Loss Converted to a Scalar During Optimization?
我有一个关于如何定义神经网络的基本初学者问题,我正在 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'])
我知道已经阅读了分类交叉熵的公式,但它似乎是按输出节点计算的。我的问题是,在训练期间,交叉熵的值将如何组合以创建标量值 objective 函数?只是平均值吗?
Keras 计算每个实例损失值的平均值,可能是加权的(如果您有兴趣,请参阅 sample_weight_mode
参数)。
这里是对源代码的引用:training.py
。如您所见,结果值经过 K.mean(...)
,这确保结果是标量。
然而,一般来说,可以以不同的方式减少损失,例如,只是求和,但它通常表现更差,所以平均值更可取(参见 )。
我有一个关于如何定义神经网络的基本初学者问题,我正在 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'])
我知道已经阅读了分类交叉熵的公式,但它似乎是按输出节点计算的。我的问题是,在训练期间,交叉熵的值将如何组合以创建标量值 objective 函数?只是平均值吗?
Keras 计算每个实例损失值的平均值,可能是加权的(如果您有兴趣,请参阅 sample_weight_mode
参数)。
这里是对源代码的引用:training.py
。如您所见,结果值经过 K.mean(...)
,这确保结果是标量。
然而,一般来说,可以以不同的方式减少损失,例如,只是求和,但它通常表现更差,所以平均值更可取(参见