在我的理解里面,交叉熵( cross-entry)损失函数中的 log 能够抵消 softmax 函数中的 exp.使得梯度能够更好的反向传播。
在看 niftyNet 代码的时候,发现如下内容:
在__init__中:
if data_loss_function_name.startswith('cross_entropy') \
or 'xent' in data_loss_function_name:
tf.logging.info(
'Cross entropy loss function calls '
'tf.nn.sparse_softmax_cross_entropy_with_logits '
'which always performs a softmax internally.')
self._softmax = False
在 layer_op 中
if self._softmax:
pred_b = tf.cast(pred_b, dtype=tf.float32)
pred_b = tf.nn.softmax(pred_b)
为什么损失函数是 cross_entropy 的时候,不需要进行 softmax?
1
dinghow 2019-04-09 19:33:06 +08:00
![]( https://dinghow.site/2018/11/28/Udacity-DL-note1/dl-2.png)
![]( https://dinghow.site/2018/11/28/Udacity-DL-note1/dl-1.png) 应该是要加的,利用 cross_entropy 来计算 softmax 层输出与 label 的 loss |
3
tinywhale 2019-04-10 07:12:28 +08:00
我记得 tf.nn.sparse_softmax_cross_entropy_with_logits 已经包括了 softmax
|