3.1 张量与计算图
3.1 张量与计算图
在python编程中,我们经常使用numpy表示向量(或者称为多维数组),在深度学习框架中使用了张量(tensor)这个概念,表示了在计算图中流动的数据。计算图又被称为数据流图,是深度学习框架中非常重要的一个概念。开发者通过计算图定义整个模型的网络结构以及对应的优化器和损失函数。数据流图用节点(node)和边(edge)的有向图来描述数学计算。节点一般用来表示施加的数学操作,但也可以表示数据输入的起点以及输出的终点。边表示节点之间的输入/输出关系。举个例子,假设存在以下计算关系:
d=(a+b)*c
可见整个计算图的输入是节点a、b和c,输出是d,如图3-1所示。
图3-1 计算图示例(1)
定义好了计算图后,并不会真正发生计算,只有当往输入节点灌入数据(feed in)时,张量才会在计算图中按照定义的方向发生流动,计算才会发生。如图3-2所示,分别向输入节点a、b和c输入1、2和3,经过计算图运算后,得到结果9。
图3-2 计算图示例(2)
以tensorflow为例,介绍如何实现上面介绍的计算图,对应的代码路径为:
https://github.com/duoergun0729/adversarial_examples/blob/master/code/2-1.ipynb
首先定义对应的输入节点a、b和c,限制为整数类型tf.int64,其中tf.placeholder表明其为输入节点。
import tensorflow as tf
a = tf.placeholder(tf.int64)
b = tf.placeholder(tf.int64)
c = tf.placeholder(tf.int64)
然后定义对应的计算过程,即最终输出d是如何计算获得的。
d = (a+b)*c
最后输入对应的值,运行计算图并获取对应的结果。
with tf.session() as sess:
print sess.run(d,feed_dict = {a:1,b:2,c:3})
9
如果在jupyter中运行程序显示对应的库没有安装,很大可能是对应的jupyter核心没有设置,无法使用对应的anaconda环境。一个推荐的做法是配置你经常使用的anaconda环境到ipython核心。以本书为例,使用的环境名称为book5,进入jupyter核心对应的配置路径,比如:
/users/maidou/anaconda2/share/jupyter/kernels/
使用你的环境名建立目录,便于区分。
/users/maidou/anaconda2/share/jupyter/kernels/book5
在该目录下建立配置文件kernel.json,内容如下所示,其中只需替换你的环境中python可执行文件路径即可。
{
"display_name": "book5",
"language": "python",
"argv": [
"/users/maidou/anaconda2/envs/book5/bin/python",
"-m",
"ipykernel_launcher",
"-f",
"{connection_file}"
]
}
最后执行命令使得对应配置生效,以后执行jupyter时选择核心为book5即可。
conda install -n book5 ipykernel
在python编程中,我们经常使用numpy表示向量(或者称为多维数组),在深度学习框架中使用了张量(tensor)这个概念,表示了在计算图中流动的数据。计算图又被称为数据流图,是深度学习框架中非常重要的一个概念。开发者通过计算图定义整个模型的网络结构以及对应的优化器和损失函数。数据流图用节点(node)和边(edge)的有向图来描述数学计算。节点一般用来表示施加的数学操作,但也可以表示数据输入的起点以及输出的终点。边表示节点之间的输入/输出关系。举个例子,假设存在以下计算关系:
d=(a+b)*c
可见整个计算图的输入是节点a、b和c,输出是d,如图3-1所示。
图3-1 计算图示例(1)
定义好了计算图后,并不会真正发生计算,只有当往输入节点灌入数据(feed in)时,张量才会在计算图中按照定义的方向发生流动,计算才会发生。如图3-2所示,分别向输入节点a、b和c输入1、2和3,经过计算图运算后,得到结果9。
图3-2 计算图示例(2)
以tensorflow为例,介绍如何实现上面介绍的计算图,对应的代码路径为:
https://github.com/duoergun0729/adversarial_examples/blob/master/code/2-1.ipynb
首先定义对应的输入节点a、b和c,限制为整数类型tf.int64,其中tf.placeholder表明其为输入节点。
import tensorflow as tf
a = tf.placeholder(tf.int64)
b = tf.placeholder(tf.int64)
c = tf.placeholder(tf.int64)
然后定义对应的计算过程,即最终输出d是如何计算获得的。
d = (a+b)*c
最后输入对应的值,运行计算图并获取对应的结果。
with tf.session() as sess:
print sess.run(d,feed_dict = {a:1,b:2,c:3})
9
如果在jupyter中运行程序显示对应的库没有安装,很大可能是对应的jupyter核心没有设置,无法使用对应的anaconda环境。一个推荐的做法是配置你经常使用的anaconda环境到ipython核心。以本书为例,使用的环境名称为book5,进入jupyter核心对应的配置路径,比如:
/users/maidou/anaconda2/share/jupyter/kernels/
使用你的环境名建立目录,便于区分。
/users/maidou/anaconda2/share/jupyter/kernels/book5
在该目录下建立配置文件kernel.json,内容如下所示,其中只需替换你的环境中python可执行文件路径即可。
{
"display_name": "book5",
"language": "python",
"argv": [
"/users/maidou/anaconda2/envs/book5/bin/python",
"-m",
"ipykernel_launcher",
"-f",
"{connection_file}"
]
}
最后执行命令使得对应配置生效,以后执行jupyter时选择核心为book5即可。
conda install -n book5 ipykernel