import theano import lasagne from lasagne.layers.base import Layer __all__ = [ "GradientClipLayer", ] class GradientClipLayer(Layer): """ Apply gradient clipping to output layer """ def __init__(self, incoming, grad_clipping, nonlinearity=lasagne.nonlinearities.identity, **kwargs): super(GradientClipLayer, self).__init__(incoming, **kwargs) self.grad_clipping = grad_clipping self.nonlinearity = nonlinearity def get_output_for(self, input, **kwargs): clipped = theano.gradient.grad_clip(input, -self.grad_clipping, self.grad_clipping) return self.nonlinearity(clipped)