Theano用符号变量表示各种变量,也叫张量(Tensor),张量是Theano的核心元素(也是TensorFlow的核心元素)。 Theano采用符号计算图模型来实现变量间的运算关系。

符号变量

张量包括很多,是标量、向量以及矩阵等的统称。

Theano本身是一个通用的符号计算框架,与非符号架构的框架不同,它先使用tensor variable初始化变量,然后将复杂的符号表达式编译成为函数模型,最后运行时传入实际数据进行计算。三个步骤是:定义符号变量,编译代码,执行代码。这节主要介绍第一步如何定义符号变量。其他的内容在后面会继续提到。

在Theano中定义符号变量有大致三种:使用内置的变量类型、自定义变量类型、转换其他的变量类型。

1、使用内置的变量类型创建

Theano有7个内置的变量类型:

  • 标量(scalar)

  • 向量(vector)

  • 行(row)

  • 列(col)

  • 矩阵(matrix)

  • tensor3

  • tensor4

    其中标量是0阶张量,向量为1阶张量,矩阵为二阶张量等。创建示例:

import theano
from theano import tensor as T

x=T.scalar(name='onejie',dtype='float32')
data=T.vector(name='xiangliang',dtype='float64')

上面的代码中,创建了 名叫onejie,数据类型为float32的标量,存储到x中;名叫xiangliag,数据类型为float32的向量,存储到data中。

2、自定义变量类型

内置的变量类型只能处理4维及以下的变量,为了能处理更高维的数据,通过TensorType方法来实现自定义变量类型,下面是代码示例:

import theano
from theano import tensor as T

myselftype=T.TensorType('float64',broadcastable=(True/False),name=None,sparse_grad=False)

broadcastable是广播机制,在前几节介绍Numpy的时候提到过,这里的广播机制和【深度学习入门2】Numpy常用操作:数据的合并与展开-通用函数-广播机制里所说的广播机制原理及效果是类似的。主要是为了自动对不同维度的数据进行计算。

3、其他的变量类型转换

可以将Python的变量设置为共享变量。共享变量后面会介绍到。具体的实现方式是将数据通过shared函数,如下面代码所示。

import theano
import numpy as np
import theano.tensor as T

data=np.array([[1,2],[3,4]])
shared_data=theano.shared(data)
type(shared_data)

符号计算图模型

Theano采用符号计算图模型来实现描述变量间的运算关系。

符号计算图的节点有:variable、type、apply和op:

  • variable节点:即符号的变量节点,可以分为输入符号和输出符号
  • type节点:Theano为定义好的数据,指定数据存储的限制条件
  • apply节点:把某一种类型的符号操作符应用到具体的符号变量中,与variable不同,apply节点无须由用户指定,一个apply节点包括3个字段:op、inputs、outputs。
  • op节点:操作符节点,定义了一种符号变量间的运算,如+、-、sum()、tanh()等
import theano
import numpy as np
import theano.tensor as T

x = T.dmatrix('x')  
y = T.dmatrix('y')  
z = x + y  

上面代码的符号计算图

箭头表示指向python对象的引用。这里的蓝色盒子是一个 Apply 节点,红色盒子是 Variable 节点,绿色圆圈是Ops,紫色盒子是 Types。

x 和 y 的owner 域的指向都是None,是因为它们不是另一个计算的结果。如果它们中的一个是另一个计算的结果,那么owner域将会指向另一个蓝色盒。


声明:内容来源于吴茂贵老师主编的学习教材《Python深度学习——基于TensorFlow》,本文仅供学习参考,并加入了博主自己的一些理解和操作,并非原汁原味,为了更好的阅读体验和系统性地学习,请购买正版读物进行学习。



博主个人公众号
版权声明 ▶ 本网站名称:陶小桃Blog
▶ 本文链接:https://www.52txr.cn/2022/TheanoVar.html
▶ 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行核实删除。
▶ 转载本站文章需要遵守:商业转载请联系站长,非商业转载请注明出处!!

最后修改:2022 年 05 月 24 日
如果觉得我的文章对你有用,请随意赞赏