本笔记为自用,倘若没有相关的学习基础,也确实无法看懂文章写的是什么。
近来有点越学越回去的感觉。竟然突然在想,为什么深度学习模型可以对图像进行分类或者语义分割。
可怕的是,当时想到这里,一下子愣住了:是啊,模型是怎么做到的呐?
好在想了一下,又想起来了。好记性不如烂笔头,还是把自己的想法记录下来,希望下次自己再想不起来的时候,能想到自己做了笔记,并且通过看笔记解决问题。
深度学习使用的数据,以MNIST手写字体识别数据和Kaggle平台猫狗识别数据为例——数据可以分成两个:
-
图像
-
标签
这里举例的数据使用的标签转换成了One-Hot形式,倘若是语义分割使用图像作为label,也可以按照这个思路来理解
手写字体识别的标签是0-9共10个数字
猫狗识别的标签是dog和cat,在模型中可以以0和1来替代字符串dog和cat
当然最后应当都需要使用One-Hot编码格式
之所以使用One-Hot编码格式,因为深度学习任务中,特征不是连续的值(如dog和cat之类的),将这些数据用数字来表示,执行的效率会高很多
独热编码One-Hot参考下面的网址进行学习,在此不做赘述
那么,深度学习的模型是如何通过对图像和label的学习,来做到:给定一张模型没有见过的图像,较准确的识别的呐?
以上面图像(猫狗识别为例)的网络模型为例。
图中显示了四个层。从左往右依次可以视作为:输入层——中间隐藏层1——中建隐藏层2——判断层
中间隐藏层可以是全连接,也可是是卷积层。这些并没有什么大碍。在这里理解为是具有学习能力的神经即可。
图像和label一定要一一对应,这些都是可以通过数据处理来做到的。
比如MNIST数据集,可以直接使用深度学习模型框架里现成的数据。
如果是猫狗数据集,我们都知道,存储狗的图像的文件夹的名字就是dog,存储猫的图像的文件夹的名字是cat。不会再有其他额外的文件夹了。那么我们就可以,利用文件夹的名字,与文件的地址相对应(好像记得可以这么做,忘得有点多。),以此来给图片打标签。
我们通过Tensorflow的数据通道,将图像输入到模型中。它的判断流程应当是这样的:
- 图像输入进去,在模型中进行各种变化。最后通过softmax或者sigmoid激活函数激活,得到图像可能是各个label的概率。然后,概率最大的哪个label就是真正的类别。
- 上面是第一次的运行。那它到底是如何进行判断的呐?发现在模型的运行过程中,label是没有在其中参与什么进程的。但是label明明是指引模型进行正确的判断的。
- 原来,模型的第一次运行得到的结果,是随便做的一个猜测。没有任何依据。但是一旦它得到一个结果了,就可以与我们的label进行想匹配,进行一个学习。通过损失函数,反向传播,调整参数。
- 当数据量足够大以后,模型学习到的参数就能学习并预测到这张图像的label,此时再与人为设定的label作比较,发现两者相等,损失函数就不会变化。这样准确的结果出现的次数逐渐增多的情况下,模型的精确度就会逐渐提高,直到无法再提高。
- 这样模型的训练就结束了。而模型的预测就是利用训练好的参数,其实就是重复第一步。要说预测与训练的区别的话
- 预测是应用已有的模型参数,而训练是来学习然后生成参数
- 预测其实就是训练的第一步。但预测不用反向传递来让模型纠正
综上,就是我对深度学习的模型可以分类/分割图像的看法。不知道下一次再忘记的时候来回顾的话,还能不能看得懂……