Skip to content

Latest commit

 

History

History
178 lines (125 loc) · 7.24 KB

File metadata and controls

178 lines (125 loc) · 7.24 KB

Note

简介

一个使用数据流图(data flow graphs)技术来进行数值计算的开源软件库。

数据流图(Data Flow Graph)

数据流图是描述有向图中的数值计算过程。

概览

TensorFlow是一种将计算表示为图的编程系统。
图中的节点称为ops(operation的简称),既任务。
一个ops使用0个或以上的Tensors,通过执行某些运算,产生0个或以上的Tensors。
一个Tensor是一个多维数组,例如,你可以将一批图像表示为一个四维的数组[batch, height, width, channels],数组中的值均为浮点数。
TensorFlow中的图描述了计算过程,图通过Session的运行而执行计算。
Session将图的节点们(即ops)放置到计算设备(如CPUs和GPUs)上,然后通过方法执行它们;这些方法执行完成后,将返回tensors。

  • 在Python中的tensor的形式是numpy ndarray对象,而在C/C++中则是tensorflow::Tensor。
  • 将计算流程表示成图;
  • 通过Sessions来执行图计算;
  • 将数据表示为tensors;
  • 使用Variables来保持状态信息;
  • 分别使用feeds和fetches来填充数据和抓取任意的操作结果;

施工阶段

创建一个图来表示和训练神经网络;

执行阶段

在图中重复执行一系列的训练操作;


Session

会话持有并管理tensorflow程序运行时的所有资源;
PS:所有计算均要用session.run(...)方法执行;


Tensor

在Tensorflow中,所有的数据都通过张量的形式表示:

既指矩阵

< 不过要注意,因为在训练开始前,所有的数据都是抽象的概念,只有在训练过程开始后,才能获得a的实际值

TensorFlow中使用tensor数据结构(实际上就是一个多维数据)表示所有的数据,并在图计算中的节点之间传递数据;
1.零阶张量表示标量,即一个数;
2.一阶张量为向量,即一维数组;n阶张量理解为一个n维的数组;
3.但是张量不真正的保存数字,它保存的是如何得道这些数字的计算过程,即操作。

概要:

1.主要保存了三个重要属性(当然也具有其他属性):name、shape(张量维度)、type(张量类型); 2.name:张量的唯一标识符,同时可以看出他的计算方式,张量的命名形式:“node:src_output”;
node:节点名称
src_output:张量来自节点的第几个输出(从0开始编号)


Variable

变量:保存和更新网络中的参数,一般用来表示图中的各计算参数;

创建:tf.Variable()
与Tensor不同,Variable必须初始化以后才有具体的值。
使用tf.global_variables_initializer()初始化Variable后才可以run()。


placeholder

占位符,同样是一个抽象的概念

告诉系统:这里有一个值/向量/矩阵,现在我没法给你具体数值,不过我正式运行的时候会补上的;
例如x和y。因为没有具体数值,所以只要指定尺寸即可:

x = tf.placeholder(tf.float32,[1, 5],name='input') y = tf.placeholder(tf.float32,[None, 5],name='input')

不能直接运行placeholder


创建tf矩阵

1.tf.zeros
2.tf.ones
3.tf.fill
4.tf.constant


Fetches(抓取)

为了抓取ops的输出,需要先执行session的run函数,可通过print函数打印状态信息。
所有tensors的输出都是一次性 [连贯] 执行的。

Feeds(填充)

TensorFlow也提供这样的机制:先创建特定数据类型的占位符(placeholder),之后再进行数据的填充。
如果不对placeholder()的变量进行数据填充,将会引发错误。


Others

1.通过tf.constant创建一个常量;


曲线拟合

曲线拟合(curve fitting)是指选择适当的曲线类型来拟合观测数据,并用拟合的曲线方程分析两变量间的关系。
既将非线性关系的数据线性化。
->曲线直线化
曲线直线化是曲线拟合的重要手段之一。对于某些非线性的资料可以通过简单的变量变换使之直线化,这样就可以按最小二乘法原理求出变换后变量的直线方程;
既线性回归。


tf.train.Optimizer

定义:优化器类的基类。
-> tf.train.GradientDescentOptimizer
这个类是实现梯度下降算法的优化器。传入一个学习率的值就可以了:
tf.train.GradientDescentOptimizer(learning rate)

optimizer.minimize()

作用:非常常用的一个函数,通过更新var_list来减小loss。


Softmax构建模型

基础公式

z=Wx+b
a=softmax(z)

测试模型

  • tf.argmax表示找到最大值的位置(也就是预测的分类和实际的分类);
  • 然后看看他们是否一致,是就返回true,不是就返回false,这样得到一个boolean数组;
  • tf.cast将boolean数组转成int数组,最后求平均值,得到分类的准确率;

CNN

一般来说,CNN网络的前几层为卷积层和采样层(或者说池化层),在若干层卷积和池化以后,还有若干层全连接层(也就是传统神经网络),最后输出分类信息。

  • 卷积层(提取图片的特征)
  • 池化层(采样层)
  • 全连接层(传统神经网络) CNN相比与传统神经网络,最大的区别就是引入了卷积层和池化层。
    流程:

图像输入 -> 卷积 -> 最大池化(采样) -> 全连接神经网络 -> 计算

卷积(提取特征)

作用:用于提取特征,且不需要指定特征,由它自己去提取;

  • 卷积开始
  • 获取到猜测的特征,例如特征1、特征2...
  • 提取到的特征称为卷积核
  • 匹配输入的图像
  • 将输入图像用卷积核计算完成
  • 用n个卷积核计算完成后,得到n个新的矩阵(包含多个像素的匹配度)
  • 卷积完成

池化(采样)

  • 对于卷积之后的n个矩阵
  • 缩减卷积核矩阵,常用的是2x2矩阵提取
  • 取出2x2矩阵中的最大值
  • 既只关注是否有某个地方匹配了
  • 最后得到最大池化矩阵

全连接层

  • 将池化后的矩阵再继续多次卷积+池化
  • 得到最终的2x2矩阵
  • 展开数据(vec化)
  • 得到1xn的条形矩阵
  • 计算最后的平均值
  • 越接近1的匹配度越高