【学习篇】TensorFlow框架的学习

前言:开始学习TensorFlow框架,以下概念表述均来自网络,仅供自己理解和学习。

1.Tensorflow 介绍

TensorFlow教程:TensorFlow快速入门教程(非常详细)

TensorFlow模型的理解

1.1Tensorflow的安装

网上有很多的Tensorflow安装教程,我也写了一篇《win7 64位 安装tensorflow》,链接地址:https://blog.csdn.net/Logintern09/article/details/105825437

如果已安装了 TensorFlow,则可以调用 pip install --upgrade tensorflow 进行升级。

1.2Tensorflow的特征

TensorFlow入门极简教程(一),链接地址:https://www.jianshu.com/p/4665d6803bcf

上面的文章告诉我:TensorFlow 不是一个严格的“神经网络”库。只要你可以将你的计算表示为一个数据流图,你就可以使用Tensorflow。在Google,科学家用Tensorflow尝试新的算法,产品团队则用Tensorflow来训练和使用计算模型,并直接提供给在线用户。使用Tensorflow可以让应用型研究者将想法迅速运用到产品中,也可以让学术性研究者更直接地彼此分享代码,从而提高科研产出率。

1.3TensorFlow中最重要的几个基本概念

TensorFlow框架介绍,链接地址:https://www.cnblogs.com/kongweisi/p/11038395.html

简单地说,tf框架中,代码的执行都要在会话中进行,而这里所说的图往往指的都是默认图,不需要我们去指定。因此我们只要开启会话,(在默认图中)执行代码即可,代码所执行的操作,我们称之op,即节点。

1.3.1 Graph图

计算图模型,链接地址:https://zhuanlan.zhihu.com/p/35226768

Tensorflow是一种计算图模型,即用图的形式来表示运算过程的一种模型。Tensorflow程序一般分为图的构建和图的执行两个阶段。图的构建阶段也称为图的定义阶段,该过程会在图模型中定义所需的运算,每次运算的的结果以及原始的输入数据都可称为一个节点(operation ,缩写为op)。

图包含了一组tf.Operation代表计算单元的对象和tf.Tensor代表计算单元之间流动的数据。

为什么Tensorflow要使用图模型?图模型有什么优势呢?

首先,图模型的最大好处是节约系统开销,提高资源的利用率,可以更加高效的进行运算。因为我们在图的执行阶段,只需要运行我们需要的op,这样就大大的提高了资源的利用率;其次,这种结构有利于我们提取中间某些节点的结果,方便以后利用中间的节点去进行其它运算;还有就是这种结构对分布式运算更加友好,运算的过程可以分配给多个CPU或是GPU同时进行,提高运算效率;最后,因为图模型把运算分解成了很多个子环节,所以这种结构也让我们的求导变得更加方便。

Tensorflow框架实现中的“三”种图,连接地址:https://zhuanlan.zhihu.com/p/31308381
图(graph)是 tensorflow 用于表达计算任务的一个核心概念。从前端(python)描述神经网络的结构,到后端在多机和分布式系统上部署,到底层 Device(CPU、GPU、TPU)上运行,都是基于图来完成。

1.3.2 Tensor张量

【学习篇】TensorFlow框架的学习_第1张图片
节点之间的边就是张量,是一个 n 维数组, 类型为tf.Tensor。Tensor具有以下两个重要的属性:(1)type:数据类型;(2)shape:形状(阶)。

1.3.3 Session会话

TensorFlow框架之会话,链接地址:https://www.cnblogs.com/kongweisi/p/11038550.html

应用sess.run或者eval运行图程序并获取张量值
应用feed_dict机制实现运行时填充数据
Placeholder:占位符。这是一个在定义时不需要赋值,但在使用之前必须赋值(feed)的变量,通常用作训练数据。

在运行图时,需要为所有的变量和占位符赋值,否则就会报错。会话的主要任务是在图运算时分配CPU或GPU。tf.Session 对象使用分布式 TensorFlow 运行时提供对本地计算机中的设备和远程设备的访问权限。

1.3.4 Variable变量

TensorFlow常量、变量和占位符详解

Variable:变量,它和占位符的不同是它在定义时需要赋值,而且它的数值是可以在图的计算过程中随时改变的。因此,占位符通常用作图的输入(即训练数据),而变量用作图中可以被“训练”或“学习”的那些tensor,例如y=ax+b中的a和b。

2.Tensorflow 使用

我们所说的“训练”,也就是不停的计算一个图,获得图的计算结果,再根据结果的值调整节点变量的值,然后根据新的变量的值再重新计算图,如此重复,直到结果令人满意(小于某个阈值),或跑到了一个无穷大/小(这说明图的变量初始值设置的有问题),或者结果基本不变了为止。

TensorFlow实现反向传播算法详解

2.1常用函数

Tensorflow常用函数使用说明及实例简记

Tensorflow一些常用基本概念与函数

Tensorflow常用函数

2.1.1 tensor构造函数

【学习篇】TensorFlow框架的学习_第2张图片
【学习篇】TensorFlow框架的学习_第3张图片

2.1.2 比较函数

原文:对于tensor特定值进行逻辑判断和操作

#判断每一个数是否大于threshold
greater = tf.greater(x, threshold)
#判断每一个数是否小于threshold
less = tf.less(x,threshold)
#判断每一个数是否大于等于threshold
greater_equal=tf.greater_equal(x, threshold)
#判断每一个数是否小于等于threshold
less_equal=tf.less_equal(x, threshold)
#判断每一个数是否等于threshold
equal = tf.equal(x, threshold)
#判断每一个数是否不等于threshold
not_equal=tf.not_equal(x, threshold)

这些比较函数会输出bool类型的tensor,那么就可以配合tf.where来使用

tf.where(
    condition,
    x=None,
    y=None,
    name=None

x中为true的元素值不变,false的元素值替换为y中对应位置的值,因此,x,y是同一shape的
实践小栗子:

#将小于等于threshold的值替换为0
greater = tf.greater(x, threshold)
output = tf.where(greater,x,tf.subtract(x,x))
with tf.Session() as sess:
  feed_dict={x:[1,2,3,4,5],threshold:3}
  print(sess.run(output,feed_dict=feed_dict))

output: [0 0 0 4 5]

tf.gather_nd允许在多维上进行索引,得到新的向量
比如,想要获得大于0的元素的集合

idxs =  tf.where(x>0)
output = tf.gather_nd(idxs)

2.1.3 数据类型转换

原文:tf.cast()数据类型转换

tf.cast()函数的作用是执行 tensorflow 中张量数据类型转换,比如读入的图片如果是int8类型的,一般在要在训练前把图像的数据格式转换为float32。
【学习篇】TensorFlow框架的学习_第4张图片
int32转换为float32:


import tensorflow as tf
 
t1 = tf.Variable([1,2,3,4,5])
t2 = tf.cast(t1,dtype=tf.float32)
 
print 't1: {}'.format(t1)
print 't2: {}'.format(t2)
 
with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    sess.run(t2)
    print t2.eval()

输出:

t1: <tf.Variable 'Variable:0' shape=(5,) dtype=int32_ref>
t2: Tensor("Cast:0", shape=(5,), dtype=float32)
[ 1.  2.  3.  4.  5.]

【学习篇】TensorFlow框架的学习_第5张图片

2.1.4 序列比较与索引提取

【学习篇】TensorFlow框架的学习_第6张图片

2.2从模型文件中加载训练好的模型

Tensorflow中保存模型时生成的各种文件区别和作用

tensorflow模型的格式通常支持多种,主要有CheckPoint(.ckpt)、GraphDef(.pb)、SavedModel。

ckpt存储参数值

pbtxt存储网络图

pb既存储参数值又存储网络图

graph.pbtxt: 这其实是一个文本文件,保存了模型的结构信息,部分信息如下所示:

    node_def {
      name: "FixedLengthRecordDataset/input_pipeline_task10/buffer_size"
      op: "Const"
      device: "/job:worker/task:10/device:CPU:0"
      attr {
        key: "dtype"
        value {
          type: DT_INT64
        }
      }
      attr {
        key: "value"
        value {
          tensor {
            dtype: DT_INT64
            tensor_shape {
            }
            int64_val: 262144
          }
        }
      }
    }
    node_def {
      name: "FixedLengthRecordDataset"
      op: "FixedLengthRecordDataset"
      input: "FixedLengthRecordDataset/input_pipeline_task10/filenames:output:0"
      input: "FixedLengthRecordDataset/input_pipeline_task10/header_bytes:output:0"
      input: "FixedLengthRecordDataset/input_pipeline_task10/record_bytes:output:0"
      input: "FixedLengthRecordDataset/input_pipeline_task10/footer_bytes:output:0"
      input: "FixedLengthRecordDataset/input_pipeline_task10/buffer_size:output:0"
      device: "/job:worker/task:10/device:CPU:0"
    }
	...

你可能感兴趣的:(【学习篇】TensorFlow框架的学习)