2016-07-01 6 views

답변

2

예, pycaffe를 사용하여 맞춤 손실 기능을 추가 할 수 있습니다. 다음은 Python의 유클리드 손실 계층의 예입니다 (Caffe Github repo에서 가져옴). 당신은 앞으로 기능의 손실 함수를 제공해야하며 뒤로 방법에 그라데이션 : 그것은 저장

import caffe 
import numpy as np 

class EuclideanLossLayer(caffe.Layer): 
    """ 
    Compute the Euclidean Loss in the same manner as the C++ EuclideanLossLayer 
    to demonstrate the class interface for developing layers in Python. 
    """ 

    def setup(self, bottom, top): 
     # check input pair 
     if len(bottom) != 2: 
      raise Exception("Need two inputs to compute distance.") 

    def reshape(self, bottom, top): 
     # check input dimensions match 
     if bottom[0].count != bottom[1].count: 
      raise Exception("Inputs must have the same dimension.") 
     # difference is shape of inputs 
     self.diff = np.zeros_like(bottom[0].data, dtype=np.float32) 
     # loss output is scalar 
     top[0].reshape(1) 

    def forward(self, bottom, top): 
     self.diff[...] = bottom[0].data - bottom[1].data 
     top[0].data[...] = np.sum(self.diff**2)/bottom[0].num/2. 

    def backward(self, top, propagate_down, bottom): 
     for i in range(2): 
      if not propagate_down[i]: 
       continue 
      if i == 0: 
       sign = 1 
      else: 
       sign = -1 
      bottom[i].diff[...] = sign * self.diff/bottom[i].num 

를 예를 들어 pyloss.py한다. 이후

n.loss = L.Python(n.ipx, n.ipy,python_param=dict(module='pyloss',layer='EuclideanLossLayer'), 
        loss_weight=1) 

그냥 컴퓨팅에 매우 조심하고 기울기를 위치 : implemeting (뒤로 기능) :

layer { 
    type: 'Python' 
    name: 'loss' 
    top: 'loss' 
    bottom: 'ipx' 
    bottom: 'ipy' 
    python_param { 
    # the module name -- usually the filename -- that needs to be in $PYTHONPATH 
    module: 'pyloss' 
    # the layer name -- the class name in the module 
    layer: 'EuclideanLossLayer' 
    } 
    # set loss weight so Caffe knows this is a loss layer. 
    # since PythonLayer inherits directly from Layer, this isn't automatically 
    # known to Caffe 
    loss_weight: 1 
} 

을 아니면 파이썬 스크립트 : 당신은 다음을로드 할 prototxt 파일에 파이썬 층을 사용할 수 있습니다 오류가 발생하기 쉽습니다.

+0

파이썬을위한 그라데이션 검사 유틸리티 [이 구현] (https://github.com/tnarihi/caffe/blob/python-gradient-checker/python/caffe/test/test_gradient_checker.py)를 사용할 수 있습니다. – Shai