Kaggle学习之路(三) —— Digit Recognizer之构建Tensorflow图
来源:互联网 发布:即时通讯软件源码 编辑:程序博客网 时间:2024/05/20 19:48
- 阅读本篇的先决条件:前面有一步问题分析,这是第二步。第一步请看:http://blog.csdn.net/memoryjdch/article/details/75220498
- 如果你不懂Tensorflow,请浏览本篇,你会知道大概的概念。
如果你想深入了解Tensorflow,移步官方github库:
https://github.com/tensorflow/tensorflow
或者移步Tensorflow官方中文文档:
http://wiki.jikexueyuan.com/project/tensorflow-zh/
-本篇主要说明Digit Recognizer的分析,代码我已经写了详细的注释,如果你感兴趣,请移步:https://github.com/Skyamz/Data_Recognizer
一、一些先验问题
什么是Tensorflow?
Tensorflow可以理解为一个数据流的系统。前端构造一个Tensorflow图,后端在session中执行这个图的计算。图中不保存数据,这些数据都是流动的,可以任意传输的,Tensorflow只负责构建一个计算的框架,接收数据之后,计算结果并输出。这里的数据就可以理解为张量(Tensor)。即在Tensorflow中特有的数据。
为什么要选Tensorflow?
我们的数据量很大,Tensorflow是分布式的,处理起来很快。Tensorflow根据前面通俗的原来来总结一句话,就是来寻找一种图的库(这种图就是判断某种关系),尤其在寻找图像特征的关系,非常准确。
Tensorflow具体怎么工作的?
放一张官网上面一直挂着的图。这图里面没有卷积层和pooling层,所以只能叫做回归模型(卷积层和pooling层会在后面说明)。先来看看这个gif:
每个节点就是一个操作,流动的黑色线条是传输的数据,即张量。我们可以大体总结一下工作的过程:
- 首先从 input 开始, 一层一层的向上进行 Forward 计算。
- 数据经过Relu层(这个Relu相当于一个激活函数,主要功能是排除负数)
- 数据经过回归层
- 当算到最后的cross entroy的时候, 开始进行梯度的计算。计算梯度时我们要构造权重矩阵W和偏移矢量bias。
这里牵扯到一个Tensorflow的架构问题,由于和本次项目没有什么关系,这里不再赘述,如果你感兴趣,请移步:http://www.jianshu.com/p/a5574ebcdeab
数据到底怎么读取的?又怎么判断数据出了这个图,要开始计算了?
这里要先引入一个名词:epochs。什么意思呢?我现在有40000行数据,我每把这些数据放到Tensorflow图里面完整地跑一遍,epochs就+1。也就是说它表示我把数据集完整计算的次数。
我们这里把构造图和计算数据分开成了两个步骤,可以理解为这是两个线程。一般我们在进行数据计算时,先把数据读入内存队列里,负责计算的线程从内存队列里面取数据就ok。而现在引入了epochs,我们想把数据整体计算很多遍怎么办呢?
tensorflow使用文件名队列+内存队列双队列的形式读入文件,很方便地管理了epochs。我们现在将100行数据放入文件名队列,50行为一个epochs,在第100行最后设置一个end(结束符)。内存队列从文件名队列中读入数据,每读50行,epochs+1,读到end时结束。
二、搭建CNN解决数字手写体识别问题
我们先来预览一下解决过程框架,然后再逐一解释每一步的含义:
卷积
卷积操作过程:
用3*3的卷积核去卷积6*6的矩阵流程:
这里我们用的是SAME方式。
池化
池化操作过程:
用3*3的矩阵去池化6*6的矩阵流程,选择9个数中最大的,这个操作称为max pooling:
建立紧密连接层
经过第一二层的处理,图片大小由原来的28*28变成了7*7,且有64个特征值。这一步我们添加一个有1024个神经元的紧密连接层,每个神经元都连接到上一层的输出。
Dropout
使用Dropout技术,主要是为了防止过拟合。dropout主要是减少有效参数的数量.Dropout在每个训练阶段从网络中删除一些节点。 每个节点或者以keep_prob概率保持在网络中,或者以概率1 - keep_prob丢弃。 在训练阶段结束之后,节点以其原始权重返回给NN。dropout一些通俗的解释请看:http://blog.csdn.net/stdcoutzyx/article/details/49022443
Softmax层
添加softmax层。softmax模型可以用来给不同的对象分配概率。比如我们判断一张图片是9的概率为80%,判断为8的概率为5%,这个概率就是softmax分配的。
memoryjdch编辑于2017-07-20
- Kaggle学习之路(三) —— Digit Recognizer之构建Tensorflow图
- Kaggle学习之路(二) —— Digit Recognizer之问题分析
- Kaggle竞赛题目之——Digit Recognizer
- kaggle——Digit Recognizer
- Kaggle—Digit Recognizer竞赛
- 【Kaggle练习赛】之Digit Recognizer
- Kaggle入门赛之Digit Recognizer
- 机器学习初学者—手把手教你做数字图像识别:Kaggle—Digit Recognizer
- 机器学习-Kaggle竞赛-Digit recognizer
- Digit Recognizer (Kaggle)
- Kaggle | Digit Recognizer
- Kaggle入门:Digit Recognizer
- Kaggle入门:Digit Recognizer
- kaggle | Digit Recognizer
- 深度学习入门:Tensorflow实战Digit Recognizer
- Digit Recognizer Kaggle 竞赛系列
- kaggle | Digit recognizer with caffe
- Kaggle digit-recognizer PCA+SVM
- Android ExpandableRecyclerView使用小结
- 玩转自定义ViewGroup——环形围绕展示图片效果
- SQL语句集锦
- 记录:java执行mysql语句查询字段类型:timestamp返回页面显示会多出个 .0,自己如何处理的
- Java学习中之重要知识点
- Kaggle学习之路(三) —— Digit Recognizer之构建Tensorflow图
- Python:集合(set)类型的操作
- 百练OJ:2807:两倍
- 客户端即js对cookie读写以及删除,留下来备用
- Wireless Network (并查集)
- 争议数据的接口——文档
- 用py2exe打包python程序
- iOS源码博文集锦2
- JSONArray和JSONObject的区别