VGG网络是在2014年由牛津大学著名研究组VGG (Visual Geometry Group) 提出,斩获该年ImageNet竞赛中 Localization Task (定位任务) 第一名 和 Classification Task (分类任务) 第二名。原论文名称是《Very Deep Convolutional Networks For Large-Scale Image Recognition》,在原论文中给出了一系列VGG模型的配置,下面这幅图是VGG16模型的结构简图。

该网络中的亮点: 通过堆叠多个3x3的卷积核来替代大尺度卷积核(在拥有相同感受野的前提下能够减少所需参数)。

论文中提到,可以通过堆叠两层3x3的卷积核替代一层5x5的卷积核,堆叠三层3x3的卷积核替代一层7x7的卷积核。下面给出一个示例:使用7x7卷积核所需参数,与堆叠三个3x3卷积核所需参数(假设输入输出特征矩阵深度channel都为C)
VGG模型所有层参数表:

CNN感受野:在卷积神经网络中,决定某一层输出 结果中一个元素所对应的输入层的区域大小,被称作感受野(receptive field)。通俗 的解释是,输出feature map上的一个单元 对应输入层上的区域大小。
感受野计算公式
F (i) = (F (i +1) - 1)*Stride + Ksize
F(i)为第i层感受野, Stride为第i层的步距, Ksize为卷积核或池化核尺寸

VGG16模型框架tensor版本

from tensorflow.keras import layers, models, Model, Sequential
#3、
#定义VGG函数,传入参数feature,图片高、宽、种类
def VGG(feature, im_height=224, im_width=224, class_num=1000):# tensorflow中的tensor通道排序是NHWCinput_image = layers.Input(shape=(im_height, im_width, 3), dtype="float32")# 1、提取特征网络结构x = feature(input_image)#2、分类网络结构x = layers.Flatten()(x)#展平处理,得到一维向量x = layers.Dropout(rate=0.5)(x)#将50%的神经元随机失活,减少过拟合x = layers.Dense(2048, activation='relu')(x)#全连接层1x = layers.Dropout(rate=0.5)(x)#将50%的神经元随机失活,减少过拟合x = layers.Dense(2048, activation='relu')(x)#全连接层2x = layers.Dense(class_num)(x)#全连接层3output = layers.Softmax()(x)#输出类别概率分布model = models.Model(inputs=input_image, outputs=output)#定义models.Model类,创建神经网络模型return model
#2、
#提取特征网络结构,定义features函数
def features(cfg):feature_layers = []#feature_layers 定义一个空列表,用来存储网络特征结构for v in cfg:      #for循环遍历if v == "M":   #判断是否为“M”feature_layers.append(layers.MaxPool2D(pool_size=2, strides=2)) #池化核大小为2,步长为2else:conv2d = layers.Conv2D(v, kernel_size=3, padding="SAME", activation="relu")#卷积核大小为3,步长为1feature_layers.append(conv2d)return Sequential(feature_layers, name="feature")# 跳出当前循环#1、
#配置列表,字典(键值)
cfgs = {'vgg11': [64, 'M', 128, 'M', 256, 256, 'M', 512, 512, 'M', 512, 512, 'M'],'vgg13': [64, 64, 'M', 128, 128, 'M', 256, 256, 'M', 512, 512, 'M', 512, 512, 'M'],'vgg16': [64, 64, 'M', 128, 128, 'M', 256, 256, 256, 'M', 512, 512, 512, 'M', 512, 512, 512, 'M'],'vgg19': [64, 64, 'M', 128, 128, 'M', 256, 256, 256, 256, 'M', 512, 512, 512, 512, 'M', 512, 512, 512, 512, 'M'],
}#实例化vgg网络模型
def vgg(model_name="vgg16", im_height=224, im_width=224, class_num=1000):try:cfg = cfgs[model_name]#传入配置列表except:print("Warning: model number {} not in cfgs dict!".format(model_name))exit(-1)model = VGG(features(cfg), im_height=im_height, im_width=im_width, class_num=class_num)return model# model = vgg(model_name='vgg16')

数据标签:“0”: “daisy”, “1”: “dandelion”, “2”: “roses”,“3”: “sunflowers”, “4”: “tulips”

在花分类(flower_photos)数据集的测试结果:
(1)在cpu上训练

(2)在GPU上训练

实验结果表明在gpu上训练 一个epoch用了38s,在cpu上训练 一个epoch平均用了12s,这表明用gpu多进程训练神经网络时间更快。gpu上训练的准确度为74.90比cpu上训练的准确度74.59更高。

VGG16神经网络模型复现相关推荐

  1. 卷积神经网络模型解读汇总——LeNet5,AlexNet、ZFNet、VGG16、GoogLeNet和ResNet

      在我的个人博客上一篇博文中分析了卷积神经网络的结构与相关算法,知道了这些基本原理之后.这篇博文主要介绍在卷积神经网络的发展历程中一些经典的网络模型. LeNet5   LeCun等将BP算法应用到 ...

  2. 基于神经网络模型的文本语义通顺度计算研究-全文复现(还没弄完)

    该硕士学位论文分为两个部分: ①基于依存句法分析的语义通顺度计算方法 ②基于神经网络模型的语义通顺度计算方法 本篇记录摘抄了该论文的核心内容以及实验复现的详细步骤. 在N-gram模型下进行智能批改场 ...

  3. 视觉神经网络模型优秀开源工作:PyTorch Image Models(timm)库

    视觉神经网络模型优秀开源工作:PyTorch Image Models(timm)库 PyTorchImageModels,简称timm,是一个巨大的PyTorch代码集合,包括了一系列: image ...

  4. 卷积神经网络模型如何辨识裸体图片

    著名人工智能公司Clarifai公司近日推出了识别成人内容的模型和API NSFW,该模型能够很准确地识别含有裸体和半裸的图片和视频,在Clarifai的这篇博文中,作者用裸体检测问题来展示训练现代版 ...

  5. 【学术相关】作者解读ICML接收论文:如何使用不止一个数据集训练神经网络模型?...

    作者:欧明锋,浙江大学 导读:在实际的深度学习项目中,难免遇到多个相似数据集,这时一次仅用单个数据集训练模型,难免造成局限.是否存在利用多个数据集训练的可能性?本文带来解读. 01 介绍 迄今为止,在 ...

  6. 【深度学习】一文概览神经网络模型

    一.神经网络类别 一般的,神经网络模型基本结构按信息输入是否反馈,可以分为两种:前馈神经网络和反馈神经网络. 1.1 前馈神经网络 前馈神经网络(Feedforward Neural Network) ...

  7. 【小白学习PyTorch教程】三、Pytorch中的NN模块并实现第一个神经网络模型

    「@Author:Runsen」 在PyTorch建立模型,主要是NN模块. nn.Linear nn.Linear是创建一个线性层.这里需要将输入和输出维度作为参数传递. linear = nn.L ...

  8. 神经网络模型中class的forward函数何时调用_总结深度学习PyTorch神经网络箱使用...

    ↑ 点击蓝字 关注极市平台来源丨计算机视觉联盟编辑丨极市平台 极市导读 本文介绍了Pytorch神经网络箱的使用,包括核心组件.神经网络实例.构建方法.优化器比较等内容,非常全面.>>加入 ...

  9. 采用keras深度学习框架搭建卷积神经网络模型实现垃圾分类,基于树莓派上进行实时视频流的垃圾识别源代码

    一.项目概述 简介:该垃圾分类项目主要在于对各种垃圾进行所属归类,本次项目采用keras深度学习框架搭建卷积神经网络模型实现图像分类,最终移植在树莓派上进行实时视频流的垃圾识别. 前期:主要考虑PC端 ...

最新文章

  1. php header 文件大小,php获取远程文件大小及信息的函数(head_php
  2. php 获取语句,PHP获取当前服务器的基本语句
  3. ssm旅游管理系统项目介绍_基于jsp的网络相册管理系统的设计与实现
  4. DataGrid添加CheckBox(下拉列表)
  5. flash我中学时的梦想
  6. BerkeleyDB环境API
  7. 腾讯滑块验证码识别和加速度模拟(1)
  8. 全网首发:configure: error: cannot guess build type; you must specify one
  9. 如何无信用卡申请谷歌云
  10. 偶滴神嘞~终于弹钢琴了
  11. 暑期作息时间表模板_暑假作息时间表
  12. echarts立体柱状图
  13. jmeter做秒杀活动测试
  14. ArduPilot 开发手册学习:写在前面
  15. 四级口语计算机对话,2017大学英语四级口语场景对话练习(5)
  16. 宁波大学计算机非全,宁波大学考研:全日制和非全日制的6大区别,很多人不知道...
  17. Pandas 基础(16) - Holidays
  18. 4.计算机网络与信息安全
  19. 计算机无限办公网络应用与推广论文,无线办公局域网的设计与实施(毕业论文终稿).doc...
  20. 【转载】合约投放系统-介绍

热门文章

  1. 数据库客户端安装(SQLYog)
  2. Halcon 《机器视觉算法及应用》十例(其二)
  3. WebSQL 的简单使用
  4. 【OpenVPN连接多个,解决方法】
  5. 华为boss力荐公司高层看的一篇文章,真的很经典!!![转载]
  6. 适合Android进阶人群的全套系列学习资料,限时免费开源
  7. python打包成jar包_使用jython将python的py文件打包成java的jar包
  8. java删除文件夹指定日期的文件
  9. vb mysql 实例_VB6.0数据库开发五个实例——罗列的总结
  10. 查找JAVA源代码的步骤介绍