【思维导图】theano 图结构 的一些摘录
【思维导图】theano 图结构 的一些摘录
【思维导图】theano 图结构 的一些摘录
【思维导图】theano 图结构 的一些摘录
【思维导图】theano 图结构 的一些摘录
【思维导图】theano 图结构 的一些摘录
【思维导图】theano 图结构 的一些摘录
theano 图结构

写Theano代码的第一步是使用符号占位符(变量)写下所有数学关系。
图
o代码
o箭头表示指向的Python对象的引用。
o蓝色框是一个Apply节点。
Apply节点表示对variables应用op。
重要的是将由op表示的计算的定义与其应用之间的差异绘制为由apply节点表示的一些实际数据。
o红色框是Variable节点。
变量
o绿色圆圈为Ops。
op表示某种类型的输入产生某种类型的输出的某种计算。
它作为函数
所有这些内部表示为ops。
o紫色框是Types。
数据类型由Type实例表示。
Traversing the graph
o可以使用owner字段从输出(一些计算的结果)开始遍历图
o代码
>>> import theano
>>> x = theano.tensor.dmatrix(‘x’)
>>> y = x * 2.
otype(y.owner)
<class ‘theano.gof.graph.Apply’>
o y.owner.op.name
’Elemwise{mul,no_inplace}’
图结构
o可在Theano构建的计算图中使用的每种类型的结构
Apply
Apply实例有三个重要字段:
oop
Op,用于确定此处应用的函数/变换。
oinputs
代表函数参数的Variables列表。
ooutputs
表示函数的返回值的Variables的列表。
调用gof.Apply(op, inputs, outputs)
o创建Apply实例。
owner字段
o可以使用owner字段从输出(一些计算的结果)开始遍历图
>>> import theano
>>> x = theano.tensor.dmatrix(‘x’)
>>> y = x * 2.
otype(y.owner)
<class ‘theano.gof.graph.Apply’>,
o>>> y.owner.op.name
’Elemwise{mul,no_inplace}’
Constant
Constant是具有一个额外字段data的Variable(只能设置一次)
不需要在function的输入列表中指定常数。
Op
用于确定此处应用的函数/变换
它相当于大多数编程语言中的函数定义。
odef f(x): …这样的代码将为f生成一个Op
oa = f(x)或g(f(4), 5)这样的代码将生成一个涉及f Op的Apply节点。
Variable
在使用Theano时使用的主要数据结构
变量r
o四个重要字段:
type
Type定义此Variable在计算中可以保留的值的类型。
owner
它为None,或者如果Variable是输出则为一个Apply节点。
index
一个整数,使得owner.outputs[index] is r(如果owner为None,
o则忽略)
name
一个用于漂亮打印和调试的字符串。
oConstant
变量有一个特殊的子类:Constant。
具有一个额外字段data的Variable(只能设置一次)
Type
Theano中的Type表示潜在数据对象的一组约束。
o>>> import theano
o>>> x = theano.tensor.ivector()
o>>> y = -x
ox和y都是变量,即Variable类的实例。
x和y的Type
是theano.tensor.ivector。
theano.tensor包中的irow类型
o对irow类型的变量可能包含
o的数据的以下约束:
1. 必须是numpy.ndarray的实例:isinstance(x, numpy.ndarray)
isinstance
2. 必须是32位整数的数组:str(x.dtype) == ‘int32’
3. 必须为1xN的形状:len(x.shape) == 2且x.shape[0] == 1
Theano可以生成用于加法的C代码等
o它声明正确的数据类型,并且在维上包含正确的循环数。
Theano Type不等同于Python类型或类。
图结构扩展
o有两种类型的对:
第一个元素是Apply节点。
第一个元素是字符串“output”。这意味着函数输出此变量。
o元组的第二个元素是一个索引
var.clients[*][0].inputs[index]或fgraph.outputs[index]
自动微分
otensor.grad()
是从输出经过所有apply节点遍历回输入
优化
o当编译一个Theano函数时
代码
一定是个function
o未优化的图
优化过的图
theano.printing
otheano.printing.debugprint(prediction)
otheano.printing.pprint()

紫色框是Types。

未优化的图

蓝色框是一个Apply节点。

绿色圆圈为Ops。

代码

代码

优化过的图

相关文章: