我想了解 theano 功能(给定,更新)

I want to understand theano function(given,updates)

想请教几个关于theano函数的问题

1.I 看到了未分配输入变量的脚本。如果是这样,它是如何工作的?

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.When涉及到函数中的'given'参数,有点难懂。人们说这是为了提高 GPU 进程,但我想知道应该为 'given' 分配哪些变量。 请看下面的脚本。

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(在变量对 (Var1, Var2) 上可迭代。列表、元组或字典。每对中的 Var1 和 Var2 必须具有相同的类型。)——具体替换计算图(Var2 替换 Var1)。它需要 2 个变量,但在第一个示例中似乎有 4 个变量,而第二个对我来说非常复杂。谁能告诉我给定的具体细节是什么?并解释给定变量中的第二个脚本发生了什么。

此外,在主页上,它说 'you can use the givens parameter of function which replaces a particular node in a graph for the purpose of one particular function.' 我不明白它替换了图中的哪个特定节点。

请帮帮我!!

首先,给定意味着T变量的真实值是多少。如果在给定中有(x,a)并且a是一个np.array那么它在计算时会用a来代替x,同样在给定中如果有x:a,意思是一样的事物。 在第一个示例中,data_X 是输入,只是不是在第一个参数中给出而是在 givens 中给出,这是相同的。 在第二个例子中,test_set_x 是 theano.shared 这意味着它的值已经存在,它是一个矩阵。但是你将使用它的哪一部分,你将通过索引选择哪个是输入。