小嘿嘿之卷积神经网络VGG16(卷积/池化/全连接)

https://baijiahao.baidu.com/s?id=1667221544796169037&wfr=spider&for=pc

前言知识

什么是卷积?

  • 卷积过程是使用一个卷积核(如图中的Filter),在每层像素矩阵上不断按步长扫描下去,每次扫到的数值会和卷积核中对应位置的数进行相乘,然后相加求和,得到的值将会生成一个新的矩阵。
  • 卷积核相当于卷积操作中的一个过滤器,用于提取我们图像的特征,特征提取完后会得到一个特征图。
  • 卷积核的大小一般选择3x3和5x5,比较常用的是3x3,训练效果会更好。卷积核里面的每个值就是我们需要训练模型过程中的神经元参数(权重),开始会有随机的初始值,当训练网络时,网络会通过后向传播不断更新这些参数值,直到寻找到最佳的参数值。对于如何判断参数值的最佳,则是通过loss损失函数来评估。
    在这里插入图片描述

什么是padding?

在进行卷积操作的过程中,处于中间位置的数值容易被进行多次的提取,但是边界数值的特征提取次数相对较少,为了能更好的把边界数值也利用上,所以给原始数据矩阵的四周都补上一层0,这就是padding操作。

什么是池化pooling?

  • 池化操作相当于降维操作,有最大池化和平均池化,其中最大池化(max pooling)最为常用。
  • 经过卷积操作后我们提取到的特征信息,相邻区域会有相似特征信息,这是可以相互替代的,如果全部保留这些特征信息会存在信息冗余,增加计算难度。
  • 通过池化层会不断地减小数据的空间大小,参数的数量和计算量会有相应的下降,这在一定程度上控制了过拟合。
    在这里插入图片描述

什么是全连接?

Flatten将池化后的数据拉开,变成一维向量来表示,方便输入到全连接网络。
对n-1层和n层而言,n-1层的任意一个节点,都和第n层所有节点有连接。即第n层的每个节点在进行计算的时候,激活函数的输入是n-1层所有节点的加权。
在这里插入图片描述

VGG16

VGG结构配置

VGG中根据卷积核大小和卷积层数目的不同,可分为A,A-LRN,B,C,D,E共6个配置(ConvNet Configuration),其中以D,E两种配置较为常用,分别称为VGG16和VGG19。
在这里插入图片描述
VGG16共包含:

  • 13个卷积层(Convolutional Layer),分别用conv3-XXX表示
  • 3个全连接层(Fully connected Layer),分别用FC-XXXX表示
  • 5个池化层(Pool layer),分别用maxpool表示

其中,卷积层和全连接层具有权重系数,因此也被称为权重层,总数目为13+3=16,这即是
VGG16中16的来源。(池化层不涉及权重,因此不属于权重层,不被计数)。

VGG16网络

在这里插入图片描述
224x224x3的彩色图表示3通道的长和宽都为224的图像数据,也是网络的输入层(彩色图像有RGB三个颜色通道,分别是红、绿、蓝三个通道,这三个通道的像素可以用二维数组来表示,其中像素值由0到255的数字来表示。)

卷积计算

1)输入图像尺寸为224x224x3,经64个通道为3的3x3的卷积核,步长为1,padding=same填充,卷积两次,再经ReLU激活,输出的尺寸大小为224x224x64
2)经max pooling(最大化池化),滤波器为2x2,步长为2,图像尺寸减半,池化后的尺寸变为112x112x64
3)经128个3x3的卷积核,两次卷积,ReLU激活,尺寸变为112x112x128
4)max pooling池化,尺寸变为56x56x128
5)经256个3x3的卷积核,三次卷积,ReLU激活,尺寸变为56x56x256
6)max pooling池化,尺寸变为28x28x256
7)经512个3x3的卷积核,三次卷积,ReLU激活,尺寸变为28x28x512
8)max pooling池化,尺寸变为14x14x512
9)经512个3x3的卷积核,三次卷积,ReLU,尺寸变为14x14x512
10)max pooling池化,尺寸变为7x7x512
11)然后Flatten(),将数据拉平成向量,变成一维51277=25088。
11)再经过两层1x1x4096,一层1x1x1000的全连接层(共三层),经ReLU激活
12)最后通过softmax输出1000个预测结果

权重参数

尽管VGG的结构简单,但是所包含的权重数目却很大,达到了惊人的139,357,544个参数。这些参数包括卷积核权重和全连接层权重。
例如,对于第一层卷积,由于输入图的通道数是3,网络必须学习大小为3x3,通道数为3的的卷积核,这样的卷积核有64个,因此总共有(3x3x3)x64 = 1728个参数
计算全连接层的权重参数数目的方法为:前一层节点数×本层的节点数前一层节点数×本层的节点数。因此,全连接层的参数分别为:
7x7x512x4096 = 1027,645,444
4096x4096 = 16,781,321
4096x1000 = 4096000

实践
 1 # -*- coding: utf-8 -*-
 2 """
 3 Spyder Editor
 4 
 5 This is a temporary script file.
 6 """
 7 import matplotlib.pyplot as plt
 8 
 9 from keras.applications.vgg16 import VGG16
10 from keras.preprocessing import image
11 from keras.applications.vgg16 import preprocess_input, decode_predictions
12 import numpy as np
13 
14 def percent(value):
15     return '%.2f%%' % (value * 100)
16 
17 # include_top=True,表示會載入完整的 VGG16 模型,包括加在最後3層的卷積層
18 # include_top=False,表示會載入 VGG16 的模型,不包括加在最後3層的卷積層,通常是取得 Features
19 # 若下載失敗,請先刪除 c:\<使用者>\.keras\models\vgg16_weights_tf_dim_ordering_tf_kernels.h5
20 model = VGG16(weights='imagenet', include_top=True)
21 
22 
23 # Input:要辨識的影像
24 img_path = 'frog.jpg'
25 
26 #img_path = 'tiger.jpg' 并转化为224*224的标准尺寸
27 img = image.load_img(img_path, target_size=(224, 224))
28 
29 
30 x = image.img_to_array(img) #转化为浮点型
31 x = np.expand_dims(x, axis=0)#转化为张量size为(1, 224, 224, 3)
32 x = preprocess_input(x)
33 
34 # 預測,取得features,維度為 (1,1000)
35 features = model.predict(x)
36 
37 # 取得前五個最可能的類別及機率
38 pred=decode_predictions(features, top=5)[0]
39 
40 
41 #整理预测结果,value
42 values = []
43 bar_label = []
44 for element in pred:
45     values.append(element[2])
46     bar_label.append(element[1])
47 
48 #绘图并保存
49 fig=plt.figure(u"Top-5 预测结果")
50 ax = fig.add_subplot(111) 
51 ax.bar(range(len(values)), values, tick_label=bar_label, width=0.5, fc='g')
52 ax.set_ylabel(u'probability') 
53 ax.set_title(u'Top-5') 
54 for a,b in zip(range(len(values)), values):
55     ax.text(a, b+0.0005, percent(b), ha='center', va = 'bottom', fontsize=7)
56 
57 fig = plt.gcf()
58 plt.show()
59 
60 name=img_path[0:-4]+'_pred'
61 fig.savefig(name, dpi=200)

结果:

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值