Pycaffe: Как создать собственные веса в слое Python?

Я некоторое время искал в сети и исходный код caffe без каких-либо решений, о которых можно было бы говорить, но в пользовательской нейронной сети приложения я создаю несколько пользовательские слои в Python. Проходы вперед и назад функционально работают хорошо, и я могу создавать пользовательские параметры веса в своей процедуре настройки, но, как я ни старался, я не могу заставить кофе установить «официальные» веса для моего слоя. Это, конечно, позволит улучшить моментальные снимки, упростить реализацию решателя и т. д.

Есть идеи, что мне здесь не хватает?

[EDIT: код из слоя, показанного ниже. Убраны некоторые вещи для краткости. Цель этого слоя — добавить цвет к сглаженным активированным фильтрам из сверточного слоя]

def setup(self, bottom, top):
    global weights
    self.weights = np.random.random((CHANNELS))

def reshape(self, bottom, top):
    top[0].reshape(1,2*XDIM,2*YDIM)

def forward(self, bottom, top):
    arrSize = bottom[0].data.shape
    #Note: speed up w/ numpy ops for this later...
    for j in range(0, 2*arrSize[1]):
            for k in range(0, 2*arrSize[2]):
                    # Set hue/sat from hueSat table.
                    top[0].data[0,j,k] = self.weights[bottom[0].data[0,int(j/2),int(k/2)]]*239

def backward(self, top, propagate_down, bottom):
    diffs = np.zeros((CHANNELS))
    for i in range(0,300):
            for j in range(0,360):
                    diffs[bottom[0].data[0,i/2,j/2]] = top[0].diff[0,i,j]

    #stand in for future scaling
    self.weights[...] += diffs[...]/4 

person Tyler Balsam    schedule 28.12.2015    source источник
comment
Кажется, в вашем вопросе отсутствует код, с которым вам нужна помощь.   -  person Blackwood    schedule 28.12.2015
comment
@Amir, пожалуйста, не вводите повторно машинное обучение и нейронная сеть   -  person Shai    schedule 31.12.2015


Ответы (1)


Это я из будущего! Вот как решить ваш вопрос:

Недавно добавление BLOB-объектов было реализовано Python в Caffe. Вот пример слоя, который делает это:

class Param(caffe.Layer):
    def setup(self, bottom, top):
        self.blobs.add_blob(1,2,3)
        self.blobs[0].data[...] = 0

    def reshape(self, bottom, top):
        top[0].reshape(10)

    def forward(self, bottom, top):
        print(self.blobs[0].data)
        self.blobs[0].data[...] += 1

    def backward(self, top, propagate_down, bottom):
        pass

Чтобы получить доступ к различиям, просто используйте self.blobs[0].diff[...] и все будет готово. Обо всем остальном позаботится решатель. Для получения дополнительной информации см. https://github.com/BVLC/caffe/pull/2944

person Tyler Balsam    schedule 28.12.2015
comment
Как выглядит будущее кафе? - person Shai; 28.12.2015
comment
Это выглядит довольно хорошо для меня. Документация практически отсутствует / разбросана по четырем углам галактики, если вы хотите реализовать реализацию Python, но сам caffe очень хорош. GoogLeNet был реализован в нем довольно лаконично, как и несколько других замечательных коннетов. Хотя кривая обучения довольно крутая. - person Tyler Balsam; 28.12.2015