作者:来自读者投稿
来源:Python数据之道
TensorFlow 是一个开发源代码软件库,它可以进行高性能的数值计算与分析,借助其灵活的架构,可以将其部署到多种平台(CPU、GPU、TPU)和设备(桌面设备、移动设备、集群)。TensorFlow 为机器学习和深度学习提供了很多强有力的支持,本篇文章小编为大家整理了很多 TensorFlow 的基础编程知识,非常适合初学者学习,一起来看看吧!
TensorFlow 顾名思义,是由 Tensor + Flow 组成,Tensor 叫做张量,主要起到数据结构的作用,Flow 叫做流,用来表示计算模型,即张量之间通过计算而转换的过程 。TensorFlow 是一个提供计算图的形式表述计算的编程系统,每一个计算都是计算图上的一个节点,节点之间的边描述的计算之间的关系。
#一个简单的计算图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))#关闭sessionsess.close()
该代码输出结果为:运行 sess.run (node3) 的结果是:7.0
在 TensorFlow 中,所有的数据都通过张量的形式来表示。
张量可以简单的理解为多维数据:
张量没有真正保存数字,它保存的只是计算过程。
Tensor( "Add:0", shape( ), dtype = float32 )
由名字 name,形状 shape 和类型 type 三部分组成:
例如:
张量的阶表示了张量的维度
阶为1的张量等价于向量;
阶为2的张量等价于矩阵,通过 t [ i, j ]获取元素;
阶为3的张量,通过 t [ i, j, k ]获取元素。
TensorFlow 支持14种类型:
注意:不带小数点的数会被默认为int32,带小数点的会被默认为float32.
import tensorflow as tfa = 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()
常量是在运算过程中值不会改变的单元,在 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.float32x = 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
---------End---------