卷积神经网络的发展主要是为了解决人类视觉问题,不过如今其它方向也都会使用。发展历程主要从Lenet5->Alexnet->VGG->GooLenet->ResNet等。git
传统BP神经网络层与层之间都是全链接的,对于图像处理领域,当神经网络处理大图像时,全链接会致使待训练的参数很是庞大,好比100万个像素的图像,对于100个节点的隐层,则会产生亿级别的参数,若是更多层及更多个节点那参数数量将会无比庞大。此外,传统BP神经网络没有假设相邻图像之间存在紧密联系。综上所述,BP神经网络不适合作图像处理。github
为减小参数数量,首先想到能够构建部分链接的神经网络,每一个神经元再也不与上层全部神经元相连,而是链接某部分。另外还能经过权值共享来减小参数数量,一组链接共享权重而没必要每一个链接权重都不一样。除此以外,还能经过池化来减小每层的样本数,从而减小参数数量。结合以上特色,卷积神经网络就是这样的一种网络。web
看一个卷积神经网络示意图,它包含了若干卷积层、池化层和全链接层。图像输入通过第一层卷积层处理后,获得4层feature,为何能够是4层呢?其实就是能够自定义4个不一样的filter对输入分别运算,就获得4层feature。而后池化层对卷积后的feature进行池化处理,获得更小的feature,这里运算后一样是4层feature。接着继续根据filter作卷积和池化处理,最后经过两个全链接层完成输出。数组
其实有时候咱们很好奇图片通过卷积神经网络的每一个层后变成什么样子,想了解下这个过程发生了什么变化,此时咱们就可使用一个工具——Quiver。它开源再github上,https://github.com/keplr-io/quiver 。经过它能够很方便对卷及网络进行探索,以web浏览器形式实现对模型的可视化,能够看到不一样网络层的变化。浏览器
为方便起见,这里直接建立VGG16模型实例。经过下面脚本将下载VGG16模型的权重参数(这里自动下载的是通过Imagenet训练的模型参数,包含了1000个类别),权重参数总大小达到百兆字节,而后模型被加载到内存中并建立一个监听5000端口的服务。微信
import keras.applications as apps from quiver_engine.server import launch model = apps.vgg16.VGG16() launch(model, input_folder="data")
访问浏览器,选择其中一个图片做为输入,左侧为网络架构图形,而且点击不一样层能够看到不一样的输入。右侧的图片咱们能够点击选择,而后应用程序会自动将其做为输入,模型再根据该输入预测出可能性最高的五个结果。其中能够看到224x224的输入,并且是3层,分别表明原始图像的红、绿、蓝。网络
而后选择第一个卷积层,能够看到经过卷积核的操做后不一样的特征被突出,突出的特征包括不一样类型的边缘、亮度和对比度等等。架构
继续往下能够看到特征愈来愈抽象,包含了不一样的纹理、角度等等,还多是眼睛和鼻子。app
继续往下到最后的卷积层时,此时的特征已经抽象到咱们人类已经没法理解了,对于咱们来讲,看到的特征并无任何意义。最终经过彻底链接层并获得包含了1000个元素的几率数组,即对应ImageNet中每一个类别的几率。工具
当真正开始学习的时候不免不知道从哪入手,致使效率低下影响继续学习的信心。(学习交流加我微信 bbbl12138)
但最重要的是不知道哪些技术须要重点掌握,学习时频繁踩坑,最终浪费大量时间,因此有有效资源仍是颇有必要的。