Как создать на лету слой python для вычисления весов класса в кофе?

Я хочу добавить слой python, который вычисляет вероятностную матрицу H для INfoGainLoss Layer на лету. Я уже написал программу для создания этой матрицы, вычисляя вероятности каждого класса одного изображения и сохраняя его в файл .binaryproto. Я очень ценю, если вы дадите мне несколько советов, как написать питон-слой, который создает эту матрицу, и отправить его в качестве третьего параметра на уровень InfoGainLoss? Я нарисовал схему здесь, правильно ли? Если да, как написать слой python для этого? Я уже читал некоторые коды в Интернете, но все еще путаюсь в setup, reshape, forward.

[1]: https://i.stack.imgur.com/jNu 7a.png

-1
источник поделиться
1 ответ

Ваш уровень Python очень похож на входной уровень: он не имеет обратного распространения, что упрощает его реализацию. См. Эту тему для получения более подробной информации.

Ваш слой ожидает "label" снизу и "H" матрицу "H" как верхнюю:

layer {name: "classWeightH" bottom: "label" top: "H" type: "Python" python_param {module: # имя файла, где код python является слоем: "classWeightHLayer"}}

Код python должен выглядеть примерно так:

import sys, os, numpy as np
sys.path.insert(0, os.environ['CAFFE_ROOT']+'/python')
import caffe
class classWeightHLayer(caffe.Layer):
  def setup(self,bottom,top):
    assert len(bottom)==1, "expecting exactly one input"
    assert len(top)==1, "producing exactly one output"
    # you might want to get L - the number of labels as a parameter...

  def reshape(self,bottom,top):
    top[0].reshape(1,1,L,L) # reshape the output to the size of H

  def forward(self,bottom,top):         
    labels = bottom[0].data
    H = np.zeros((1,1,L,L), dtype='f4') 
    # do your magic here...
    top[0].data[...] = H    

  def backward(self, top, propagate_down, bottom):
    # no back-prop for input layers
    pass
+1
источник

Посмотрите другие вопросы по меткам или Задайте вопрос