Различия в результатах вычислений, theano, non theano

Я начинаю играть с theano, и поэтому я попытался вычислить простую функцию и протестировать вывод, однако, когда я тестирую скомпилированную версию theano и версию, отличную от theano, результаты немного отличаются...

Код:

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])

выходы:

# from MSE function
0.0623486922837
0.0652202301174
0.151698460419
0.187325204482

# non theano output
0.0467615192128
0.0489151725881
0.113773845314
0.140493903362

Что я здесь смотрю?

1 ответ

Решение

В выражении в этом утверждении

    print(((S[i] - Q[i])**2).sum() / S.shape[0])

вы должны разделить на S.shape[1]не S.shape[0],

Вы создали S с помощью S = np.random.rand(4,3), что значит S имеет форму (4, 3). То есть, S.shape является (4, 3), Длина каждого ряда в S является S.shape[1],

Другие вопросы по тегам