-->

​TensorFlow 零基础入门指南

2021-01-20 22:47发布

TensorFlow 零基础入门指南

TensorFlow 是一个开发源代码软件库,它可以进行高性能的数值计算与分析,借助其灵活的架构,可以将其部署到多种平台(CPU、GPU、TPU)和设备(桌面设备、移动设备、集群)。TensorFlow 为机器学习和深度学习提供了很多强有力的支持,本篇文章小编为大家整理了很多 TensorFlow 的基础编程知识,非常适合初学者学习,一起来看看吧!

1、 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))
#关闭session
sess.close()

该代码输出结果为:运行 sess.run (node3) 的结果是:7.0

2、 Tensor 张量

在 TensorFlow 中,所有的数据都通过张量的形式来表示。
张量可以简单的理解为多维数据:

  • 零阶张量表示标量,即一个数;

  • 一阶张量表示想来,即一维数组;

  • n阶张量表示n维数组;

张量没有真正保存数字,它保存的只是计算过程。

张量的属性

Tensor( "Add:0", shape( ), dtype = float32 )
由名字 name,形状 shape 和类型 type 三部分组成:

  • 名字(name):node : src_output
  • 形状(shape):张量的维度信息,当shape=()时,表示标量
  • 类型(type): 每个张量都会有一个唯一的类型

    张量的形状


    例如:

    张量的阶

    张量的阶表示了张量的维度

    阶为1的张量等价于向量;
    阶为2的张量等价于矩阵,通过 t [ i, j ]获取元素;
    阶为3的张量,通过 t [ i, j, k ]获取元素。

    张量的类型

    TensorFlow 支持14种类型:

  • 实数:tf.float32,tf.float64
  • 整数:tf.int8,tf.int16,tf.int32,tf.int64,tf.uint8
  • 布尔:tf.bool
  • 复数:tf.complex64,tf.complex128
    注意:不带小数点的数会被默认为int32,带小数点的会被默认为float32.
import tensorflow as tf
a = tf.constant([1,2], name="a")
b = tf.constant([2.0,3.0], name="b")
result = a + b


该代码运行会报错,因为 TensorFlow 会对参与运算的所有张量进行类型的检查,发现类型不匹配时就会报错。

3、 Operation 操作

计算图中的节点就是操作

一次加法是一个操作
一次乘法也是一个操作
构建一些变量的初始值也是一个操作
每个运算操作都是属性,它在构建图的时候需要确定下来

操作之间存在顺序关系,这些操作之间的依赖就是 “边”。

4、 Session 会话

会话拥有并管理 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()

5、 常量与变量

常量 constant
常量是在运算过程中值不会改变的单元,在 TensorFlow 中无需进行初始化操作

常量的创建语句为:

constant_name = tf.constant(value)

变量 Variable

变量是在运行过程中值会改变的单元,在 TensorFlow 中需要进行初始化操作

变量的创建语句为:

variable_name = tf.Variable (value, name)

个别变量初始化:

init_op = variable_name.initializer( )

所有变量初始化:

init_op = tf.global_variable_initializer( )


注意:使用了 Variable 变量类型,不进行初始化数值会出现运行错误。

6、 占位符 placeholder

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 参数传递进去,否则会报错。

7、 TensorBoard 可视化

TensorBoard 是TensorFlow 的可视化工具


通过 TensorFlow 程序运行过程中输出的日志文件可视化 TenorFlow 程序的运行状态。

在 TensorBoard 中查看图结构


运行之后会在指定目录里产生日志文件

启动 TensorBoard

TensorBoard 不需要额外安装,在 TenorFlow 安装时已经自动完成。

在 Anaconda Prompt 中先进入日志存放的目录,再运行 TensorBoard,并将日志地址指向程序日志输出的地址。

命令:

tensorboard --logdir=/path/log

在浏览器访问网址:http://localhost:6006


TensorBoard 常用API

---------End---------

关注后回复“w”,加我私人微信

推荐阅读:
阅读是投资自己最有效的方式
自律是一种觉醒

标签: