TensorFlow编程基础

  1. 1. TensorFlow的基础概念
    1. 1.1. 张量的概念
    2. 1.2. 张量的属性
    3. 1.3. 张量的形状
    4. 1.4. 张量的类型
    5. 1.5. 操作
  2. 2. TensorFlow的基本运算
    1. 2.1. 会话
    2. 2.2. 常量和变量
    3. 2.3. 变量的赋值
    4. 2.4. 占位符
    5. 2.5. Feed提交数据和Fetch提取数据
    6. 2.6. TensorBoard可视化初步

TensorFlow的基础概念

A machine learning platform for everyone to solve real problems.

开放源码软件库,用于进行高性能数值计算

Tensorflow的Hello World

1
2
3
4
5
6
7
import tensorflow as tf

hello = tf.constant("Hello,World!")

sess = tf.Session()

print(sess.run(hello))

Tensor 张量 数据结构:多维数组
Flow 流 计算模型: 张量之间通过计算而转换的过程

通过计算图的形式表述计算的编程系统,计算为节点,边描述计算之间的关系

计算图是一个有向图,由以下内容构成:
• 一组节点,每个节点都代表一个操作,是一种运算
• 一组有向边,每条边代表节点之间的关系(数据传递和控制依赖)

TensorFlow有两种边:
• 常规边(实线):代表数据依赖关系。一个节点的运算输出成为另一个节点的输入,两个节点之间有tensor流动( 值传递)
• 特殊边(虚线):不携带值,表示两个节点之间的 控制相关性。
比如, happens- - before 关系,源节点必须在目的节点执行前完成执行

计算图的实例

1
2
3
4
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)

输出一个张量结构:
1
Tensor("Add:0", shape=(), dtype=float32)

建立对话显示运行结果:

1
2
3
4
sess = tf.Session()
print("运行结果:",sess.run(node1))

sess.close()

张量的概念

在TensorFlow中,所有的数据都通过张量的形式来表示
• 从功能的角度,张量可以简单理解为多维数组
零阶张量表示标量(scalar),也就是 一个数;
一阶张量为向量(vector),也就是 一维数组;
n n 阶张量可以理解为一个 n 维数组;
• 张量并没有真正保存数字,它保存的是计算过程

张量的属性

1
Tensor("Add:0", shape=(), dtype=float32)

名字( name )
“node:src_output”:node 节点名称,src_output 来自节点的第几个输出
形状( shape )
张量的维度信息, shape=() ,表示是标量
类型( type )
每一个张量会有一个唯一的类型
TensorFlow会对参与运算的所有张量进行类型的检查,发现类型不匹配时会报错

张量的形状

三个术语描述张量的维度: 阶(rank)、 形状(shape) 、 维数(dimension number)
shape

1
2
3
4
5
tens1 = tf.constant([[[1,2,2],[2,2,3]],
[[3,5,6],[5,4,3]],
[[7,0,1],[9,1,9]],
[[11,12,7],[1,3,14]]],name = 'tens1')
print(tens1)
1
2
3
4
5
6
7
8
9
scalar = tf.constant(100)
vector = tf.constant([1,2,3,4,5])
matrix = tf.constant([[1,2,3],[4,5,6]])
cube_matrix = tf.constant([[[1],[2],[3]],[[4],[5],[6]],[[7],[8],[9]]])

print(scalar.get_shape())
print(vector.get_shape())
print(matrix.get_shape())
print(cube_matrix.get_shape())

rank

(数组下标从0开始)

张量的类型

TensorFlow支持14种不同的类型
实数 tf.float32, tf.float64
整数 tf.int8, tf.int16, tf.int32, tf.int64, tf.uint8
布尔 tf.bool
复数 tf.complex64, tf.complex128
张量的类型
默认类型:
不带小数点的数会被默认为int32
带小数点的会被默认为float32

操作

计算图中的 节点就是 操作(Operation)
• 一次加法是一个操作
• 一次乘法也是一个操作
• 构建一些变量的初始值也是一个操作
• 每个运算操作都有 属性,它在构建图的时候需要确定下来
• 操作可以和计算 设备绑定,指定操作在某个设备上执行
• 操作之间存在顺序关系,这些操作之间的 依赖就是“ 边”
• 如果操作A的输入是操作B执行的结果,那么这个操作A就依赖于操作B

1
2
3
4
5
6
7
8
9
10
11
tf.reset_default_graph()

a = tf.Variable(1,name = "a")
b = tf.add(a,1,name = "b")
c = tf.multiply(b,4,name = "c")
d = tf.subtract(c,b,name = "d")

logdir = 'E:\log'

writer = tf.summary.FileWriter(logdir,tf.get_default_graph())
writer.close()

TensorFlow的基本运算

会话

会话1

1
2
3
4
5
6
7
8
tens1 = tf.constant([1,2,3])
sess = tf.Session()
try:
print(sess.run(tens1))
except:
print('Exception!')
finally:
sess.close()

会话2
1
2
with tf.Session() as sess:
print(sess.run(tens1))

在交互式环境下,Python脚本或者Jupyter编辑器下,通过设置默认会话来获取张量的取值更加方便
tf.InteractiveSession 使用这个函数会自动将生成的会话注册为默认会话

常量和变量

常量

在运行过程中值不会改变的单元,在TensorFlow中无须进行初始化操作
创建语句:

1
constant_ name = tf.constant(value)

变量

在运行过程中值会改变的单元,在TensorFlow中须进行初始化操作
创建语句:

1
name_variable = tf.Variable(value, name)

个别变量初始化:
1
init_op = name_variable.initializer()

所有变量初始化:
1
init_op = tf.global_variables_initializer()

变量的赋值

变量更新语句:

1
update_op = tf.assign(variable_to_be_updated, new_value)

占位符

TensorFlow中的 Variable 变量类型,在定义时需要初始化,但有些变量定义时并不知道其数值,只有当真正开始运行程序时,才由外部输入,比如训练数据,这时候需要用到占位符
tf.placeholder 占位符,是TensorFlow中特有的一种数据结构,类似动态变量,函数的参数、或者C语言或者Python语言中格式化输出时的“%”占位符

TensorFlow占位符Placeholder,先定义一种数据,其参数为数据的Type和Shape
占位符Placeholder的函数接口如下:

1
tf.placeholder(dtype, shape=None, name=None)

Feed提交数据和Fetch提取数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
a = tf.placeholder(tf.float32,name='a')
b = tf.placeholder(tf.float32,name='b')
c = tf.multiply(a,b,name = "c")
d = tf.subtract(a,b,name = "d")

init = tf.global_variables_initializer()

with tf.Session() as sess:
sess.run(init)

result = sess.run([c,d],feed_dict={a:[8.0,2.0,3.5],b:[1.5,2.0,4.0]})

print(result)

print(result[0])

TensorBoard可视化初步

• TensorBoard是TensorFlow的可视化工具
• 通过TensorFlow程序运行过程中输出的日志文件可视化TensorFlow程序
的运行状态
• TensorBoard和TensorFlow程序跑在不同的进程中
TensorBoard不需要额外安装,在TensorFlow安装时已自动完成
在 Anaconda Prompt中先进入日志存放的目录( 非常重要!!!)
再运行TensorBoard,并将日志的地址指向程序日志输出的地址
命令:

1
tensorboard --logdir=/path/log

API
TEST