【Tensorflow】Tensorflow基础知识

Tensorflow简介

\quad\quad 在我们使用以统计方法为核心的机器学习方法的时候,重要的是做特征工程,然后调一些参数,根据一些领域的经验来不断提取特征,特征的好坏往往决定模型的好坏。

\quad\quad 而深度学习不需要我们过多的提取特征,在神经网络的每一层,计算机都可以自动学习特征,为了实现深度学习中应用神经网络,Tensorflow这样的深度学习开源工具就应运而生。我们可以使用它来搭建自己的神经网络。

Tensorflow的优点:

  • 支持异构设备分布式计算(使用CPU、GPU等核心进行有效地协同合作,提高性能,降低功耗)
  • Tensorflow支持卷积神经网络(CNN)、循环神经网络(RNN)、长短型记忆网络(LSTM),这些都是目前在计算机视觉、语音识别、自然语言处理方面最流行的神经网络模型
  • Tensor库是对CPU/GPU透明的,并且实现了很多操作(如切片、数组或矩阵操作等)
  • 有一个完全独立的代码库,用脚本语言(最理想的是python)来操作Tensors,并且实现所有深度学习的内容,包括前向传播、反向传播、图形计算等
  • 可以轻松地共享预训练模型
  • 没有编译过程
  • 六大特性:高度的灵活性、真正的可移植性、将科研和产品结合在一起、自动求微分、多语言支持、最优化性能

Tensorflow的安装

  • Windows10下:
  • 安装python(这里默认安装好了)
  • CPU版本的安装:cmd 输入 pip install tensorflow
  • pip install tensorflow==1.9.0也可指定版本
  • GPU版本的安装:

注意:自己的机器需要支持安装GPU版本,需要有NVIDIA的显卡,可百度查询。
需要下载安装两个驱动:CUDA和CuDNN(需要注意这两个驱动的版本对应)

我这里安装了GPU1.9.0版本、CUDA 9.0,是在anaconda环境中的:
【Tensorflow】Tensorflow基础知识_第1张图片
【Tensorflow】Tensorflow基础知识_第2张图片

  • 测试下:
import tensorflow as tf

# 创建图
a = tf.constant(10)
b = tf.constant(15)
# 创建会话
sess = tf.Session()
# 执行会话
print(sess.run(a + b))   # 输出25

系统架构

【Tensorflow】Tensorflow基础知识_第3张图片

\quad\quad 如图所示,自底向上分为设备层和网络层、数据操作层、图计算层、API层、应用层,其中设备层和网络层、数据操作层、图计算层是Tensorflow的核心层。

  • 网络通信层和设备管理层

网络通信层包括gRPC和远程直接数据存取RDMA,这都是分布式计算时要用的
设备管理层包括CPU、GPU和FRGA等,也就是对上层提供一个统一的接口,使上层只需处理卷积等逻辑,而不需要关心在硬件上的卷积的实现过程。

  • 数据操作层

主要包括卷积函数和激活函数

  • 图计算层

这是我们需要了解的核心,包含本地计算图和分布式计算图
图的创建、编译、优化和执行

  • API层和应用层

常用API的Python实现以及一些其他语言的实现
调用API层对深度学习各种模型的实现

设计理念

  • 将图的定义和图的运行完全分开;

  • Tensorflow中涉及的运算都要放在图中,而图的运行只发生在会话中。

开启会话后,就可以直接用数据去填充节点,进行运算。关闭会话后,就不能进行计算了
因此会话提供了操作运行和Tensor求值的环境

import tensorflow as tf

# 创建图
a = tf.constant([1.0, 2.0])
b = tf.constant([3.0, 4.0])
c = a * b

print(c)
输出为:Tensor("mul:0", shape=(2,), dtype=float32)

可以看出,输出中并没有结果

# 创建会话
sess = tf.Session()
# 计算
print(sess.run(c)) # 进行矩阵乘法
# 关闭会话
sess.close()
输出为:[3. 8.]

编程模型

\quad\quad Tensorflow是用数据流图做计算的,因此我们先创建一个数据流图,分析数据流图中的各个要素。

【Tensorflow】Tensorflow基础知识_第4张图片

图中包含:输入(input)、塑形(reshape)、ReLu层(ReLu Layer)、Logit层(Logit Layer)、Softmax、交叉熵(cross entropy)、梯度(gradient)、SGD训练(SGD Trainer)等部分,是一个简单的回归模型

  • 计算过程:

首先从输入开始,经过塑形后,一层一层进行前向传播运算。
ReLu层(隐藏层)里面有两个参数,即 W h 1 W_{h_1} Wh1 b h 1 b_{h1} bh1 ,在输出前使用ReLu激活函数做非线性处理;
然后进入Logit层(输出层),学习两个参数 W s m W_{sm} Wsm b s m b_{sm} bsm,用Softmax来计算输出结果中的各个类别的概率分布,用交叉熵来度量两个概率分布之间的相似性
然后开始计算梯度,这里需要更新参数 W h 1 W_{h_1} Wh1 b h 1 b_{h1} bh1 W s m W_{sm} Wsm b s m b_{sm} bsm,以及交叉熵后的结果
随后进入SGD训练,也就是反向传播的过程,从上往下计算每一层的参数,依次进行更新

Tensorflow的数据流图由节点组成的有向无环图,Tensor(张量)代表了数据流图中的边,Flow(流动)代表了数据流图中节点所要做的操作。


  • Tensorflow的边有两个连接关系:数据依赖和控制依赖;

数据依赖用实线边表示,即张量,在机器学习算法中,张量在数据流图中从前向后流动一遍完成一次前向传播,而残差从后向前流动一遍完成一次反向传播;
\quad
控制依赖用虚线边表示,可以用于控制操作的运行,这类边上没有数据流过,但是源节点必须在目的节点开始执行前完成执行。

Tensorflow支持的张量:

数据类型 Python类型 描述
DT_FLOAT tf.float32 32位浮点型
DT_DOUBLE tf.float64 64位浮点型
DT_INT64 tf.int64 64位有符号整型
DT_INT32 tf.int32 32位有符号整型
DT_INT16 tf.int16 16位有符号整型
DT_INT8 tf.int8 8位有符号整型
DT_UNIT8 tf.unit8 8位无符号整型
DT_STRING tf.string 可变长度的字节数组,每一个张量元素是一个字节数组
DT_BOOL tf.bool 布尔型
DT_COMPLEX64 tf.complex64 由两个32位浮点数组成的复数:实部和虚部
DT_QINT32 tf.qint32 用于量化操作的32 位有符号整型
DT_QINT8 tf.qint8 用于量化操作的8 位有符号整型
DT_QUINT8 tf.quint8 用于量化操作的8 位无符号整型
  • 节点
    图中的节点代表一个操作(operation,OP),一般用来表示施加的数学运算,也可以表示数据输入(feed in)的起点以及输出(push out)的终点,或者是读取/写入持久变量(persistent variable)的终点。

Tensorflow支持的操作:

类别 示例
数学运算操作 Add、Subtract、Multiply、Div、Exp、Log、Greater、Less、Equal …
数组运算操作 Concat、Slice、Split、Constant、Rank、Shape、Shuffle …
矩阵运算操作 MatMul、MatrixInverse、MatrixDeterminant …
有状态的操作 Variable、Assign、AssignAdd …
神经网络构建操作 SoftMax、Sigmoid、ReLU、Convolution2D、MaxPool …
检查点操作 Save、Restore
队列和同步操作 Enqueue、Dequeue、MutexAcquire、MutexRelease …
控制张量流动的操作 Merge、Switch、Enter、Leave、NextIteration

你可能感兴趣的:(Tensorflow)