Neural network Caffe:Softmax随温度变化

Neural network Caffe:Softmax随温度变化,neural-network,deep-learning,caffe,conv-neural-network,softmax,Neural Network,Deep Learning,Caffe,Conv Neural Network,Softmax,我正在实施Hinton的知识提炼。第一步是存储温度较高的“笨重模型”的软目标(即,我不需要训练网络,只需要对每个图像进行前向传递,并存储温度为t)的软目标。 有没有一种方法可以在不同温度下获得Alexnet或googlenet软目标的输出? 我需要使用pi=exp(zi/T)/sum(exp(zi/T) 需要将最终完全连接层的输出除以温度T。我只需要在向前传球时使用它(不用于训练)。我认为有三种方法可以解决此问题 1。使用一个温度参数实现您自己的Softmax层。修改的代码以考虑“温度”T,应该

我正在实施Hinton的知识提炼。第一步是存储温度较高的“笨重模型”的软目标(即,我不需要训练网络,只需要对每个图像进行前向传递,并存储温度为
t
)的软目标。
有没有一种方法可以在不同温度下获得Alexnet或googlenet软目标的输出?
我需要使用
pi=exp(zi/T)/sum(exp(zi/T)


需要将最终完全连接层的输出除以温度
T
。我只需要在向前传球时使用它(不用于训练)。

我认为有三种方法可以解决此问题

1。使用一个温度参数实现您自己的
Softmax
层。修改的代码以考虑“温度”
T
,应该非常简单。您可能还需要调整,以允许使用一个额外参数解析
Softmax

2.将该层作为一个整体实施

3.如果您只需要向前传递,即“提取特征”,那么您只需在softmax层之前将层的“顶部”作为特征输出,然后在caffe之外的温度下进行softmax

4。您可以在顶部
Softmax
层之前添加层:

layer {
  type: "Scale"
  name: "temperature"
  bottom: "zi"
  top: "zi/T"
  scale_param { 
    filler: { type: 'constant' value: 1/T }  # replace "1/T" with the actual value of 1/T.
  }
  param { lr_mult: 0 decay_mult: 0 } # make sure temperature is fixed
}
layer {
  type: "Softmax"
  name: "prob"
  bottom: "zi/T"
  top: "pi"
}

发布了Hinton's paper@ShaiThank you的链接。我想我会尝试第一种选择。