【深度学习】嘿马深度学习笔记第11篇:卷积神经网络,学习目标【附代码文档 ...

打印 上一主题 下一主题

主题 1000|帖子 1000|积分 3000


本教程的知识点为:深度学习先容 1.1 深度学习与机器学习的区别 TensorFlow先容 2.4 张量 2.4.1 张量(Tensor) 2.4.1.1 张量的类型 TensorFlow先容 1.2 神经网络基础 1.2.1 Logistic回归 1.2.1.1 Logistic回归 TensorFlow先容 总结 逐日作业 神经网络与tf.keras 1.3 神经网络基础 神经网络与tf.keras 1.3 Tensorflow实现神经网络 1.3.1 TensorFlow keras先容 1.3.2 案例:实现多层神经网络进行时装分类 神经网络与tf.keras 1.4 深层神经网络 为什么利用深层网络 1.4.1 深层神经网络表现 卷积神经网络 3.1 卷积神经网络(CNN)原理 为什么须要卷积神经网络 缘故原由之一:图像特征数量对神经网络效果压力 卷积神经网络 3.1 卷积神经网络(CNN)原理 为什么须要卷积神经网络 缘故原由之一:图像特征数量对神经网络效果压力 卷积神经网络 2.2案例:CIFAR100类别分类 2.2.1 CIFAR100数据集先容 2.2.2 API 利用 卷积神经网络 2.4 BN与神经网络调优 2.4.1 神经网络调优 2.4.1.1 调参技巧 卷积神经网络 2.4 经典分类网络结构 2.4.1 LeNet-5解析 2.4.1.1 网络结构 卷积神经网络 2.5 CNN网络实战技巧 2.5.1 迁移学习(Transfer Learning) 2.5.1.1 先容 卷积神经网络 总结 逐日作业 商品物体检测项目先容 1.1 项目演示 商品物体检测项目先容 3.4 Fast R-CNN 3.4.1 Fast R-CNN 3.4.1.1 RoI pooling YOLO与SSD 4.3 案例:SSD进行物体检测 4.3.1 案例效果 4.3.2 案例需求 商品检测数据集训练 5.2 标注数据读取与存储 5.2.1 案例:xml读取本地文件存储到pkl 5.2.1.1 解析结构

完整笔记资料代码:https://gitee.com/yinuo112/AI/tree/master/深度学习/嘿马深度学习笔记/note.md

感爱好的小同伴可以自取哦~


全套教程部分目次:




部分文件图片:


卷积神经网络

2.4 经典分类网络结构

学习目标



  • 目标
  • 知道LeNet-5网络结构
  • 相识经典的分类网络结构
  • 知道一些常见的卷机网络结构的优化

    • 知道NIN中1x1卷积原理以及作用
    • 知道Inception的作用

  • 相识卷积神经网络学习过程内容
  • 应用

下面我们主要以一些常见的网络结构去解析,并先容大部分的网络的特点。这里看一下卷积的发展历史图。

2.4.1 LeNet-5解析

起首我们从一个稍微早一些的卷积网络结构LeNet-5(这里稍微改了下名字),开始的目的是用来辨认数字的。从前往后先容完整的结构组成,并计算相关输入和输出。
2.4.1.1 网络结构




  • 激活层默认不画网络图当中,这个网络结构当时利用的是sigmoid和Tanh函数,还没有出现Relu函数
  • 将卷积、激活、池化视作一层,即使池化没有参数
2.4.1.2 参数形状总结

shapesizeparametersInput(32,32,3)30720Conv1(f=5,s=1)(28,28,6)4704450+6Pool1(14,14,6)11760Conv2(f=5,s=1)(10,10,16)16002400+16Pool2(5,5,16)4000FC3(120,1)12048000+120FC4(84,1)8410080+84Ouput:softmax(10,1)10840+10

  • 中间的特征大小变化不宜过快
究竟上,在过去很多年,许多机构或者学者都发布了各种各样的网络,其实去相识设计网络最好的办法就是去研究现有的网络结构或者论文。大多数网络设计出来是为了Image Net的比赛(解决ImageNet中的1000类图像分类或定位题目),后来各人在各个业务上进行利用。
2.4.2 AlexNet

2012年,Alex Krizhevsky、Ilya Sutskever在多伦多大学Geoff Hinton的实行室设计出了一个深层的卷积神经网络AlexNet,夺得了2012年ImageNet LSVRC的冠军,且准确率远超第二名(top5错误率为15.3%,第二名为26.2%),引起了很大的轰动。AlexNet可以说是具有历史意义的一个网络结构。



  • 总参数量:60M=6000万,5层卷积+3层全毗连
  • 利用了非线性激活函数:ReLU
  • 防止过拟合的方法:Dropout
  • 批标准化层的利用
2.4.3 卷积网络结构的优化

2.4.3.1 常见结构特点

整个过程:AlexNet—NIN—(VGG—GoogLeNet)—ResNet


  • NIN:引入1 * 1卷积
  • VGG,斩获2014年分类第二(第一是GoogLeNet),定位使命第一。
  • 参数量巨大,140M = 1.4亿
  • 19layers
  • VGG 版本

    • VGG16
    • VGG19




  • GoogleNet,2014年比赛冠军的model,这个model证实了一件事:用更多的卷积,更深的层次可以得到更好的结构。(当然,它并没有证实浅的层次不能达到如许的效果)
  • 500万的参数量
  • 22layers
  • 引入了Inception模块

    • Inception V1
    • Inception V2
    • Inception V3
    • Inception V4




  • 下面我们将针对卷积网络架构常用的一些结构进行详细分析,来探究这些结构带来的利益
2.4.4 Inception 结构

起首我们要说一下在Network in Network中引入的1 x 1卷积结构的相关作用
2.4.4.1MLP卷积(1 x 1卷积)




  • 目的:提出了一种新的深度网络结构,称为“网络中的网络”(NIN),增强担当域内局部贴片的模型判别本领。
  • 做法
  • 对于传统线性卷积核:采用线性滤波器,然后采用非线性激活。
  • 提出MLP卷积代替传统线性卷积核
  • 作用或优点:
  • 1、多个1x1的卷积核级联加上配合激活函数,将feature map由多通道的线性组合变为非线性组合(信息整合),进步特征抽象本领(Multilayer Perceptron,缩写MLP,就是一个多层神经网络)
  • 2、1x1的卷积核操作还可以实现卷积核通道数的降维和升维,实现参数的减小化
2.4.4.2 1 x 1卷积先容


从图中,看到1 x 1卷积的过程,那么这里先假设只有3个1x1Filter,那么终极结果照旧56x56x3。但是每一个FIlter的三个参数的作用


  • 看作是对三个通道进行了线性组合。
我们以致可以把这几个FIlter可以当作就是一个简单的神经元结构,每个神经元参数数量与前面的通道数量相等。


  • 通常在卷积之后会参加非线性激活函数,在这里之后参加激活函数,就可以理解成一个简单的MLP网络了。

2.4.4.3 通道数变化

那么对于1x1网络对通道数的变化,其实并不是最重要的特点,由于究竟3 x 3,5 x 5都可以带来通道数的变化,
而1x1卷积的参数并不多,我们拿下面的例子来看。



  • 保持通道数不变
  • 提升通道数
  • 减少通道数
2.4.4.4 Inception层

这个结构其实另著名字叫盗梦空间结构。


  • 目的:
  • 代替人手工去确定到底利用1x1,3x3,5x5照旧是否须要max_pooling层,由网络自动去寻找得当的结构。并且节省计算。



  • 特点
  • 是每一个卷积/池化终极结果的长、宽大小一致
  • 特殊的池化层,须要增长padding,步长为1来使得输出大小一致,并且选择32的通道数
  • 终极结果28 x 28 x 256

    • 利用更少的参数,达到跟AlexNet或者VGG同样类似的输出结果

2.4.4.5 Inception改进

改进目的:减少计算,如5 x 5卷积那的运算量



  • 上面的参数:5 x 5 x 32 x 192 =153600
  • 下面的参数:192 x 16 + 5 x 5 x 16 x 32 = 3072 + 12800 = 15872
所以上面的结构会须要大量的计算,我们把这种改进的结构称之为网络的"瓶颈",网络缩小后扩大。
那么如许改变会影响网络的性能和效果吗?
GoogleNet就是如此,获得了非常好的效果。所以公道的设计网络当中的Inception结构可以或许减少计算,实现更好的效果。
2.4.4.6 GoogleNet结构(相识)

其中包含了多个Inception结构。

完整结构:

2.3.5 卷积神经网络学习特征可视化

我们肯定会有疑问真个深度的卷积网络到底在学习什么?可以将网络学习过程中产生的特征图可视化出来,并且对比原图来看看每一层都干了什么。


  • 可视化案例利用的网络



  • 可视化结果







  • layer1,layer2学习到的特征根本是颜色、边沿等低层特征
  • layer3学习到的特征,一些纹理特征,如网格纹理
  • layer4学习到的特征会稍微复杂些,比如狗的头部形状
  • layer5学习到的是完整一些的,比如关键性的区分特征
2.4.6 案例:利用pre_trained模型进行VGG预测

Google 在提供VGG行预测的时候效果会更好一些,所以选择VGG来进行测试
2.4.6.1 VGG模型利用

在tensorflow.keras.applications中已经存在很多现有模型,
  1. from tensorflow._api.v1.keras.applications import densenet
  2. from tensorflow._api.v1.keras.applications import inception_resnet_v2
  3. from tensorflow._api.v1.keras.applications import inception_v3
  4. from tensorflow._api.v1.keras.applications import mobilenet
  5. from tensorflow._api.v1.keras.applications import mobilenet_v2
  6. from tensorflow._api.v1.keras.applications import nasnet
  7. from tensorflow._api.v1.keras.applications import resnet50
  8. from tensorflow._api.v1.keras.applications import vgg16
  9. from tensorflow._api.v1.keras.applications import vgg19
  10. from tensorflow._api.v1.keras.applications import xception
  11. from tensorflow.python.keras.applications import DenseNet121
  12. from tensorflow.python.keras.applications import DenseNet169
  13. from tensorflow.python.keras.applications import DenseNet201
  14. from tensorflow.python.keras.applications import InceptionResNetV2
  15. from tensorflow.python.keras.applications import InceptionV3
  16. from tensorflow.python.keras.applications import MobileNet
  17. from tensorflow.python.keras.applications import MobileNetV2
  18. from tensorflow.python.keras.applications import NASNetLarge
  19. from tensorflow.python.keras.applications import NASNetMobile
  20. from tensorflow.python.keras.applications import ResNet50
  21. from tensorflow.python.keras.applications import VGG16
  22. from tensorflow.python.keras.applications import VGG19
  23. from tensorflow.python.keras.applications import Xception
复制代码
我们来利用其中一个VGG16的模型进行预测,这个模型源码文件中提供了相关的预处置惩罚图片的接口以及预测结果概率的处置惩罚API
  1. from tensorflow.python.keras.applications import VGG16
  2. from tensorflow.python.keras.applications.vgg16 import decode_predictions
  3. from tensorflow.python.keras.applications.vgg16 import preprocess_input
复制代码


  • preprocess_input:处置惩罚输入图片
  • decode_predictions:对预测结果进行处置惩罚
2.4.6.2 步调以及代码



  • 模型获取以及已训练好的参数加载
  • 注意:参数总计超过500M,因此当你首次利用下面的命令时,Keras须要从网上先下载这些参数,这可能须要耗用一些时间。
  1. model = VGG16()
  2. print(model.summary())
复制代码
模型打印为:
  1. _________________________________________________________________
  2. Layer (type)                 Output Shape              Param #   
  3. =================================================================
  4. input_1 (InputLayer)         (None, 224, 224, 3)       0         
  5. _________________________________________________________________
  6. block1_conv1 (Conv2D)        (None, 224, 224, 64)      1792      
  7. _________________________________________________________________
  8. block1_conv2 (Conv2D)        (None, 224, 224, 64)      36928     
  9. _________________________________________________________________
  10. block1_pool (MaxPooling2D)   (None, 112, 112, 64)      0         
  11. _________________________________________________________________
  12. block2_conv1 (Conv2D)        (None, 112, 112, 128)     73856     
  13. _________________________________________________________________
  14. block2_conv2 (Conv2D)        (None, 112, 112, 128)     147584   
  15. _________________________________________________________________
  16. block2_pool (MaxPooling2D)   (None, 56, 56, 128)       0         
  17. _________________________________________________________________
  18. block3_conv1 (Conv2D)        (None, 56, 56, 256)       295168   
  19. _________________________________________________________________
  20. block3_conv2 (Conv2D)        (None, 56, 56, 256)       590080   
  21. _________________________________________________________________
  22. block3_conv3 (Conv2D)        (None, 56, 56, 256)       590080   
  23. _________________________________________________________________
  24. block3_pool (MaxPooling2D)   (None, 28, 28, 256)       0         
  25. _________________________________________________________________
  26. block4_conv1 (Conv2D)        (None, 28, 28, 512)       1180160   
  27. _________________________________________________________________
  28. block4_conv2 (Conv2D)        (None, 28, 28, 512)       2359808   
  29. _________________________________________________________________
  30. block4_conv3 (Conv2D)        (None, 28, 28, 512)       2359808   
  31. _________________________________________________________________
  32. block4_pool (MaxPooling2D)   (None, 14, 14, 512)       0         
  33. _________________________________________________________________
  34. block5_conv1 (Conv2D)        (None, 14, 14, 512)       2359808   
  35. _________________________________________________________________
  36. block5_conv2 (Conv2D)        (None, 14, 14, 512)       2359808   
  37. _________________________________________________________________
  38. block5_conv3 (Conv2D)        (None, 14, 14, 512)       2359808   
  39. _________________________________________________________________
  40. block5_pool (MaxPooling2D)   (None, 7, 7, 512)         0         
  41. _________________________________________________________________
  42. flatten (Flatten)            (None, 25088)             0         
  43. _________________________________________________________________
  44. fc1 (Dense)                  (None, 4096)              102764544
  45. _________________________________________________________________
  46. fc2 (Dense)                  (None, 4096)              16781312  
  47. _________________________________________________________________
  48. predictions (Dense)          (None, 1000)              4097000   
  49. =================================================================
  50. Total params: 138,357,544
  51. Trainable params: 138,357,544
  52. Non-trainable params: 0
复制代码


  • 图片的输入以合格式转换
我们将会用到两个API,但是利用这个API须要PIL工具,3.7兆左右大小
  1. # 在虚拟环境中下载
  2. pip install PIL
复制代码
  1. from tensorflow.keras.preprocessing.image import load_img
  2. from tensorflow.keras.preprocessing.image import img_to_array
复制代码
进行当舆图片的加载,
  1. # 加载一个图片到VGG指定输入大小
  2. image = load_img('./tiger.png', target_size=(224, 224))
  3. # 进行数据转换到numpy数组形式,以便于VGG能够进行使用
  4. image = img_to_array(image)
  5. # 形状修改
  6. image = image.reshape((1, image.shape[0], image.shape[1], image.shape[2]))
复制代码


  • 利用模型对数据进行处置惩罚和预测
  1. # 输入数据进行预测,进行图片的归一化处理
  2. image = preprocess_input(image)
  3. y_predict = model.predict(image)
  4. # 进行结果解码
  5. label = decode_predictions(y_predict)
  6. # 进行lable获取
  7. res = label[0][0]
  8. # 预测的结果输出
  9. print('预测的类别为:%s 概率为:(%.2f%%)' % (res[1], res[2]*100))
复制代码
输出结果为
  1. Downloading data from
  2. 8192/35363 [=====>........................] - ETA: 0s
  3. 24576/35363 [===================>..........] - ETA: 0s
  4. 40960/35363 [==================================] - 0s 6us/step
  5. 预测的类别为:tiger 概率为:(80.30%)
复制代码
2.4.7 总结



  • 把握LeNet-5 结构计算
  • 相识卷积常见网络结构
  • 把握1x1卷积结构作用
  • 把握Inception结构作用
  • 把握keras的VGG模型的利用

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

tsx81429

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表