- Layer type: SoftmaxWithLoss
- 头文件位置: ./include/caffe/layers/softmax_loss_layer.hpp
- CPU 执行源文件位置: ./src/caffe/layers/softmax_loss_layer.cpp
- CUDA GPU 执行源文件位置: ./src/caffe/layers/softmax_loss_layer.cu
- SoftmaxWithLoss层的功能:计算其输入的softmax的多项逻辑损失,概念上这个层就是SoftmaxLayer加上了多项式逻辑损失,但提供了更加数值稳定的梯度。
参数解释
layer{
name: "loss"
type: "SoftmaxWithLoss"
bottom: "fc"
top: "loss"
softmax_param{
axis = 1
}
}
参数定义
Parameters (SoftmaxParameter softmax_param)
From ./src/caffe/proto/caffe.proto:
// 存储SoftmaxLayer,SoftmaxWithLossLayer使用的参数的消息
message SoftmaxParameter {
enum Engine {
DEFAULT = 0;
CAFFE = 1;
CUDNN = 2;
}
optional Engine engine = 1 [default = DEFAULT];
// The axis along which to perform the softmax -- may be negative to index
// from the end (e.g., -1 for the last axis).
// Any other axes will be evaluated as independent softmaxes.
optional int32 axis = 2 [default = 1];
}
Parameters (LossParameter loss_param)
From ./src/caffe/proto/caffe.proto:
// 所有loss层共享的参数
message LossParameter {
//这个给定的标签在反向传播的时候不计算对应标签的loss和梯度
optional int32 ignore_label = 1;
//如何归一化
//目前仅在SoftmaxWithLoss和SigmoidCrossEntropyLoss层中实现。
enum NormalizationMode {
FULL = 0; //除以(当前batch大小*空间维度数),在计算归一化的时候是不会忽略之前设置的那个忽略的标签的样本
VALID = 1; //除以不带ignore_label的输出位置总数。 如果未设置ignore_label,则其行为类似于FULL。
BATCH_SIZE = 2;//只除以batch size
NONE = 3; //不对loss进行归一化
}
// 由于历史原因,SigmoidCrossEntropyLoss默认为BATCH_SIZE and *not* VALID.
optional NormalizationMode normalization = 3 [default = VALID];
//这个参数只是为了向下兼容而已,用了normalization,这个参数就没用了,
//当然若没有normalization那么这个参数也是可以用的,其效果和normalization一样
optional bool normalize = 2;
}