下面内容是此文章的练习,加了一些注释和个人理解,不当之处请赐教:
#导入头文件
import numpy as np
import matplotlib.pyplot as plt
import theano
import theano.tensor as T
from theano import pp
#symbolic variables 符号变量 编写theano代码更像写数学公式
foo = T.scalar('foo') #定义一个标量
bar = foo**2 #另一个变量
bar2 = foo**3
print type(bar) #class 'theano.tensor.var.TensorVariable'
print bar.type #TensorType(float64, scalar)
print pp(bar) # pretty print funtion ,bar的内容: (foo ** TensorConstant{3})
#为了进行计算,需要定义符号函数
#funtion函数的第一个参数表示输入,输入部分必须用中括号[ ]括起,如果输入参数为空,则用[]表示
#第2个参数为函数表达式,如果有多个表达式则也必须用中括号[ ]括起,若只有一个则可括可不括
#这里定义了两个函数
f1 = theano.function([foo],[bar])
f2 = theano.function([foo],bar2)
print f1(3)
#替代函数的另一个方式:用符号变量的eval方法
#eval的参数是字典形式,用“键-值对”表示
print bar.eval({foo:3})
#python定义的函数也可以给theano的变量赋值
def square(x):
return x**2
bar = square(foo)
print 'hi:'
print bar.eval({foo:3})
print square(2)
#theano中有向量、矩阵等类型,在这些类型上可能施加各种操作
A = T.matrix('A')
x = T.vector('x')
b = T.vector('b')
y = T.dot(A,x) + b #与其他矩阵语言不同,NumPy中的乘法运算符*按元素逐个计算,矩阵乘法可以使用dot函数
z = T.sum(A**2) #这里先求A各元素平方,然后各列相加。
# theano.function函数可以同时做多个计算任务,如下所示同时计算y和z两个表示式。下面第3个参数b设置了默认值
linear_mix = theano.function([A,x,theano.Param(b,default=np.array([0,0]))],[y,z])
#下面的参数分别对应A,x,b
print linear_mix(np.array([[1,2,3],[4,5,6]]),np.array([1,2,3]),np.array([4,5]))
#下面只有两个实参:A和x. 则第3个形参b使用默认的值
print linear_mix(np.array([[1,2,3],[4,5,6]]),np.array([1,2,3]))