TensorFlow初探:了解TensorFlow的基本概念和功能

本文从以下三个方面,展开对TensorFlow的剖析:

  • TensorFlow框架概述
  • TensorFlow基本操作
  • TensorBoard使用



TensorFlow框架概述

2015年11月9日,为加速深度学习的发展,Google发布了深度学习框架TensorFlow,经过几年的发展,TensorFlow成为了最流行的深度学习框架。

TensorFlow从名字上解释就是Tensor(张量)+Flow(流)。什么是张量呢?张量是矢量概念的推广,可以表示任意维度的数据,如一维数组,二维矩阵,N维数据。TensorFlow的运行过程实质就是张量从图的一端流动到另一端的计算过程。下文简单阐述TensorFlow的一些基本概念。



深度学习框架分为“动态计算图”和“静态计算图”,支持动态计算图的被称为动态框架,支持静态计算图的被称为静态框架。

静态框架:先定义计算执行顺序和内存分配策略,然后按照规定的计算顺序和资源进行计算。打个比方,在盖大楼的时候,静态框架就好比设计师团队与施工团队分离,设计师设计好图纸之后,施工团队才开始按照图纸方案进行施工。

动态框架:声明和执行一起执行。类似于设计师和施工团队一块儿工作,设计师说先“打地基”,施工团队就开始施工打地基。

TensorFlow支持静态和动态两种方式,一般TensorFlow程序分为两个阶段,图的构建阶段和图的执行阶段。


  • 操作

图中节点就是一个操作,比如,一次加法运算就是一个操作,构建变量的初始值也是一个操作。构建图的过程中,需要把所有操作确定下来,比如指定操作在哪台设备上执行。一些基本操作如下所示:

登录后复制

1#定义变量a操作2a = tf.Variable(1.0, name="a")3#定义操作b=a+14b = tf.add(a, 1, name="b")5
#定义操作c=b+16c = tf.add(b, 1, name="c")7#定义操作d=b+108d = tf.add(b, 10, name="d")

操作之间存在依赖关系,这种依赖被称为边,操作与边相连接就构成了一张图,如图1所示:



  • 会话

TensorFlow的计算需要在会话中执行,当创建一个会话时,如果没有传递参数,会启动默认的图来构造图结构,并将图中定义的操作根据定义情况分发到CPU或者GPU上执行。

登录后复制


 1import tensorflow as tf 2#定义常量 3v1 = tf.constant(1, name="value1") 4v2 = tf.constant(1, name="value2") 5
 #v1+v2 6add_op = tf.add(v1, v2, name="add_op_name") 7
 #创建会话 8with tf.Session() as sess: 9  result = sess.run(add_op)10  print("1 + 1 = %.0f" % result)
 
 

TensorFlow基本操作

  • 定义常量、变量和占位符

定义常量:a = tf.constant(1, name="value1")

定义变量:v2 = tf.Variable(0.01,name=”weight2”)

   注意:变量需要经过初始化之后才能使用,常量不需要

定义占位符:v3 = tf.placeholder("float")



登录后复制

 1import  tensorflow  as  tf 2#定义常量 3a = tf.constant(1, name="value1") 4
 #定义变量 5v1 = tf.Variable(0.001) 6v2 = tf.Variable(v1.initialized_value() * 2) 7
 #定义占位符 8v3 = tf.placeholder("float") 9v4 = tf.placeholder("float")10y = tf.mul(v3, v4) 
 #构造一个op节点1112init = tf.global_variables_initializer()13with tf.Session() as sess:14  
 #变量初始化15sess.run(init)16  print("v1 is:")17  print(sess.run(v1))18  print("v2 is:")19  
 print(sess.run(v2))20#占位符操作21      print sess.run(y, feed_dict={v3: 3, v4: 3})
 
 



  • TensorFlow函数

笔者对TensorFlow中常用的函数进行了简单汇总,但是并不是非常全面,如果有需要,后续笔者会单独写一篇文章来详细的描述TensorFlow中函数的用法。

表1 TF常用函数汇总

  函数族函数介绍        常用函数
Math数学函数add(加), sub(减), mul(乘), Div(除),mod(取模)、abs(取绝对值)、log(计算log)、sin(正弦)
Array数组操作concat(合并), slice(切片), Split(分割)
Matrix矩阵操作diag(返回一个只有对角线的矩阵)、matul(矩阵相乘), matrix_inverse(求逆矩阵), matrix_determinant(求行列式)
Activation Functions激活函数relu、relu6、sigmoid、tanh、dropout
Convolution卷积函数conv2d、conv3d
Pooling池化函数avg_pool(平均池化)、max_pool、max_pool_with_argmax、avg_pool3d、max_pool3d
Normalization数据标准化l2_normalize(2范数标准化)、normalize_moments(均值方差归一化)
Losses损失函数l2_loss(误差平方和)
Classification分类函数sigmoid_cross_entropy_with_logits(交叉熵)、softmax、log_softmax、softmax_cross_entropy_with_logits
Recurrent Neural Networks循环神经网络rnn、bidirectional_rnn(双向rnn)、state_saving_rnn(可存储调用状态rnn)
Checkpointing模型保存与加载save(存储), restore(装载)


TensorBoard使用

当训练一个复杂的神经网络时候,经常会根据情况调整网络结构。比如,在训练过程中根据训练集和验证集的准确率,来判断是否存在过拟合,或者查看训练过程中损失函数。一般可以将这些数据打印到日志文件,但是当信息比较多的时候,直接看日志文件不直观。为了更好的理解、调试和优化网络,TensorFlow提供了一套数据可视化工具TensorBoard。

下边举一个例子来演示一下如何收集训练过程中的数据,并且利用TensorBoard将数据展示出来。本例中要进行线性拟合,拟合的函数大致为初识TensorFlow_java,但2和10事先不知道,通过训练得到。训练的完整代码如下:

登录后复制

 1#coding=utf-8 2import numpy as np 3import tensorflow as tf 4 5
 # 构建图 6x = tf.placeholder(tf.float32) 7y = tf.placeholder(tf.float32) 8weight = tf
 .get_variable("weight", [], tf.float32, initializer=tf.random_normal_initializer()) 9biase  = tf
 .get_variable("biase", [], tf.float32, initializer=tf.random_normal_initializer())10pred = tf
 .add(tf.multiply(x, weight, name="mul_op"), biase, name="add_op")1112#损失函数13loss = tf
 .square(y - pred, name="loss")14#优化函数15optimizer = tf.train.GradientDescentOptimizer(0.01)16
 #计算梯度,应用梯度操作17grads_and_vars = optimizer.compute_gradients(loss)18train_op = optimizer
 .apply_gradients(grads_and_vars)1920#收集值的操作21tf.summary.scalar("weight", weight)22tf.summary
 .scalar("biase", biase)23tf.summary.scalar("loss", loss[0])2425merged_summary = tf.summary
 .merge_all()2627summary_writer = tf.summary.FileWriter('./log_graph' )28summary_writer
 .add_graph(tf.get_default_graph())29init_op = tf.global_variables_initializer()3031with tf
 .Session() as sess:32    sess.run(init_op)33    for step in range(500):34        
 train_x = np.random.randn(1)35        train_y = 2 * train_x + np.random.randn(1) * 0.01  + 1036        _, 
 summary = sess.run([train_op, merged_summary], feed_dict={x:train_x, y:train_y})37        
 summary_writer.add_summary(summary, step)
 
 

执行代码之后,会将日志文件写入log_graph文件夹下,执行如下命令运行TensorBoard:

登录后复制

1tensorboard --logdir=./log_graph


免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空