Caffe: классификатор с вероятностным выходом больше 1 - PullRequest
0 голосов
/ 10 июня 2018

Я пытаюсь запустить Caffe на данных cifar-10, используя python.Это конец моего proto.txt (примечание: мой файл развертывания не имеет слоя потерь!)

...
layer {
  name: "ampl"
  type: "InnerProduct"
  bottom: "maxPool1"
  top: "ampl"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  inner_product_param {
    num_output: 10
    bias_term: false
    weight_filler {
      type: "gaussian"
      std: 0.01
    }
    bias_filler {
      type: "constant"
      value: 0.2
    }
  }
}
layer {
  name: "loss"
  type: "Softmax"
  bottom: "ampl"
  bottom: "label"
  top: "loss"
}

Но когда я смотрю на мои выходные вероятности, они не равны [0 1].Это также, как я читаю свою метку вывода в фазе теста:

net = caffe.Net(modelFile, weightsFile, caffe.TEST)

# estimate amplitude
shape = (data.shape[0], net.blobs['ampl'].data.shape[1])
dtype = net.blobs['ampl'].data.dtype

aE = np.ndarray(shape,dtype)

for i in range(data.shape[0]):
    net.blobs['data'].data[...] = data[i].reshape(net.blobs['data'].data.shape)
    net.forward()
    aE[i,:] = net.blobs['ampl'].data

Это вывод для первых 5 образцов:

   -0.8576         0         0         0   -1.2853
   -1.1855         0         0         0   -0.3572
   -2.2088         0         0         0   -2.6844
   -1.2650         0         0         0   -3.8973
   -1.2844         0         0         0   -3.8011
   -1.5247         0         0         0   -3.9778
   -1.6097         0         0         0   -3.7351
   -1.0909         0         0         0   -3.6270
   -1.3660         0         0         0   -0.4569
   -1.0892         0         0         0   -0.2500

1 Ответ

0 голосов
/ 10 июня 2018

Кажется, что вы выводите слой «amp», который является полностью связанным слоем, только softmax будет выдавать фактические вероятности, поэтому вы должны вывести слой, содержащий операцию softmax (без потерь, просто softmax).

Вы также можете вывести последний слой и применить softmax вручную.

...