VGG卷积神经网络模型加载与运行

1,VGG概述

VGG Net由牛津大学的视觉几何组(Visual Geometry Group)和 Google DeepMind公司的研究员一起研发的的深度卷积神经网络,在 ILSVRC 2014 上取得了第二名的成绩,将 Top-5错误率降到7.3%。它主要的贡献是展示出网络的深度(depth)是算法优良性能的关键部分。他们最好的网络包含了16个卷积/全连接层。网络的结构非常一致,从头到尾全部使用的是3x3的卷积和2x2的汇聚。VGGNet不好的一点是它耗费更多计算资源,并且使用了更多的参数,导致更多的内存占用(140M)。其中绝大多数的参数都是来自于第一个全连接层。后来发现这些全连接层即使被去除,对于性能也没有什么影响,这样就显著降低了参数数量。

目前使用比较多的网络结构主要有ResNet(152-1000层),GooleNet(22层),VGGNet(19层),大多数模型都是基于这几个模型上改进,采用新的优化算法,多模型融合等。到目前为止,VGG Net 依然经常被用来提取图像特征。

2,GVV19的结构图
在这里插入图片描述在这里插入图片描述
输入是大小为224224的RGB图像,预处理(preprocession)时计算出三个通道的平均值,在每个像素上减去平均值(处理后迭代更少,更快收敛)。图像经过一系列卷积层处理,在卷积层中使用了非常小的33卷积核,在有些卷积层里则使用了11的卷积核。卷积层步长(stride)设置为1个像素,33卷积层的填充(padding)设置为1个像素。池化层采用max pooling,共有5层,在一部分卷积层后,max-pooling的窗口是2*2,步长设置为2。卷积层之后是三个全连接层(fully-connected layers,FC)。前两个全连接层均有4096个通道,第三个全连接层有1000个通道,用来分类。所有网络的全连接层配置相同。全连接层后是Softmax,用来分类。所有隐藏层(每个conv层中间)都使用ReLU作为激活函数。

VGGNet不使用局部响应标准化(LRN),这种标准化并不能在ILSVRC数据集上提升性能,却导致更多的内存消耗和计算时间(LRN:Local Response Normalization,局部响应归一化,用于增强网络的泛化能力)。

3,优化讨论

在这里插入图片描述
1、选择采用33的卷积核是因为33是最小的能够捕捉像素8邻域信息的的尺寸。

2、使用1*1的卷积核目的是在不影响输入输出的维度情况下,对输入进行形变,

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你好,以下是搭建 VGG16 卷积神经网络的 Python 代码: ```python import tensorflow as tf from tensorflow.keras.layers import Input, Conv2D, MaxPooling2D, Flatten, Dense from tensorflow.keras.models import Model def VGG16(input_shape=(224,224,3), num_classes=100): # 定义输入层 input_layer = Input(shape=input_shape) # 第一段卷积层 x = Conv2D(filters=64, kernel_size=(3,3), padding='same', activation='relu')(input_layer) x = Conv2D(filters=64, kernel_size=(3,3), padding='same', activation='relu')(x) x = MaxPooling2D(pool_size=(2,2), strides=(2,2))(x) # 第二段卷积层 x = Conv2D(filters=128, kernel_size=(3,3), padding='same', activation='relu')(x) x = Conv2D(filters=128, kernel_size=(3,3), padding='same', activation='relu')(x) x = MaxPooling2D(pool_size=(2,2), strides=(2,2))(x) # 第三段卷积层 x = Conv2D(filters=256, kernel_size=(3,3), padding='same', activation='relu')(x) x = Conv2D(filters=256, kernel_size=(3,3), padding='same', activation='relu')(x) x = Conv2D(filters=256, kernel_size=(3,3), padding='same', activation='relu')(x) x = MaxPooling2D(pool_size=(2,2), strides=(2,2))(x) # 第四段卷积层 x = Conv2D(filters=512, kernel_size=(3,3), padding='same', activation='relu')(x) x = Conv2D(filters=512, kernel_size=(3,3), padding='same', activation='relu')(x) x = Conv2D(filters=512, kernel_size=(3,3), padding='same', activation='relu')(x) x = MaxPooling2D(pool_size=(2,2), strides=(2,2))(x) # 第五段卷积层 x = Conv2D(filters=512, kernel_size=(3,3), padding='same', activation='relu')(x) x = Conv2D(filters=512, kernel_size=(3,3), padding='same', activation='relu')(x) x = Conv2D(filters=512, kernel_size=(3,3), padding='same', activation='relu')(x) x = MaxPooling2D(pool_size=(2,2), strides=(2,2))(x) # 全连接层 x = Flatten()(x) x = Dense(units=4096, activation='relu')(x) x = Dense(units=4096, activation='relu')(x) output_layer = Dense(units=num_classes, activation='softmax')(x) # 定义模型 model = Model(inputs=input_layer, outputs=output_layer) return model ``` 希望能对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值