上QQ阅读APP看书,第一时间看更新
2.7.2 type节点
type节点定义了一种具体的变量类型以及变量类型的数据类型时,Theano为其指定了数据存储的限制条件,以irow的约束为例,定义type节点的表达式如下所示。
w = theano.tensor.irow('w')
上述表达式中定义了一个变量w。其中“irow”中的“i”是“int32”的缩写,表示变量w的数据类型为int32;“irow”中的“row”代表变量w的变量类型为row。在Theano中,type用来表示潜在数据对象上的一组约束,这些约束允许Theano定制C代码来处理需要被约束的变量,并对计算图进行静态优化。例如上面的变量w被指定了以下限制条件:
· 底层必须以numpy.ndarray作为数据结构。
· 数据类型必须是int32,即变量w必须是一个int32的整数数组。
· 变量的形态大小必须为(1,n),即第一维的大小必须为1。
如果不满足上述约束,则会返回TypeError错误。在这些约束条件下,Theano可以生成额外的C代码,用来声明正确的数据类型和在维度上进行有准确次数的循环。
Theano的type不同于Python的type或者class。在Theano中,irow和dmatrix都是使用numpy.ndarray来作为潜在的类型进行计算和数据存储的,实际上,在Theano中这两者是不同的type。使用dmatrix时的约束如下:
· 底层必须以numpy.ndarray作为数据结构。
· 数据类型必须是64位的浮点数数组。
· 变量的形态大小必须为(m,n),在m或n上都没有限制。
除非特殊声明,后续内容中提到的“type”特指Theano中的type。