目录
为什么是tensorflow:
现在玩机器学习的人大概没有不知道tensorflow大名的吧,但是与caffe,keras相比,这位“仁兄”确实不怎么友好。即是这样,在众多开源的深度学习框架当中,tensorflow也是一枝独秀。Google的大名和号召力当然是其中一方面原因,但是,tensorflow也具有众多的优点。比如,网络结构代码十分简洁,分布式深度学习算法的执行效率等等。作为一个“菜鸡”来看,最吸引我的地方就是tensorflow对于python接口的支持十分良好。毕竟没有一个数据挖掘工作是单单定义网络就可以完成的。Python所拥有的Numpy, Scipy, Pandas等组建能大大提升工作的效率。
出来以上的优点以外,tensorflow对于网络结构的可视化和训练过程的可视化也有非常优秀的地方,下面是两个例子,第一个是tensorflow的tensorboard工具,第二个是tensorflow的playground。
关于tensorflowplayground可以参考网页:http://playground.tensorflow.org/
说说目的:
写这一系列博文的目的当然不是为了将深度学习,毕竟这是一个太宽泛,我的知识水平难以完全驾驭的领域。我只是提供一个途径,一种入门的方式。在最初接触一个领域的知识的时候如果单纯看论文会非常枯燥,而且顾前不顾后,狗熊掰棒子。但是如果能从一开始就动手操作,再看论文,做理论推导,整个过程会像揭秘一样有趣。我的目的就是把学习tensorflow这个“迷”给大家呈现出来。怎么去理解,分析,就看个人的功夫了。
这一系列的文章会以一种:代码段->代码解释->运行结果->调试心得的形式展现我一个月以来的学习成果。也算是一种笔记。但是,鲜有涉及原理的部分。或者以后的文章会讲到原理。但是作为一篇技术入门文章,我力图使文章尽量简洁,操作性强,而不是全面。
其中的代码大部分都是我从《Tensorflow实战Google深度学习框架》,《Tensorflow实战》还有Tensorflow的自带例子里面修改过来的。每一段都在自己的计算机上(ubuntu14.04+tensorflow 0.8.0)上实验过。如果复制代码而不能运行多半是版本的问题,或者是有些路径的问题。希望大家多加谅解。
文章结构
文章将会涉及以下内容:
- mnist手写数字识别
- 从mnist例子看tensorflow基础知识
- 来写个Lenet5
- 经典卷积神经网络之AlexNet
- 经典卷积神经网络之VGG
- 吓死人的Inception Net以及迁移学习
- Resnet和没学会的tf.contrib.slim模块
- Word2Vec探秘
- 循环神经网络到底是什么?
- 深度强化学习初探
mnist手写数字识别
为了让第一篇文章不要这么水过去,就在这一篇文章当中介绍这个系列的第一个内容,mnist手写数字识别。这几乎是每一个学习神经网络的人遇到的第一个例子了。我不想介绍原理,直接从输入输出和网络结果来介绍吧:
- 输入:
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)
这两行代码是利用tensorflow里面的python代码自动下载mnist数据集。其中,one_hot = True 是将图片的标签,也就是0-9这九个数字向量化,比如:4 就变成:
[0,0,0,0,1,0,0,0,0,0]。这样才能可网络的输出,也就是一个长度为10的向量匹配。
现在我们观察一下数据集:
代码中主要用到的是mnist.train, mnist.validation, mnist.test部分,分别用于训练,训练时验证和最后检验模型。mnist.train又分为images和labels部分(其他当然也一样)。图片部分是将一幅