张量、计算图、会话
人工智能实践:Tensorflow笔记 --Tensorflow框架(张量、计算图、会话)
基于Tensorflow的NN(神经网络):用张量表示数据,用计算图搭建神经网络,用会话执行计算图,优化线上的权重(参数),得到模型。
张量(tensor) : 多维数组(列表) 阶:张量的维数
张量可以表示0阶到n阶数组(列表)
判断张量是几阶的,就通过张量右边的方括号数,0个就是0阶,n个是n阶,张量可以表示0阶到n阶数组(列表)。
数据类型:tf.float32 tf.int32 …
两个张量加法示例:
import tensorflow as tf #引入模块
#tf.constant 表示定义常数
a = tf.constant([1.0,2.0]) #定义张量a等于常数[1.0 2.0]
b = tf.constant([3.0,4.0]) #定义张量b等于常数[3.0 4.0]
result = a + b #实现a加b的加法
print result #打印出结果
显示:(下图意思为result是一个名为add:0的张量,shape=(2,)里有一个元素,所以维度是1,元素2代表第一个维度里有两个元素,表示一维数组长度为2,dtype=float32表示数据类型是浮点型的)
计算图只描述了运算过程,不计算运算结果。
计算图(Graph):搭建神经网络的计算过程,是承载一个或多个计算节点的一张图,只搭建网络,不运算。
神经网络的基本模型是神经元,神经元的基本模型其实就是数学中的乘、加运算。
x1、x2表示输入,w1、w2分别是x1到y和x2到y的权重,y=x1w1+x2w2。
上图代码为:
import tensorflow as tf #引入模块
x = tf.constant([[1.0,2.0]]) #定义一个2阶张量等于[[1.0,2.0]]
w = tf.constant([[3.0],[4.0]]) #定义一个2阶张量等于[[3.0],[4.0]]
y = tf.matmul(x,w) #实现xw矩阵乘法
print y #打印出结果
可以打印出这样一句话:Tensor(“matual:0”,shape(1,1),dtype=float32),从这里我们可以看出,print的结果显示y是一个张量,只搭建承载计算过程的计算图,并没有运算,如果我们想得到运算结果就要用到“会话Session()”了。
会话(Session):执行计算图中的节点运算。
with tf.Session() as sess:
print sess.run(y)
import tensorflow as tf #引入模块
x = tf.constant([[1.0,2.0]]) #定义一个2阶张量等于[[1.0,2.0]]
w = tf.constant([[3.0],[4.0]]) #定义一个2阶张量等于[[3.0],[4.0]]
y = tf.matmul(x,w) #实现xw矩阵乘法
print y #打印出结果
with tf.Session() as sess:
print sess.run(y) #执行会话并打印出执行后的结果
可以打印出这样的结果:
结果:Tensor(“matmul:0”,shape(1,1),dtype=float32)
[[11.]]
我们可以看到,运行Session()会话前只打印出y是个张量的提示,运行Session()会话后打印出了y的结果 1.03.0 + 2.04.0 = 11.0。
注(1):我们以后会常用到vim编辑器,为了使用方便,我们可以更改vim的配置文件,使vim的使用更加便捷。我们在vim~/.vimrc写入:
set ts = 4 (表示使Tab键等效为四个空格)
set nu (表示使vim显示行号 nu是number缩写)
注(2):在vim编辑器中运行Session()会话时,有时会出现“提示warning”,是因为有的电脑可以支持加速指令,但是运行代码是并没有启动这些指令,可以把这些“提示warning”暂时屏蔽掉。屏蔽方法为进入主目录下的bashrc文件,在bashrc文件中加入这样一句export TF_CPP_MIN_LOG_LEVEL=2,从而把“提示warning”等级降低。
这个命令可以控制python程序显示提示信息的等级,在Tensorflow里面一般设置是“0”(显示所有信息)或者“1”(不显示info),“2”代表不显示warning,“3”代表不显示error。一般不建议设置成3。
source 命令用于重新执行修改的初始化文件,使之立即生效,而不必注销并重新登录。