TensorFlow 是一个开发源代码软件库,它能够进行高性能的数值计算与分析,借助其灵活的架构,能够将其部署到多种平台(CPU、GPU、TPU)和设备(桌面设备、移动设备、集群)。TensorFlow 为机器学习和深度学习提供了不少强有力的支持,本篇文章小编为你们整理了不少 TensorFlow 的基础编程知识,很是适合初学者学习,一块儿来看看吧!node
TensorFlow 顾名思义,是由 Tensor + Flow 组成,Tensor 叫作张量,主要起到数据结构的做用,Flow 叫作流,用来表示计算模型,即张量之间经过计算而转换的过程 。TensorFlow 是一个提供计算图的形式表述计算的编程系统,每个计算都是计算图上的一个节点,节点之间的边描述的计算之间的关系。python
#一个简单的计算图 node1 = tf.constant(3.0,tf.float32,name="node1") node2 = tf.constant(4.0,tf.float32,name="node2") node3 = tf.add(node1,node2) print(node3)
该代码输出结果为:编程
Tensor( "Add:0", shape( ), dtype = float32 )
要注意的是,这里输出的结果不是一个具体的数字,而是一个张量的结构。数组
建立计算图只是创建了静态的计算模型,只有执行对话才能提供数据并得到结果。浏览器
#创建对话并显示运行结果 sess = tf.Session() print("运行sess.run(node3)的结果是:", sess.run(node3)) #关闭session sess.close()
该代码输出结果为:运行 sess.run (node3) 的结果是:7.0微信
在 TensorFlow 中,全部的数据都经过张量的形式来表示。
张量能够简单的理解为多维数据:session
零阶张量表示标量,即一个数;数据结构
一阶张量表示想来,即一维数组;架构
张量没有真正保存数字,它保存的只是计算过程。机器学习
Tensor( "Add:0", shape( ), dtype = float32 )
由名字 name,形状 shape 和类型 type 三部分组成:
例如:
张量的阶表示了张量的维度
阶为1的张量等价于向量;
阶为2的张量等价于矩阵,经过 t [ i, j ]获取元素;
阶为3的张量,经过 t [ i, j, k ]获取元素。
TensorFlow 支持14种类型:
import tensorflow as tf a = tf.constant([1,2], name="a") b = tf.constant([2.0,3.0], name="b") result = a + b
该代码运行会报错,由于 TensorFlow 会对参与运算的全部张量进行类型的检查,发现类型不匹配时就会报错。
计算图中的节点就是操做
一次加法是一个操做
一次乘法也是一个操做
构建一些变量的初始值也是一个操做
每一个运算操做都是属性,它在构建图的时候须要肯定下来
操做之间存在顺序关系,这些操做之间的依赖就是 “边”。
会话拥有并管理 TensorFlow 程序运行时的全部资源,当全部计算完成以后须要关闭会话帮助系统回收资源。
import tensorflow as tf #定义计算图 a = tf.constant([1,2,3]) #建立一个会话 sess = tf.Session() #使用这个建立好的会话来获得关心的运算结果 print(sess.run(a)) #关闭会话使得本次运行中使用的资源能够被释放 sess.close()
这里须要注意的是:调用Session.close( )函数来关闭会话并释放资源,当程序由于异常退出时,关闭会话函数可能就不会被执行从而致使资源泄露。
所以如下代码能够避免该问题:
import tensorflow as tf #定义计算图 a = tf.constant([1,2,3]) #建立一个会话,并经过python中的上下文管理器来管理该会话 with tf.Session() as sess: #使用这个建立好的会话来获得关心的运算结果 print(sess.run(a)) #关闭会话使得本次运行中使用的资源能够被释放 #当上下文退出时会话关闭,资源释放
在交互式环境下,python 脚本或者 Jupyter 编辑器,经过设置默认会话来获取张量的取值更加方便。
tf.InteractiveSession 使用这个函数会自动将生成的会话注册为默认会话
node1 = tf.constant(3.0,tf.float32,name="node1") node2 = tf.constant(4.0,tf.float32,name="node2") node3 = tf.add(node1,node2) sess = tf.InteractiveSession() print(node3.eval()) sess.close()
常量 constant
常量是在运算过程当中值不会改变的单元,在 TensorFlow 中无需进行初始化操做
常量的建立语句为:
constant_name = tf.constant(value)
变量是在运行过程当中值会改变的单元,在 TensorFlow 中须要进行初始化操做
变量的建立语句为:
variable_name = tf.Variable (value, name)
个别变量初始化:
init_op = variable_name.initializer( )
全部变量初始化:
init_op = tf.global_variable_initializer( )
注意:使用了 Variable 变量类型,不进行初始化数值会出现运行错误。
TensorFlow 中的 Variable 变量类型,在定义时须要初始化,但有些变量定义时并不知道其数值,只有当真正开始运行程序时,才由外部输入,好比训练数据,这时须要用到占位符。
tf.placeholder 占位符,是 TensorFlow 中特有的一种数据结构,相似于动态变量或函数的参数。
占位符的函数接口以下:
tf.placeholder(dtype, shape = None, name = None) #此代码生成一个2*3的二维数组,矩阵中每一个元素类型都是tf.float32 x = tf.placeholder(tf.float32,[2,3],name="tx")
若是构建了一个包含 placeholder 操做的计算图,当在 session 中调用run 方法时,placeholder 占用的变量必须经过 feed_dict 参数传递进去,不然会报错。
TensorBoard 是TensorFlow 的可视化工具
经过 TensorFlow 程序运行过程当中输出的日志文件可视化 TenorFlow 程序的运行状态。
运行以后会在指定目录里产生日志文件
TensorBoard 不须要额外安装,在 TenorFlow 安装时已经自动完成。
在 Anaconda Prompt 中先进入日志存放的目录,再运行 TensorBoard,并将日志地址指向程序日志输出的地址。
命令:
tensorboard --logdir=/path/log
在浏览器访问网址:http://localhost:6006
TensorBoard 经常使用API
---------End---------
关注后回复“w”,加我私人微信
推荐阅读:
阅读是投资本身最有效的方式
自律是一种觉醒