我想問幾個與theano函數有關的問題。我想了解theano函數(給定,更新)
1.我看到沒有分配輸入變量的腳本。如果是這樣,它是如何工作的?
import theano.tensor as T
import theano
# Define symbolic variables
X = T.matrix('X')
w = theano.shared([0.1, 0.1], name='w')
t = T.vector('t')
# Define Loss Expression
L = (t-X*w)**2
# Calculate Gradient Expression
dLdw = T.grad(L, w)
# Compile the training function
lr = 0.1
data_X = theano.shared([[0.1, 0.2], [0.2, 0.3], [0.1, 0.4], [0.2, 0.4]])
data_t = theano.shared([3, 3.5, 4, 4.2])
calc_output = theano.function([], L,
updates=[(w, w - lr*dLdw)], givens=[(X,data_X), (t,data_t)])
for epoch in xrange(100):
calc_output()
如上所示,輸入方括號爲空。這種情況下輸入什麼呢?
2.當涉及函數中給定的參數時,它有點難以理解。人們說這是爲了推動GPU的進程,但我想知道應該爲「給定」分配什麼樣的變量。 請看下面的腳本。
index = T.scalar('index')
test_model = theano.function(inputs=[index],
outputs=classifier.errors(y),
givens={
x: test_set_x[index * batch_size: (index + 1) * batch_size],
y: test_set_y[index * batch_size: (index + 1) * batch_size]})
validate_model = theano.function(inputs=[index],
outputs=classifier.errors(y),
givens={
x: valid_set_x[index * batch_size:(index + 1) * batch_size],
y: valid_set_y[index * batch_size:(index + 1) * batch_size]})
在給定的,有什麼x和y呢?什麼冒號(:)意味着什麼?我們知道,(theano主頁上寫道:givens(可迭代Variables對(Var1,Var2))列表,元組或字典,每對中的Var1和Var2必須具有相同的Type。) - 特定替換在計算圖中(Var2代替了Var1)。)它需要2個變量,但在第一個例子和第二個例子中似乎有4個變量對我來說非常複雜。有誰能告訴我具體的細節做了什麼?並解釋給定變量中第二個腳本的內容。
此外,在主頁中,它表示'您可以使用函數的givens參數替換圖中特定節點以實現特定功能。'我沒有得到它所取代的圖表中的哪個節點。
請幫助我!
感謝您的評論,這真的很有幫助,請檢查我是否理解你說的。在第一個例子中,給定data_x將被輸入並用其輸出替換X(data_x經過'L'等式:(tX * w)** 2),然後用其輸出替換x),並且這個替換也發生在data_t處,因爲L需要data_x和data_t。 –
在第二個例子中,有兩個冒號。在第一個給定的'x:valid_set_x [index * batch_size:(index + 1)* batch_size'中,這是(valid_set_x [index * batch_size:(index + 1)* batch_size)輸入,'x'被替換爲一個嗎?它很混亂,因爲輸入已被分配:input = ['index']。我沒有得到這個'index * batch_size:(index + 1)* batch_size'部分是什麼......比方說batch_sizeis是100,那麼它意味着'test_set_x [100:200]',所以把它替換成x後的test_set_x通過輸出:classifier.errors? –
我還看到只有1個集合變量,如給定= [x,a],這意味着任意數量的集合(3集或更多集像給定= [x,a],[y,b],[z,c ])可以嗎? –