Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 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
- 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
- }
- n.loss = L.Python(n.ipx, n.ipy,python_param=dict(module='pyloss',layer='EuclideanLossLayer'),
- loss_weight=1)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement