comparison linear_regression.py @ 523:111e547ffa7b

modified to use the new implecement of ops and use the new interface to theano.function
author Frederic Bastien <bastienf@iro.umontreal.ca>
date Fri, 14 Nov 2008 16:39:59 -0500
parents 8e4d2ebd816a
children cfe3f62a08cb
comparison
equal deleted inserted replaced
522:05f802184606 523:111e547ffa7b
4 the use of theano. 4 the use of theano.
5 """ 5 """
6 6
7 from pylearn.learner import OfflineLearningAlgorithm,OnlineLearningAlgorithm 7 from pylearn.learner import OfflineLearningAlgorithm,OnlineLearningAlgorithm
8 from theano import tensor as T 8 from theano import tensor as T
9 from nnet_ops import prepend_1_to_each_row 9 from theano.tensor.nnet import prepend_1_to_each_row
10 from theano.scalar import as_scalar 10 from theano.scalar import as_scalar
11 from common.autoname import AutoName 11 from common.autoname import AutoName
12 import theano 12 import theano
13 import numpy 13 import numpy
14 14
94 outputs = T.dot(inputs,Wt) + b # minibatchsize x n_outputs 94 outputs = T.dot(inputs,Wt) + b # minibatchsize x n_outputs
95 squared_errors = T.sum(T.sqr(targets-outputs),axis=1) 95 squared_errors = T.sum(T.sqr(targets-outputs),axis=1)
96 96
97 __compiled = False 97 __compiled = False
98 @classmethod 98 @classmethod
99 def compile(cls,linker='c|py'): 99 def compile(cls, mode = "FAST_RUN"):
100 if cls.__compiled: 100 if cls.__compiled:
101 return 101 return
102 def fn(input_vars,output_vars): 102 def fn(input_vars,output_vars):
103 return staticmethod(theano.function(input_vars,output_vars, linker=linker)) 103 return staticmethod(theano.function(input_vars, output_vars, mode=mode))
104 104
105 cls.compute_outputs = fn([cls.inputs,cls.theta],[cls.outputs]) 105 cls.compute_outputs = fn([cls.inputs,cls.theta],[cls.outputs])
106 cls.compute_errors = fn([cls.outputs,cls.targets],[cls.squared_errors]) 106 cls.compute_errors = fn([cls.outputs,cls.targets],[cls.squared_errors])
107 107
108 cls.__compiled = True 108 cls.__compiled = True
113 class LinearRegressionEquations(LinearPredictorEquations): 113 class LinearRegressionEquations(LinearPredictorEquations):
114 P = LinearPredictorEquations 114 P = LinearPredictorEquations
115 XtX = T.matrix() # (n_inputs+1) x (n_inputs+1) 115 XtX = T.matrix() # (n_inputs+1) x (n_inputs+1)
116 XtY = T.matrix() # (n_inputs+1) x n_outputs 116 XtY = T.matrix() # (n_inputs+1) x n_outputs
117 extended_input = prepend_1_to_each_row(P.inputs) 117 extended_input = prepend_1_to_each_row(P.inputs)
118 new_XtX = T.add_inplace(XtX,T.dot(extended_input.T,extended_input)) 118 new_XtX = T.add(XtX,T.dot(extended_input.T,extended_input))
119 new_XtY = T.add_inplace(XtY,T.dot(extended_input.T,P.targets)) 119 new_XtY = T.add(XtY,T.dot(extended_input.T,P.targets))
120 120
121 __compiled = False 121 __compiled = False
122 122
123 @classmethod 123 @classmethod
124 def compile(cls,linker='c|py'): 124 def compile(cls, mode="FAST_RUN"):
125 if cls.__compiled: 125 if cls.__compiled:
126 return 126 return
127 def fn(input_vars,output_vars): 127 def fn(input_vars,output_vars):
128 return staticmethod(theano.function(input_vars,output_vars, linker=linker)) 128 return staticmethod(theano.function(input_vars, output_vars, mode=mode))
129 129
130 cls.update = fn([cls.XtX,cls.XtY,cls.P.inputs,cls.P.targets],[cls.new_XtX,cls.new_XtY]) 130 cls.update = fn([cls.XtX,cls.XtY,cls.P.inputs,cls.P.targets],[cls.new_XtX,cls.new_XtY])
131 131
132 cls.__compiled = True 132 cls.__compiled = True
133 133