所以... Theano 在计算表达式之前先为其构建图表。通过将 theano 变量(例如示例中的“x”)传递给逻辑回归对象的初始化,您将在对象中创建许多表达式(例如 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.txt 中定义的值的预测类概率。在 theano 中执行此操作的方法(以及在 DL 教程中完成的方法)是传递一个“虚拟”theano 变量,然后使用“givens”关键字将其设置为包含数据的共享变量。这很重要,因为将变量存储在共享变量中允许 theano 使用 GPU 进行矩阵运算。