对于tensorlfow 的认识和学习顺序
本文是想描述以下两个问题:
1. tensorflow是什么,有什么函数必须理解
自己的理解:
tensorflow就是一个容器,这个容器里面呢,有一个图(data flow graph,其实就是我们的神经网络模型:model),并且这个图(模型)中包含了很多的tensor(张量,目前我的理解,其实就是矩阵,也就是数据存放的方式,)。tensor可以这个flow graph中运算,输入,输出。
因此这就是为什么叫tensorflow。
所以,核心就是图(flow Graph,那神经网络结构在tensorflow里也就是一张图)
那么使用tensorflow核心主要的流程其实就是三步:
- 将计算的流程表示成图(做深度学习的话,也就是构造神经网络)
- 启动这个图,也就是Session(Session,你可以理解成,你访问一次网页,在网页中打开了一个新的窗口。在这个窗口中进行网页的文章的读取,对关键词查询等过程。当你把这个窗口关掉之后,那么这个Session也就结束了。)
- 往session里面填入值,让 session运算得到结果。
其实后来仔细看看官网上的解释,也就两步:
- Building the computational graph
- Running the computational graph
即使创建一个模型,跑这个模型,就没有了,
但是呢,如果直接打印这个模型时不实际的,因为打印出来的值是这个tensor的值,而不是tensor里面所赋予的value的值(这个地方,我把它理解为一个tensor是一个多维的矩阵,那么你直接打印这个矩阵的话呢,得到的是这个矩阵的地址或者位置,为了得到这个矩阵里面的值,必须使用session函数),所以,为了得到tensor里面我们的内容,加入了session的步骤。
来个入门的函数理解:
函数原文:
http://blog.csdn.net/lenbow/article/details/52152766
|
|
上面描述了我对tensorflow的概念和tensorflow的运算逻辑,那么下面介绍tensorflow中几个常用函数。
必须理解和掌握的几个tensorflow概念:
- tensor
- Varibale
- placeholder
- Session
下面逐一开始介绍:
1. tensor:
在计算图(Graph)中,操作间传递的数据都是tensor
tensor即使我们尴尬所提到的张量(矩阵,或者是tensorflow中储存数据的方式),那么声明tensor的方式有很多种。
里面有Ranks,Shape,Type需要理解一下
Ranks:is the number of dimensions of the tensor
Shape:这是指的是纬度,几纬的就是指几个shape
types: 这里指类型,int,float,还是double等等
|
|
|
|
等等等,都是声明tensor的函数,方法
2. Variable
variable即为变量的意思,当训练模型的时候,使用变量去存储和更新参数。
那么变量是可以被存储(Saver函数)到磁盘中,并且在读取它们(load函数)。
这里必须强调一下:创建一个变量时,必须先初始化后
创建Variable:
例子:创建2个Variable
|
|
初始化
在使用变量的时候必须初始化这个变量,而且是必须在模型的其他操作运行之前完成。
最简单的例子是添加一个给所有变量初始化的操作。
例子:
|
|
这一块就很清楚了,
首先声明两个Variable变量,
之后,声明一个能够是所有变量初始化的函数,
然后,在运行session的时候,先把所有的Variable都初始化,再运算其他模块
我说明一下,我觉得我这块说明的不是很好,有兴趣的可以去看看,或者一起交流交流:
https://www.tensorflow.org/programmers_guide/variables
上面还讲了Saver()函数和restore()函数,这两个函数会在以后我们训练神经网络的时候非常的重要,以后我想在这两个函数中做一个专题,举几个例子。
3. placeholder
看名字就知道这是个什么函数了,占位符,这个函数是个好东西,一般用于tensorflow的第一步,构建flow graph(或神经网络的时候)的时候,但是不赋予值(数据),只是把空间(位置)占住,在我们的第三步(赋予值运算)的时候,把数据传入进去进行运算。
我在网上找到一种说法挺有意思:这个函数相当于告诉系统:这里有一个值/向量/矩阵,现在我没发给你具体数值,但是正式运算的时候我会补上!
|
|
4. Session
在刚刚的代码实例中,已经演示了很多有session的东西,上面也讲了session的概念,其实就是相当于你去访问一个网页,打开了一个新的窗口,在这个窗口上进行各种上网的活动(各种函数的运算),然后关掉这个窗口,你的运算也就终止了。
##2. 对于现在的目标来说,如何更好,更快的使用tensorflow去搭建自己的神经网络
根据第一个问题的描述,我觉得已经对tensorflow有个大致的理解和入门了。
现在我觉得需要的是实战例子,理解了实战的例子后,才能更好的编码。
目前来说我也处于这一阶段,正在学习别人写代码的角度去学习,那么我想推荐一个人的视频,这个人边写边讲解,不懂得,可以停下来查查资料。
为了实现我的研究课题,我主要分为一下几个方面开始实验:
需要翻墙:
https://www.youtube.com/watch?v=oYbVFhK_olY&list=PLQVvvaa0QuDfKTOs3Keq_kaG2P55YRn5v&index=43
嘛,正在跟着视频一点一点的学,然后根据自己的课题需要进行编码,有时间的话,我会把这两天学习到的代码和大家分享。
第一步:充分理解基本的神经网络结构:实现MNIST的手写识别
https://www.youtube.com/watch?v=BhpvH5DuVu8&index=46&list=PLQVvvaa0QuDfKTOs3Keq_kaG2P55YRn5v
第二步:理解CNN中的网络结构,如何用CNN实现MNIST的手写识别
https://www.youtube.com/watch?v=7Wq-QmMT4gM&index=56&list=PLQVvvaa0QuDfKTOs3Keq_kaG2P55YRn5v
第三步:如何用自己的数据和CNN结构去识别
https://www.youtube.com/watch?v=gT4F3HGYXf4&index=63&list=PLQVvvaa0QuDfKTOs3Keq_kaG2P55YRn5v
第四步:基于源代码的基础上,在CNN的数据中加一层CNN结构
http://www.wildml.com/2015/12/implementing-a-cnn-for-text-classification-in-tensorflow/