FakeBrain - 1 year ago 117
Python Question

# differences in computation outputs, theano, non theano

I'm starting to play around with theano, and so I tried computing a simple function and testing the output, however when I test a theano compiled version versus a non theano version the outputs are a bit different....

The code:

``````import numpy as np
import theano.tensor as T
from theano import function

np.random.seed(1)
S = np.random.rand(4,3)
Q = np.random.rand(4,3)

def MSE(a, b):
n = min(a.shape[0], b.shape[0])
fhat = T.dvector('fhat')
y = T.dvector('y')
mse = ((y - fhat)**2).sum() / n
mse_f = function([y, fhat], mse)
return mse_f(a,b)

for row in range(S.shape[0]):
print(MSE(S[row], Q[row]))

for i in range(S.shape[0]):
print(((S[i] - Q[i])**2).sum() / S.shape[0])
``````

the outputs:

``````# from MSE function
0.0623486922837
0.0652202301174
0.151698460419
0.187325204482

# non theano output
0.0467615192128
0.0489151725881
0.113773845314
0.140493903362
``````

What am I over looking here?

``````    print(((S[i] - Q[i])**2).sum() / S.shape[0])
you should divide by `S.shape[1]`, not `S.shape[0]`.
You created `S` using `S = np.random.rand(4,3)`, which means `S` has shape (4, 3). That is, `S.shape` is `(4, 3)`. The length of each row in `S` is `S.shape[1]`.