我目前正在通過邏輯迴歸theano tutorial,非常像這篇文章中討論: what-does-negative-log-likelihood-of-logistic-regression-in-theano-look-like。然而,原始tutorial使用共享變量 W和B,以及一個稱爲輸入矩陣。輸入是一個n x n_in
矩陣,W是n_in x n_out
,b是一個n_out x 1
列向量。與邏輯迴歸廣播共享變量與theano
self.W = theano.shared(
value=numpy.zeros(
(n_in, n_out),
dtype=theano.config.floatX
),
name='W',
borrow=True
)
self.b = theano.shared(
value=numpy.zeros(
(n_out,),
dtype=theano.config.floatX
),
name='b',
borrow=True
)
self.p_y_given_x = T.nnet.softmax(T.dot(input, self.W) + self.b)
現在,據我瞭解共享變量的文檔,共享變量的廣播模式默認爲false。那麼爲什麼這行代碼不會因爲尺寸不匹配而導致錯誤?
self.p_y_given_x = T.nnet.softmax(T.dot(input, self.W) + self.b)
畢竟,我們還添加了矩陣T.dot(input, self.W)
爲矢量b
。畢竟默認共享變量是否廣播?即使有廣播,維度也不會加起來。 T.dot(input, self.W)
是n x n_out
矩陣和b a n_out x 1
向量。
我缺少什麼?
感謝您的回答。但是,我仍然缺少一個細節:'self.b'是一個共享變量,它被添加到'T.dot(input,self.W)'中。因此,似乎我們需要廣播來完成這項工作,但是'self.b'沒有被定義爲可廣播。爲什麼它工作呢?我明白爲什麼它可以與符號變量或純粹的numpy一起工作,但不是爲什麼它可以與共享變量一起工作。 – aifos324
由於'T.dot(input,self.W)'將返回符號矩陣/向量。 [theano.tensor.dot(X,Y)](http://deeplearning.net/software/theano/library/tensor/basic.html#theano.tensor.dot) – uyaseen
好的,在你的幫助下,我發現我的錯誤。當我在theano的[docu](http://deeplearning.net/software/theano/library/tensor/basic.html)中讀到這個時,它會產生點擊:當一個元素操作的兩個參數(如加法或減法)不同數量的維度,通過填充True_可將可播放模式展開到左側。因此,假設在運行時,這也適用於共享變量,默認情況下它具有可傳播模式'[false,false,...]',現在都是有道理的。我的錯誤是假設填充不會發生在共享變量上。謝謝! – aifos324