2
Caffe Softmax層に「温度」パラメータを実装しようとしています。私はhereで概説された蒸留技術を利用してネットワークを実装しています。Caffe:スケール層を使用してSoftmax温度を追加する
基本的に、私は次のように温度の関数/ wのソフトマックスを利用するために、私のソフトマックス層を希望:
F(X) = exp(zi(X)/T)/sum(exp(zl(X)/T))
がこれを使用して、私はトレーニングの前に温度T
を微調整できるようにしたいです。私は同様のquestionを見つけましたが、この質問はデプロイメントネットワークの温度にSoftmaxを実装しようとしています。私は最初の答えで "オプション4"として記述された追加のスケールレイヤを実装するのに苦労しています。
私はCaffeのexamplesディレクトリにあるcifar10_full_train_test prototxtファイルを使用しています。私は次のように変更すること試してみました:
...
...
...
layer {
name: "accuracy"
type: "Accuracy"
bottom: "ip1"
bottom: "label"
top: "accuracy"
include {
phase: TEST
}
}
layer {
name: "loss"
type: "SoftmaxWithLoss"
bottom: "ip1"
bottom: "label"
top: "loss"
}
オリジナル速い電車(5,000回の繰り返し)した後
...
...
...
layer {
name: "accuracy"
type: "Accuracy"
bottom: "ip1"
bottom: "label"
top: "accuracy"
include {
phase: TEST
}
}
layer {
type: "Scale"
name: "temperature"
top: "zi/T"
bottom: "ip1"
scale_param {
filler: { type: 'constant' value: 0.025 } ### I wanted T = 40, so 1/40=.025
}
param { lr_mult: 0 decay_mult: 0 }
}
layer {
name: "loss"
type: "SoftmaxWithLoss"
bottom: "ip1"
bottom: "label"
top: "loss"
}
を変更し、私は私の分類確率があるかどうかがチェックより均等に現れているが、実際にはそれらはあまり均一に分布していないように見える。
例:
高い一時T:F(X)= [0.2、0.5、0.1、0.2]
低一時T:F(X)= [0.02、0.95、0.01、0.02]
〜私の試み:F(X)= [0、1.0、0、0]
私はこの実装で正しい軌道上にあるように見えるのですか?いずれにせよ、私は何が欠けていますか?