0
我有一些奇怪的行爲,當我有一個評估theano表達式的lambda函數的列表。代碼如下:theano和lambda函數
# Equivalent functions (or at least I assume so)
def tilted_loss(q,y,f):
e = (y-f)
return (q*tt.sum(e)-tt.sum(e[(e<0).nonzero()]))/e.shape[0]
def tilted_loss2(y,f):
q = 0.05
e = (y-f)
return (q*tt.sum(e)-tt.sum(e[(e<0).nonzero()]))/e.shape[0]
def tilted_loss_np(q,y,f):
e = (y-f)
return (q*sum(e)-sum(e[e<0]))/e.shape[0]
# lambda functions which uses above functions
qs = np.arange(0.05,1,0.05)
q_loss_f = [lambda y,f: tilted_loss(q,y,f) for q in qs]
q_loss_f2 = lambda y,f:tilted_loss(0.05,y,f)
q_loss_f3 = lambda y,f:tilted_loss(qs[0],y,f)
# Test the functions
np.random.seed(1)
a = np.random.randn(1000,1)
b = np.random.randn(1000,1)
print(q_loss_f[0](a,b).eval())
print(q_loss_f2(a,b).eval())
print(q_loss_f3(a,b).eval())
print(tilted_loss2(a,b).eval())
print(tilted_loss_np(qs[0],a,b)[0])
這使輸出:
0.571973847658054
0.5616355181780912
0.5616355181695327
0.5616355181780912
0.56163551817
- 我必須做一些錯的功能
q_loss_f
列表的定義方式。 - q定義的方式好嗎?即它是我發送的一個numpy變量,但在
q_loss_f3
中似乎沒有問題。
有什麼想法?
[什麼做的(lambda)函數閉包捕獲的可能的複製在Python?](http://stackoverflow.com/questions/2295290/what-do-lambda-function-closures-capture-in-python) –