其实这是算分Project的内容,受到CS231n启发,我和晶晶打算做图像分类的机器学习项目。很多人向我推荐tensorflow训练数据,因为有模板,不用手推python公式。
首先参考tensorflow官方文档中文版。
下载tensorflow (Mac OS) 很简单,安装了anaconda大礼包后,直接输入
$ pip install https://storage.googleapis.com/tensorflow/mac/tensorflow-0.5.0-py2-none-any.whl
然后是入门级的学习笔记:tensorflow,张量+数据流,是基于graph的计算。
session是上下文。tf在生成graph后,选择必要的路径计算,而不是逐条语句执行,因而高效。
笔记1 笔记2
接着跟随官方文档的脚步,看MNIST入门。
(啊我没怎么看,只知道MNIST是手写字符识别…)
CNN到底是什么
在tensorflow的模板中,CNN的结构是这样的。
模型的预测流程由inference()构造,该函数会添加必要的操作步骤用于计算预测值的 logits,其对应的模型组织方式如下所示:
由conv卷积层,pool池化层,norm归一化,local全连接层,softmax输出层构成。
由于时间紧张,主要参考机器之心的知乎回答
以及神经网络的直观解释
brief history
Yann Lecun 是深度学习三大鼻祖之一,他在90年代初提出的LeNet-5成为NN的基础。
经典的网络结构:Lecun做的是字符识别。
这是现在的网络结构:图像分类。其实30年来差别不大。
CNN在2012年的翻身之作,标志着CNN进入computer vision,NIPS2012,深度学习三大鼻祖之一Hinton的论文《imagenet classification with deep CNN》中的网络结构(AlexNet):
我已经存在本地了,经典之作必须阅读。
现在逐一解释:
pixel 像素
现在我已经明白,图像是RGB三通道的,就会是一个三维tensor,深度是3,存储red,green,blue分量的值[0,255]。
而为了存储方便,有时会采用灰度矩阵。RGB转灰度值的著名心理学公式:
Gray=R∗0.299+G∗0.587+B∗0.114
convolutional layer 卷积层
第一层往往是卷积层convolutional layer.
这是卷积层的卷积核——过滤器filter,比如它是一个5*5*3的tensor,和图像的相应5*5*3作卷积,不断遍历相邻的块,得到一个28*28*1的matrix。
过滤器是一个特征识别器。
做卷积如图所示,符合这一特征的块对应的结果会很大。
我们把这个结果称作激活图/特征图(activation map/),相当于图像的某个小块激活了某一特征。
各种filter的效果
不同的过滤器会得到不同的激活映射matrix,将其叠成tensor,就构成了28*28*n的卷积层(n个feature map)。
如这是两个filter特征提取的动画。
至于相邻的卷积层,是指后一层的卷积层的输入是前一层的输出。这样越深的卷积层的视野越开阔,能看到更大的图像部分,提取整体的特征。如第一层是判断曲线直线,第二层是鼻子嘴,第三层是脸手。