tensorflow

一.简介

1.tensorflow (tensor+flow)(张量+流动):维度(dimension number)(秩)(Rank)为0、1、2时分别称为标量(数字)(scalar)、向量(vector)(一维数组)和矩阵(二维数组),维度为3时是3阶张量,维度大于3时是N阶张量。张量(数据结构:多维数组)本质是数据,所以tensorflow是用来处理数据(张量)流动的框架,尤其多维张量,较多涉及机器学习和深度学习等。流:计算模型:张量之间通过计算而转换的过程

2.tensorflow利用了数据流图,(数据流图用“结点”(nodes)和“线”(edges)的有向图来描述数学计算),所以tensorflow包括 数据(Data)、流(Flow)、图(Graph)三大部分。

3.Tensorflow架构分为三个部分:预处理数据、tensor建立模型、训练和评估模型。

4.TensorBoard可以图形化和直观地监控TensorFlow正在做什么。

5.使用图(Graph)表示计算流程,在会话(Session)中执行图,使用张量(Tensor)表示数据,使用变量(Variable)维护状态,使用feed和fetch为任意的操作赋值或从中获取数据

6.运行过程:(1)创建或导入数据,(2)创建图(结构):一个计算任务中的所有变量和计算方式、、、

7.它是开放源代码软件库,用于高性能数值计算,将计算工作部署到多种平台GPU,CPU等设备()

 

二.构建计算图并执行

1.计算图(相当于数据流图):计算图上每个节点为一个张量对象(操作或张量),节点之间的边表示计算之间的关系(即数据传递)(实线–数据流动,虚线–控制依赖)。边是有方向的,表明运行的顺序

2.计算图的构建包括节点和边。

(1)节点可以有0个或多个输出,但只能有一个输出。包括:常量、变量、占位符;

(2)边表示运算操作之间流动的张量

(3)计算图的执行要通过session会话对象。

常量

 1 import tensorflow as tf  # 导入包
 2 
 3 # 定义常量,它将作为一个节点加入到默认计算图内,它运行时值不会改变,无需初始化
 4 # 1.定义的常量可以是字符串,数字,张量...
 5 t_1 = tf.constant(\'常量\')
 6 t_2 = tf.constant([4, 3, 2])
 7 t_3 = tf.constant(4)
 8 
 9 # 2.属性name可选,建议写(tensorboard可视化),类型dtype=None, 形状shape=None
10 ten1 = tf.constant([[1,2,3],[2,4,5]], dtype=tf.float16, shape=[3,2],name=\'tens1\')
11 
12 # 3.可以创建特殊常量(张量对象),类似numpy创建数组
13 t_4 = tf.zeros([3,2],tf.int32)  # 创建一个所有元素为零的张量
14 t_5 = tf.ones([2,5],tf.int32)  # 创建一个所有元素都设为 1 的张量
15 t_6 = tf.linspace(2.0,5.0,5)  # 等差序列
16 t_7 = tf.range(10)  # 生成一个数字序列
17 t_8 = tf.random_normal([2, 3])  # 创建一个正态分布随机数组
18 t_9 = tf.random_crop(t_8,[2,5],seed=12)  # 将给定的张量随机裁剪为指定的大小
19 t_10 = tf.random_shuffle(t_8)  # 以随机的顺序来呈现训练样本
20 tf.set_random_seed(54)  # 为所有随机产生的张量设置种子
21 
22 # 上下文管理,建立对话(session)并显示运行(run)结果,并关闭会话(session),释放资源
23 with tf.Session() as sess:
24     print(t_2)  # 一个张量对象
25     print(sess.run(t_2))  # 运行张量对象并获取值
26     print(t_2.eval())  # 获取张量值,
27 ---------------------------------------------------------
28 [4 3 2]
29 [4 3 2]

常量

 

变量

 1 import tensorflow as tf
 2 # Varial(value,name)变量,运行过程中会改变,创建时必须有显示初始化的常量/随机值
 3 
 4 # 变量要有初始化操作,变量通常在神经网络中表示权重和偏置
 5 t_1 = tf.Variable(2, name=\'w1\')  # 创建变量(值,类型,名称)
 6 t_2 = tf.Variable(4, name=\'w2\')
 7 t_3 = tf.assign(t_1, t_2)  # assign更新节点,替代赋值,
 8 # init_op = t_1.initializer()  # 个别变量初始化
 9 
10 with tf.Session() as sess:
11     init = tf.global_variables_initializer()  # 在它之前所有变量初始化,本质是一个操作静态节点
12     sess.run(init)  # 必须运行(初始化变量)这个操作
13     print(sess.run(t_1))
14     print(sess.run(t_2))
15     print(sess.run(t_3))
16 ---------------------------------------------------
17 2
18 4
19 4

变量

 

占位符

 1 # 占位符 placeholder ,有些变量定义时不知道其值,只有真正开始运行程序时才由外部输入,比如训练数据,这时候需要占位符
 2 # tf.placeholder(dtype,shape=None,name=None) 类似动态变量,函数的参数或c、python中格式化输出时的%占位符
 3 # feed提交数据,Fetch提取数据
 4 import tensorflow as tf
 5 
 6 a = tf.placeholder(tf.float32, name=\'A\')  # 占位符,无需初始化,但运行时需feed_dict字典传参
 7 b = tf.placeholder(tf.float32, name=\'B\')
 8 c = tf.multiply(a, b, name=\'C\')
 9 d= tf.subtract(a, b, name=\'D\')
10 
11 init = tf.global_variables_initializer()
12 
13 with tf.Session() as sess:
14     sess.run(init)
15     result = sess.run(c, feed_dict={a: 8.0, b: 3.5})  # feed_dict字典格式参数传值
16     result2 = sess.run([c,d], feed_dict={a: [8.0,2.0,6.3], b: [6.2,3.2,3.5]})  # 返回值类似列表
17     # 多个操作可以通过一次feed完成执行
18     print(result2[0])  # 取第一个c
19 -------------------------------------------
20 [49.6       6.4      22.050001]

占位符

会话:拥有并管理tensorflow程序运行时的所有资源,当计算完成时需要关闭会话帮助系统回收资源

 1 #会话,Tensorflow不会自动生成默认的会话,需要手动指定
 2 import tensorflow as tf
 3 tf.reset_default_graph()  # reset_default_graph() 清除计算图default graph 和不断增加的节点
 4 value = tf.Variable(0, name=\'value\',trainable=False)  #无需参加训练
 5 sess = tf.Session()
 6 with sess.as_default(): #指定默认会话,则可以通过tf.Tensor.eval函数来计算一个张量的取值
 7     print(value.eval())  #eval必须要有默认会话,若上面没有指定则print(re.eval(session=sess)) 
 8     
 9 # 2.在交互式环境下设置默认会话
10 sess = tf.InteractiveSession()  # 自动地将生成的会话注册为默认会话
11 print(value.eval())
12 sess.close()

会话

 (4)其他

shape(a,b,c,…)#a最外围元素个数,b次外围元素个数,   

 .get_shape()获得张量的结构

dtype类型(14):默认:不带小数点会被认为int32,带小数点会被认为float32

 

三.可视化tensorboard

利用日志

 1 #tensorboard 是 tensorflow的可视化工具
 2 # 通过tensorflow程序运行过程中输出的日志文件可视化tensorflow程序的运行转台
 3 # tb和tf程序跑在不同的进程中
 4 # 1.定义日志存放路径
 5 import tensorflow as tf
 6 tf.reset_default_graph()  # 清除计算图default graph 和不断增加的节点
 7 logdir = \'E:\python_work\machine_learning\tensflow_learning\'  # 存放日志的路径
 8 
 9 # 构建一个计算图,定义要显示的信息
10 value = tf.Variable(0, name=\'value\')
11 one = tf.constant(1)
12 new_value = tf.add(value, one)
13 updata_value = tf.assign(value, new_value)  # 更新节点,替代赋值
14 # 创建一个操作,用于记录损失值loss,后面在tensorboard中scalars中可见
15 # sum_loss_op = tf.summary.scalar(\'loss\',loss_function)
16 # tf.summary.image(\'input\',image,10) #输入的样本图像加入summary
17 # tf.summary.histogram(\'forward\',forward),前向输出值在以直方图显示
18 # tf.summary.scalar(\'loss\',loss_function) 将loss损失以标量显示
19 # tf.summary.scalar(\'accuracy\',accuracy) 将accuracy以标量显示
20 init = tf.global_variables_initializer()  # 变量初始化
21 
22 with tf.Session() as sess:
23     sess.run(init)  # 执行初始化操作
24     for _ in range(10):
25         sess.run(updata_value)
26         print(sess.run(value))
27         
28 #构建结束
29 
30 # 3.生成一个写日志的writer,并将当前的Tensorflow计算图写入日志
31 merged_summary_op = tf.summary.merge_all() #合并所有summary
32 writer = tf.summary.FileWriter(logdir,tf.get_default_graph())
33 writer.close()
34 
35 # 4.利用存储的日志启动tensorboard
36 # 在anaconda prompt中先进入日志存放的目录(重要)
37 # 在运行tensorboard ,并将日志的地址指向程序日志输出的地址
38 # 命令:tensorboard --logdir=/path/log
39 # 启动服务的端口默认为6006;使用--port参数可以改变启动服务的端口
40 #最后浏览器查看

可视化

 

四.CPU和GPU

GPU:优先考虑,计算密集型的程序,易于并行的程序,速度快

CPU:适合矩阵运算,神经网络的处理过程正好适合GPU发挥性能

Related Posts

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注