深度学习|Tensorflow图像识别基础(二)

    前面我们用简单的方法来训练我们的模型,且w和b我们都是置零操作。对于这种简单的图片识别可能还有效果,稍微复杂一点的图片只怕这个网络就不行了。现在在图像识别领域最火的就是CNN算法了。我这里只放一张结构图,不过你先需要了解神经网络,我推荐这篇博文,写的真的非常棒。CNN推荐这篇,不过是全英文,理解起来可能费劲。

                                            

    我们不去研究它的前世今生了(不过真的是非常有意思),我们学习该怎么理解并使用它。

    手写字只是灰度图,而更多的现在是RGB图片,这些图片每张在计算机上就是一个宽width, 高height, 深depth 来描述的 。它就是一个三维张量,然后展开成一个向量作为我们的输入层。其次卷积神经网络满足了画面不变性这个必要条件。怎么做到的呢?让权重在不同位置共享。

    还要说说神经元怎么理解,你可以把它当作一个计算存储单元,上一层传来的数据经过计算存储后传给下一层。看看这张图,在网上流传甚广,它干了什么呢?也就是像素的加权求和,作用就是特征提取。黄色的3x3矩阵叫做卷积核,普通的卷积操作,卷积核是已知的,而卷积神经网络中卷积核是未知的。它需要我们训练的时候得出。这就是卷积层的工作。

深度学习|Tensorflow图像识别基础(二)_第1张图片

    

     注意上面的可以看作是depth为1的卷积,多维你可以想想一下,应该很好理解。

    经过线性组合和偏移后,我们加入非线性来增强模型的拟合能力,最常用的就是ReLU激活函数,也叫修正线性单元,它是一个分段函数,0以上为线性函数,0以下为0。这层叫做激励层,也叫做非线性转化层。它的位置很灵活,而且可能不止一次被使用。

    卷积之后还有一个pooling的操作,不知谁翻的池化层,很直白但是具体工作说起来就是采样。不如叫采样层?这个很类似于高斯去噪,局部范围取最大,也有取平均的,一般都是取最大。这样做的好处就是去掉一些冗余信息,当然可能其他像素点是否对识别有没有影响?我们不知道,这就可能出错。不过总的来说这是一个比较好的方法了。

    上面的步骤总的来说是提取特征,然后特征我们该如何处理呢?我们是不是该给图片分类了,全连接层就是用来将最后的输出映射到线性可分的空间。通常送入全连接层进行分类的是平摊的向量,然后配合其进行分类。

    当然输出层就是全连接层的分类结果。

    还有几个概念:

    超参数:就是学习之前自定义的量,比如学习率(梯度下降的步长),隐藏层数等。

    正则化:降低模型复杂度以减少过拟合。

    反向传播:梯度下降法的变形。

    dropout: 防止过拟合,具体请看这篇博文

    说了很多,还是要用实例来说明,网上很多,然后我看到一位仁兄写的挺细的,贴在这里。他是训练自己的图片,准确率不高,说更新也没后文了。。

    我建议去看这个博文,每一步写的很清楚,学习后大概就懂了基本流程。

    然后,后续我会去学习fast-RCNN还有faster-RCNN,用于目标检测,学习后继续分享心得。我放了很多链接是因为他们写的很好,我的理解不一定比他们好,学习的过程总是要博采众长。

    祝学习愉快!


详细代码请访问:

    https://github.com/chenzhibin29/MNIST

    

    

    

你可能感兴趣的:(python与计算机视觉)