示例将使我希望更清楚,(这是一个Logistic回归对象,Theano Tensor库导入为T)
def __init__(self, input, n_in, n_out):
#Other code...
self.p_y_given_x = T.nnet.softmax(T.dot(input, self.W) + self.b)
在主要内容中被召唤......
def main():
x = T.matrix()
classifier = LogisticRegression(input=x, n_in=28 * 28, n_out=10)
如果这些snippits不足以理解,那么代码就在“全部放在一起”的页面上 - http://deeplearning.net/tutorial/logreg.html#logreg
答案 0 :(得分:4)
所以... Theano在评估之前为其计算的表达式构建图形。通过在示例中将诸如'x'之类的theano变量传递给逻辑回归对象的初始化,您将在对象中创建许多表达式,例如p_y_given_x,这些表达式是依赖于x的theano表达式。这稍后用于符号梯度计算。
为了更好地感受它,您可以执行以下操作:
import theano.pp #pp is for pretty print
x = T.dmatrix('x') #naming your variables is a good idea, and important i think
lr = LogisticRegression(x,n_in = 28*28, n_out= 10)
print pp(lr.p_y_given_x)
这应该给你一个输出,如
softmax( W \dot x + b)
当你在它的时候继续尝试
print pp(T.grad(lr._y_given_x,x)) #might need syntax checkng
这是theano内部存储表达式的方式。然后,您可以使用这些表达式在theano中创建函数,例如
values = theano.shared( value = mydata, name = 'values')
f = theano.function([],lr.p_y_given_x ,
givens ={x:values},on_unused_input='ignore')
print f()
然后调用f应该为你提供mydata中定义的值的预测类概率。在theano中执行此操作的方法(以及在DL教程中完成的方式)是通过传递“虚拟”theano变量,然后使用“givens”关键字将其设置为包含数据的共享变量。这很重要,因为将变量存储在共享变量中允许theano使用GPU进行矩阵操作。
答案 1 :(得分:1)
这是一个名为named parameters的Python功能。对于具有可选参数或许多参数的函数,按名称传递参数是有帮助的,而不是仅仅依赖于它们传递给函数的顺序。在您的具体情况下,您可以看到input
参数here的含义。
答案 2 :(得分:0)
命名参数或默认关键字参数(例如input
,n_in
和n_out
有用,原因如下。