Mercurial > pylearn
view xlogx.py @ 491:180d125dc7e2
made logistic_regression classes compatible with stacker
author | Olivier Breuleux <breuleuo@iro.umontreal.ca> |
---|---|
date | Tue, 28 Oct 2008 11:39:27 -0400 |
parents | 117e5b09cf31 |
children |
line wrap: on
line source
import theano from theano import tensor, scalar import numpy class XlogX(scalar.UnaryScalarOp): """ Compute X * log(X), with special case 0 log(0) = 0. """ @staticmethod def st_impl(x): if x == 0.0: return 0.0 return x * numpy.log(x) def impl(self, x): return XlogX.st_impl(x) def grad(self, (x,), (gz,)): return [gz * (1 + scalar.log(x))] def c_code(self, node, name, (x,), (z,), sub): if node.inputs[0].type in [scalar.float32, scalar.float64]: return """%(z)s = %(x)s == 0.0 ? 0.0 : %(x)s * log(%(x)s);""" % locals() raise NotImplementedError('only floatingpoint is implemented') scalar_xlogx = XlogX(scalar.upgrade_to_float, name='scalar_xlogx') xlogx = tensor.Elemwise(scalar_xlogx, name='xlogx')