一.VGG概述

VGGNet是牛津大学视觉几何组(Visual Geometry Group)提出的模型,该模型在2014ImageNet图像分类与定位挑战赛 ILSVRC-2014中取得在分类任务第二,定位任务第一的优异成绩。VGGNet突出的贡献是证明了很小的卷积,通过增加网络深度可以有效提高性能。VGG很好的继承了Alexnet的衣钵同时拥有着鲜明的特点。即网络层次较深。

VGGNet结构

VGGNet模型有A-E五种结构网络,深度分别为11,11,13,16,19。其中较为典型的网络结构主要有vgg16和vgg19,本篇文章主要讲VGG16,并分享VGG16的Keras实现。其网络结构如下图中D列(红色方框):

    VGG16网络结构

vggnet对输入图像的默认大小是224*224*3 (从表中input可以看出)。vgg16网络结构含有参数的网络层一共有16层,即13个卷积层,5个池化层,3个全连接层,不包括激活层。

vgg16网络结构可以划分为6个模块层次加1个输入模块,分别如下

                       模块            各模块的涉及的层次
                输入模块             224*224*3
                第一个模块               conv3-64
              conv3-64
              maxpool
                第二个模块               conv3-128
              conv3-128
              maxpool
               第三个模块               conv3-256
              conv3-256
              conv3-256
              maxpool
              第四个模块               conv3-512
              conv3-512
              conv3-512
              maxpool
             第五个模块               conv-512
              conv3-512
              conv3-512
              maxpool
            第六个模块(全连接层和输出层)               FC-4096 (实际上前面需要加一个Flatten层)
              FC-4096
              FC-1000 (负责分类)
              softmax(输出层函数)

二.vgg16实现MNIST分类

(基于keras框架)

代码实现:

#从keras.model中导入model模块,为函数api搭建网络做准备
from keras.models import Model
from keras.layers import Flatten,Dense,Dropout,MaxPooling2D,Conv2D,BatchNormalization,Input,ZeroPadding2D,Concatenate
from keras.layers.convolutional import AveragePooling2D
from keras import regularizers  #正则化
from keras.optimizers import RMSprop  #优化选择器
from keras.layers import AveragePooling2D
from keras.datasets import mnist
from keras.utils import np_utils
import matplotlib.pyplot as plt
import numpy as np#数据处理
(X_train,Y_train),(X_test,Y_test)=mnist.load_data()
X_test1=X_test
Y_test1=Y_test
X_train=X_train.reshape(-1,28,28,1).astype("float32")/255.0
X_test=X_test.reshape(-1,28,28,1).astype("float32")/255.0
Y_train=np_utils.to_categorical(Y_train,10)
Y_test=np_utils.to_categorical(Y_test,10)
print(X_train.shape)
print(Y_train.shape)
print(X_train.shape)def vgg16():x_input = Input((28, 28, 1))  # 输入数据形状28*28*1# Block 1x = Conv2D(64, (3, 3), activation='relu', padding='same', name='block1_conv1')(x_input)x = Conv2D(64, (3, 3), activation='relu', padding='same', name='block1_conv2')(x)x = MaxPooling2D((2, 2), strides=(2, 2), name='block1_pool')(x)# Block 2x = Conv2D(128, (3, 3), activation='relu', padding='same', name='block2_conv1')(x)x = Conv2D(128, (3, 3), activation='relu', padding='same', name='block2_conv2')(x)x = MaxPooling2D((2, 2), strides=(2, 2), name='block2_pool')(x)# Block 3x = Conv2D(256, (3, 3), activation='relu', padding='same', name='block3_conv1')(x)x = Conv2D(256, (3, 3), activation='relu', padding='same', name='block3_conv2')(x)x = Conv2D(256, (3, 3), activation='relu', padding='same', name='block3_conv3')(x)x = MaxPooling2D((2, 2), strides=(2, 2), name='block3_pool')(x)# Block 4x = Conv2D(512, (3, 3), activation='relu', padding='same', name='block4_conv1')(x)x = Conv2D(512, (3, 3), activation='relu', padding='same', name='block4_conv2')(x)x = Conv2D(512, (3, 3), activation='relu', padding='same', name='block4_conv3')(x)x = MaxPooling2D((2, 2), strides=(2, 2), name='block4_pool')(x)# Block 5x = Conv2D(512, (3, 3), activation='relu', padding='same', name='block5_conv1')(x)x = Conv2D(512, (3, 3), activation='relu', padding='same', name='block5_conv2')(x)x = Conv2D(512, (3, 3), activation='relu', padding='same', name='block5_conv3')(x)#BLOCK 6x=Flatten()(x)x=Dense(256,activation="relu")(x)x=Dropout(0.5)(x)x = Dense(256, activation="relu")(x)x = Dropout(0.5)(x)#搭建最后一层,即输出层x = Dense(10, activation="softmax")(x)# 调用MDOEL函数,定义该网络模型的输入层为X_input,输出层为x.即全连接层model = Model(inputs=x_input, outputs=x)# 查看网络模型的摘要model.summary()return model
model=vgg16()
optimizer=RMSprop(lr=1e-4)
model.compile(loss="binary_crossentropy",optimizer=optimizer,metrics=["accuracy"])
#训练加评估模型
n_epoch=4
batch_size=128
def run_model(): #训练模型training=model.fit(X_train,Y_train,batch_size=batch_size,epochs=n_epoch,validation_split=0.25,verbose=1)test=model.evaluate(X_train,Y_train,verbose=1)return training,test
training,test=run_model()
print("误差:",test[0])
print("准确率:",test[1])def show_train(training_history,train, validation):plt.plot(training.history[train],linestyle="-",color="b")plt.plot(training.history[validation] ,linestyle="--",color="r")plt.title("training history")plt.xlabel("epoch")plt.ylabel("accuracy")plt.legend(["training","validation"],loc="lower right")plt.show()
show_train(training,"accuracy","val_accuracy")def show_train1(training_history,train, validation):plt.plot(training.history[train],linestyle="-",color="b")plt.plot(training.history[validation] ,linestyle="--",color="r")plt.title("training history")plt.xlabel("epoch")plt.ylabel("loss")plt.legend(["training","validation"],loc="upper right")plt.show()
show_train1(training,"loss","val_loss")prediction=model.predict(X_test)
def image_show(image):fig=plt.gcf()  #获取当前图像fig.set_size_inches(2,2)  #改变图像大小plt.imshow(image,cmap="binary")  #显示图像plt.show()
def result(i):image_show(X_test1[i])print("真实值:",Y_test1[i])print("预测值:",np.argmax(prediction[i]))
result(0)
result(1)

经典卷积神经网络---VGG16详解相关推荐

  1. vgg16卷积层的计算量_卷积神经网络VGG16详解

    VGG网络图如下,本文要深入讲解的是很常用的VGG16网络.在看懂VGG16网络之前,先补一下卷积神经网络的知识,然后用代码实例来更好说明VGG16网络 VGG网络 图片数据如何输入? 彩色图像有RG ...

  2. FCN(全卷积神经网络)详解

    文章目录 1. 综述 简介 核心思想 2. FCN网络 2.1 网络结构 2.2 上采样 Upsampling 2.3 跳级结构 3 FCN训练 4. 其它 4.1 FCN与CNN 4.2 FCN的不 ...

  3. 卷积神经网络(CNN)详解与代码实现

    目录 1.应用场景 2.卷积神经网络结构 2.1 卷积(convelution) 2.2 Relu激活函数 2.3 池化(pool) 2.4 全连接(full connection) 2.5 损失函数 ...

  4. 卷积神经网络CNNs详解参考----MNIST

    mnist实例--卷积神经网络(CNN) 使用TensorFlow编写识别数字的CNN训练程序详解 深度学习之卷积神经网络CNN及tensorflow代码实现示例 CNN笔记:通俗理解卷积神经网络

  5. 通俗易懂:图卷积神经网络入门详解

    作者 | 蝈蝈 来源 | 转载自知乎用户蝈蝈 [导读]GCN问世已经有几年了(2016年就诞生了),但是这两年尤为火爆.本人愚钝,一直没能搞懂这个GCN为何物,最开始是看清华写的一篇三四十页的综述,读 ...

  6. 深度学习 CNN卷积神经网络 LeNet-5详解

    卷积神经网络( Convolutional Neural Network, CNN): 是一种常见的深度学习架构,受生物自然视觉认知机制(动物视觉皮层细胞负责检测光学信号)启发而来,是一种特殊的多层前 ...

  7. 图卷积神经网络入门详解

    图卷积缘起 在开始正式介绍图卷积之前,我们先花一点篇幅探讨一个问题:为什么研究者们要设计图卷积操作,传统的卷积不能直接用在图上吗? 要理解这个问题,我们首先要理解能够应用传统卷积的图像(欧式空间)与图 ...

  8. 卷积神经网络CNN详解

    一.全连接神经网络 1.全连接网络:网络层的每一个结点都与上一层的所有结点相连. 对于每个神经元: 2.如果没有激活函数,我们的求和函数拟合能力均为线性的,而激活函数的作用在于,为我们的模型提供了非线 ...

  9. 《深度学习》 之 AlexNet卷积神经网络 原理 详解

    AlexNet卷积神经网络 一.背景介绍 (图片来自网络) lexNet 经常被认为是这一波人工智能浪潮的起点,该网络在 ImageNet 挑战赛中的错误率与前一届冠军相比减小了 10% 以上,比亚军 ...

  10. 卷积神经网络算法详解

    不得不喷一下CSDN,不支持图片复制粘贴就算了,我把文章从WORD转PDF再转JPG发还得一张张的选

最新文章

  1. opencv感兴趣区域ROI的图像混合操作
  2. 《2019中国硬科技发展白皮书》发布,中美硬科技创新指数PK
  3. HTML中行内元素与块级元素的区别
  4. hibernate保存失败_Hibernate:保存与保存并保存或更新
  5. 大数据成长之路:谈谈那些必须学习的Linux基础知识
  6. React使用antd Table生成层级多选组件
  7. ReactNative实现图集功能
  8. c++用模板实现稀疏多项式_用线性表实现一元多项式及相加运算
  9. C/C++信息隐写术(一)之认识文件结构
  10. git clone 报错 Clone failed: Authentication failed for
  11. Golang 实现求素数【 输入N,求N内素数个数 】
  12. 使用C# 未解决的问题(VS2012)
  13. arcgis更改字段名_ArcGIS怎么修改属性表字段名称
  14. 学python能赚钱吗-在校大学生用python当爬虫一个月能赚3000吗?
  15. [深度学习] fast-reid入门教程
  16. java随机数生成字母_java生成随机数字和字母组合
  17. 社工库寻求帮助可以下载
  18. 渗透测试-文件上传/下载/包含
  19. Pyyaml-yaml.load反序列化漏洞
  20. 【计算机毕业设计】美容美发微信小程序的设计与实现

热门文章

  1. QT_T04-COOD
  2. 爬虫python代码网易云_用python爬取网易云音乐歌曲的歌词
  3. Unity渲染管线,初探SRP
  4. 台式机设成仅计算机,如何把台式电脑设置成wifi热点
  5. 阿里巴巴技术大牛赏鉴
  6. centos7安装tomcat8
  7. 世界上最详细的Linux C udp实现文件传输
  8. x79主板bios设置中文_新买的电脑不知道主板型号?这三种方法可查看,非常简单...
  9. python贝叶斯网络预测模型_概率图模型之:贝叶斯网络
  10. sql中常见sqlcode原因分析