热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

深度学习为何可以实现图像的分类

本笔记为自用,倘若没有相关的学习基础,也确实无法看懂文章写的是什么。近来有点越学越回去的感觉。竟然突然在想,为什么深度学习模型可以对图像进行分类或者语义分割。可怕的是,当时想到这里

本笔记为自用,倘若没有相关的学习基础,也确实无法看懂文章写的是什么。




近来有点越学越回去的感觉。竟然突然在想,为什么深度学习模型可以对图像进行分类或者语义分割。

可怕的是,当时想到这里,一下子愣住了:是啊,模型是怎么做到的呐?


好在想了一下,又想起来了。好记性不如烂笔头,还是把自己的想法记录下来,希望下次自己再想不起来的时候,能想到自己做了笔记,并且通过看笔记解决问题。



深度学习使用的数据,以MNIST手写字体识别数据和Kaggle平台猫狗识别数据为例——数据可以分成两个:



  • 图像



  • 标签


    这里举例的数据使用的标签转换成了One-Hot形式,倘若是语义分割使用图像作为label,也可以按照这个思路来理解

    手写字体识别的标签是0-9共10个数字

    猫狗识别的标签是dog和cat,在模型中可以以0和1来替代字符串dog和cat

    当然最后应当都需要使用One-Hot编码格式


    之所以使用One-Hot编码格式,因为深度学习任务中,特征不是连续的值(如dog和cat之类的),将这些数据用数字来表示,执行的效率会高很多

    独热编码One-Hot参考下面的网址进行学习,在此不做赘述


    机器学习之独热编码(One-Hot)详解(代码解释)






那么,深度学习的模型是如何通过对图像和label的学习,来做到:给定一张模型没有见过的图像,较准确的识别的呐?


以上面图像(猫狗识别为例)的网络模型为例。


图中显示了四个层。从左往右依次可以视作为:输入层——中间隐藏层1——中建隐藏层2——判断层



中间隐藏层可以是全连接,也可是是卷积层。这些并没有什么大碍。在这里理解为是具有学习能力的神经即可。


图像和label一定要一一对应,这些都是可以通过数据处理来做到的。


比如MNIST数据集,可以直接使用深度学习模型框架里现成的数据。

如果是猫狗数据集,我们都知道,存储狗的图像的文件夹的名字就是dog,存储猫的图像的文件夹的名字是cat。不会再有其他额外的文件夹了。那么我们就可以,利用文件夹的名字,与文件的地址相对应(好像记得可以这么做,忘得有点多。),以此来给图片打标签。


我们通过Tensorflow的数据通道,将图像输入到模型中。它的判断流程应当是这样的:



  • 图像输入进去,在模型中进行各种变化。最后通过softmax或者sigmoid激活函数激活,得到图像可能是各个label的概率。然后,概率最大的哪个label就是真正的类别。

  • 上面是第一次的运行。那它到底是如何进行判断的呐?发现在模型的运行过程中,label是没有在其中参与什么进程的。但是label明明是指引模型进行正确的判断的。

  • 原来,模型的第一次运行得到的结果,是随便做的一个猜测。没有任何依据。但是一旦它得到一个结果了,就可以与我们的label进行想匹配,进行一个学习。通过损失函数,反向传播,调整参数。

  • 当数据量足够大以后,模型学习到的参数就能学习并预测到这张图像的label,此时再与人为设定的label作比较,发现两者相等,损失函数就不会变化。这样准确的结果出现的次数逐渐增多的情况下,模型的精确度就会逐渐提高,直到无法再提高。

  • 这样模型的训练就结束了。而模型的预测就是利用训练好的参数,其实就是重复第一步。要说预测与训练的区别的话

    • 预测是应用已有的模型参数,而训练是来学习然后生成参数

    • 预测其实就是训练的第一步。但预测不用反向传递来让模型纠正



综上,就是我对深度学习的模型可以分类/分割图像的看法。不知道下一次再忘记的时候来回顾的话,还能不能看得懂……



推荐阅读
author-avatar
leee
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有