Кто-нибудь знает, какие вычисления происходят в слое Caffe softmax?
Я использую предварительно обученную сеть со слоем softmax в конце.
На этапе тестирования для простой пересылки изображения вывод второго-последнего слоя («InnerProduct») следующий:
-0,20095, 0,39989, 0,22510, -0,36796, -0,21991, 0,43291, -0,22714, -0,22229, -0,08174, 0,01931, -0,05791, 0,21699, 0,00437, -0,02350, 0,02924, -0,28733, 0,19157, -0,0252, 0,0252
Выход последнего слоя («Softmax») имеет следующие значения:
0,00000, 0,44520, 0,01115, 0,00000, 0,00000, 0,89348, 0,00000, 0,00000, 0,00002, 0,00015, 0,00003, 0,00940, 0,00011, 0,00006, 0,00018, 0,00000, 0,00550, 0,00004, 0,00002, 0,05710
Если я применяю Softmax (используя внешний инструмент, такой как matlab) на выходе внутреннего слоя продукта, я получаю следующие значения:
0,0398, 0,0726, 0,0610, 0,0337, 0,0391, 0,0751, 0,0388, 0,0390, 0,0449, 0,0496, 0,0460, 0,0605, 0,0489, 0,0476, 0,0501, 0,0365, 0,0590, 0,0467, 0,0452, 0,0659
Последнее имеет смысл для меня, поскольку вероятности составляют в целом 1,0 (обратите внимание, что сумма значений слоя Softmax в Caffe составляет> 1,0).
Очевидно, что слой softmax в Caffe не является прямой операцией Softmax.
(Я не думаю, что это имеет какое-либо значение, но я просто упомяну, что я использую предварительно обученную сеть в стиле flickr, см. Описание Вот).
РЕДАКТИРОВАТЬ:
Вот определение двух последних слоев в прото тексте. Обратите внимание, что тип последнего слоя — «Softmax».
layer {
name: "fc8_flickr"type: "InnerProduct"bottom: "fc7"top: "fc8_flickr"param {
lr_mult: 10
decay_mult: 1
}
param {
lr_mult: 20
decay_mult: 0
}
inner_product_param {
num_output: 20
weight_filler {
type: "gaussian"std: 0.01
}
bias_filler {
type: "constant"value: 0
}
}
}
layer {
name: "prob"type: "Softmax"bottom: "fc8_flickr"top: "prob"}
Результаты, которые вы получаете, странные.
Операции, проводимые "Softmax"
слоя forward
метод являются:
(Обратите внимание, что первые два шага выполняются для предотвращения переполнения в вычислениях).
Других решений пока нет …