0.数据的基本形式
- 标量:数值形式
- 向量:一维标量
- 矩阵:二维标量
- 张量:多维标量
1.什么是tensorflow?
- tensorflow是用于表示某种类型的计算抽象(计算图)的框架;
- tensor:N维矩阵;
- flow:基于数据流图的计算;
- tensorflow:张量从图的一端流到另一端;
2.为什么要使用tensorflow?
- 网络训练过程:在训练中,需要连续的将多批新数据输入网络,计算网络输出,根据代价函数统计误差,对参数求导来更新网络;
- 问题:①加入数据的规模较大;②频繁的求导运算;
- tensorflow优点:①分布式计算解决规模问题;②函数对于tensor变量可以实现自动求导,从而解决求导问题;
- 其他优点:①基于图的运算,在GPU上运行较快;②编译效率高;③生成网络拓扑结构 与可视化;④支持多种设备;
3.基本结构
(1)可以通过tensor、variable、operation等构造计算图;
(2)一个Session可以包含多个计算图;
4.基本概念
(1)计算图
一种全局数据结构,表示为有向图的形式,用于捕获有关计算的指令;
tf.Tensor对象:指向刚刚建立的节点的指针;
说明:计算图仅仅包含计算的步骤,不包含结果;
(2)会话
是什么?:包含一个指向全局图的指针,该指针指向所有的节点的指针可以不断变化,所以在创建节点之前或之后都可以创建会话;
作用:处理内存分配和优化,使得计算图指定的任务可以执行;
使用:sess.run(node)或sess.run([node1,node2...])
# 在实验中同时完成多个操作,减少系统开销
result,num1 = sess.run([sum1,num1])
尽量在一次中完成多个项目,避免重复调用,减少系统开销;
# coding=utf-8
# Session的两种启动方式(推荐方式1)
import tensorflow as tf
num1 = tf.constant(3) # 变量3
num2 = tf.constant(2) # 变量2
sum1 = tf.add(num1,num2) # 两数相加
print(sum1) # Tensor("Add:0", shape=(), dtype=int32)
# 方式1
with tf.Session() as sess:
result = sess.run(sum1)
print(result)
# 结果:5
# 方式2
sess = tf.Session()
result = sess.run(sum1)
print(result)
sess.close()
(3)占位符 与feed
占位符:是一种用于接受外部输入的节点;
使用:sess.run(node,feed_dict={name:value})#数据的输入以字典的形式,value可以为数值或numpy数组;
# coding=utf-8
#feed:实现值传入,并计算结果
import tensorflow as tf
#创建占位符
input1 = tf.placeholder(tf.float64)
input2 = tf.placeholder(tf.float64)
#两数相乘
result = tf.multiply(input1,input2)
with tf.Session() as sess:
#feed的数据以字典的形式传入
print(sess.run(result,feed_dict={input1:[2.],input2:[7.]}))
# 结果:[ 14.]
(4)计算路径
依赖于图中其他节点的运算值时,需要先调用sess.run()完成其他节点的计算;
仅仅通过必须的节点便可以自动进行计算;
(5)变量
- 变量创建:
#方式1 op1 = tf.Variable([[3,3]],name='op1') #方式2 v1 = tf.get_variable('v1', shape=[5], initializer=tf.constant_initializer())
- 变量的状态维持(tf.assign())
# coding=utf-8 ''' Variable实现计数器功能:通过循环和加法实现 ''' import tensorflow as tf #定义变量 state = tf.Variable(0,name='counter') #定义常量 count = tf.constant(1) #计算两数之和 new_state = tf.add(state,count) #将计算值更新(将new_state的值赋值给state) update = tf.assign(state,new_state) #存在变量时需要初始化 init = tf.initialize_all_variables() #Session启动计算任务 with tf.Session() as sess: sess.run(init)#Session初始化变量 for _ in range(3): sess.run(update) print(sess.run(state))
- 变量需要初始化
#方法1 init = tf.global_variables_initializer() #方法2 init = tf.initialize_all_variables()
5.应用注意
(1)如何将计算表示成图
(2)Session启动图运算
(3)数据-->tensors
(4)使用Variable来保持状态信息
(5)数据的填充与获取