VGG系列的网络,在网络深度上相比于其之前的网络有了提升,VGG16与VGG19是VGG系列的代表,本次基于Tensorflow2.0实现VGG16网络。

1.VGG16 网络简介

VGG16网络模型在2014年ImageNet比赛上脱颖而出,取得了在分类任务上排名第二,在定位任务上排名第一的好成绩。VGG16网络相比于之前的LexNet以及LeNet网络,在当时的网络层数上达到了空前的程度。

2.网络结构

3.创新点

① 使用3x3的卷积核代替7x7的卷积核。

3x3 卷积核是能够感受到上下、左右重点的最小的感受野尺寸。并且,2 个 3x3 的卷积核叠加,它们的感受野等同于 1 个 5x5 的卷积核,3 个叠加后,它们的感受野等同于 1 个 7x7 的效果。
由于感受野相同,3个3x3的卷积,使用了3个非线性激活函数,增加了非线性表达能力,使得分割平面更具有可分性。同时使用小卷积核,使得参数量大大减少。
使用3x3卷积核堆叠的形式,既增加了网络层数又减少了参数量

② 通过不断增加通道数达到更深的网络,使用2x2池化核,使用Max-pooling方法。

使用2x2池化核,小的池化核能够带来更细节的信息捕获。当时也有average pooling,但是在图像任务上max-pooling的效果更好,max更加容易捕捉图像上的变化,带来更大的局部信息差异性,更好的描述边缘纹理等。

4.网络实现

def VGG16(nb_class,input_shape):input_ten = Input(shape=input_shape)#1x = tf.keras.layers.Conv2D(filters=64,kernel_size=(3,3),activation='relu',padding='same')(input_ten)x = tf.keras.layers.Conv2D(filters=64,kernel_size=(3,3),activation='relu',padding='same')(x)x = tf.keras.layers.MaxPool2D(pool_size=(2,2),strides=(2,2))(x)#2x = tf.keras.layers.Conv2D(filters=128,kernel_size=(3,3),activation='relu',padding='same')(x)x = tf.keras.layers.Conv2D(filters=128,kernel_size=(3,3),activation='relu',padding='same')(x)x = tf.keras.layers.MaxPool2D(pool_size=(2,2),strides=(2,2))(x)#3x = tf.keras.layers.Conv2D(filters=256,kernel_size=(3,3),activation='relu',padding='same')(x)x = tf.keras.layers.Conv2D(filters=256,kernel_size=(3,3),activation='relu',padding='same')(x)x = tf.keras.layers.Conv2D(filters=256,kernel_size=(3,3),activation='relu',padding='same')(x)x = tf.keras.layers.MaxPool2D(pool_size=(2,2),strides=(2,2))(x)#4x = tf.keras.layers.Conv2D(filters=512,kernel_size=(3,3),activation='relu',padding='same')(x)x = tf.keras.layers.Conv2D(filters=512,kernel_size=(3,3),activation='relu',padding='same')(x)x = tf.keras.layers.Conv2D(filters=512,kernel_size=(3,3),activation='relu',padding='same')(x)x = tf.keras.layers.MaxPool2D(pool_size=(2,2),strides=(2,2))(x)#5x = tf.keras.layers.Conv2D(filters=512,kernel_size=(3,3),activation='relu',padding='same')(x)x = tf.keras.layers.Conv2D(filters=512,kernel_size=(3,3),activation='relu',padding='same')(x)x = tf.keras.layers.Conv2D(filters=512,kernel_size=(3,3),activation='relu',padding='same')(x)x = tf.keras.layers.MaxPool2D(pool_size=(2,2),strides=(2,2))(x)#FCx = tf.keras.layers.Flatten()(x)x = Dense(4096,activation='relu')(x)x = Dense(4096,activation='relu')(x)output_ten = Dense(nb_class,activation='softmax')(x)model = Model(input_ten,output_ten)return model
model_VGG16 = VGG16(24,(img_height,img_width,3))
model_VGG16.summary()
Model: "model"
_________________________________________________________________
Layer (type)                 Output Shape              Param #
=================================================================
input_1 (InputLayer)         [(None, 224, 224, 3)]     0
_________________________________________________________________
conv2d (Conv2D)              (None, 224, 224, 64)      1792
_________________________________________________________________
conv2d_1 (Conv2D)            (None, 224, 224, 64)      36928
_________________________________________________________________
max_pooling2d (MaxPooling2D) (None, 112, 112, 64)      0
_________________________________________________________________
conv2d_2 (Conv2D)            (None, 112, 112, 128)     73856
_________________________________________________________________
conv2d_3 (Conv2D)            (None, 112, 112, 128)     147584
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 56, 56, 128)       0
_________________________________________________________________
conv2d_4 (Conv2D)            (None, 56, 56, 256)       295168
_________________________________________________________________
conv2d_5 (Conv2D)            (None, 56, 56, 256)       590080
_________________________________________________________________
conv2d_6 (Conv2D)            (None, 56, 56, 256)       590080
_________________________________________________________________
max_pooling2d_2 (MaxPooling2 (None, 28, 28, 256)       0
_________________________________________________________________
conv2d_7 (Conv2D)            (None, 28, 28, 512)       1180160
_________________________________________________________________
conv2d_8 (Conv2D)            (None, 28, 28, 512)       2359808
_________________________________________________________________
conv2d_9 (Conv2D)            (None, 28, 28, 512)       2359808
_________________________________________________________________
max_pooling2d_3 (MaxPooling2 (None, 14, 14, 512)       0
_________________________________________________________________
conv2d_10 (Conv2D)           (None, 14, 14, 512)       2359808
_________________________________________________________________
conv2d_11 (Conv2D)           (None, 14, 14, 512)       2359808
_________________________________________________________________
conv2d_12 (Conv2D)           (None, 14, 14, 512)       2359808
_________________________________________________________________
max_pooling2d_4 (MaxPooling2 (None, 7, 7, 512)         0
_________________________________________________________________
flatten (Flatten)            (None, 25088)             0
_________________________________________________________________
dense (Dense)                (None, 4096)              102764544
_________________________________________________________________
dense_1 (Dense)              (None, 4096)              16781312
_________________________________________________________________
dense_2 (Dense)              (None, 24)                98328
=================================================================
Total params: 134,358,872
Trainable params: 134,358,872
Non-trainable params: 0
_________________________________________________________________

可以发现,VGG16的训练参数达到了134,358,872个,比AlexNet多了很多倍,但是VGG系列的网络性能还是比较好的。

努力加油a啊

深度学习之基于Tensorflow2.0实现VGG16网络相关推荐

  1. 深度学习之基于Tensorflow2.0实现AlexNet网络

    在之前的实验中,一直是自己搭建或者是迁移学习进行物体识别,但是没有对某一个网络进行详细的研究,正好人工智能课需要按组上去展示成果,借此机会实现一下比较经典的网络,为以后的研究学习打下基础.本次基于Te ...

  2. 深度学习之基于Tensorflow2.0实现ResNet50网络

    理论上讲,当网络层数加深时,网络的性能会变强,而实际上,在不断的加深网络层数后,分类性能不会提高,而是会导致网络收敛更缓慢,准确率也随着降低.利用数据增强等方法抑制过拟合后,准确率也不会得到提高,出现 ...

  3. 深度学习之基于Tensorflow2.0实现Xception网络

    1.Xception网络简介 Xception网络是在2017提出的轻量型网络,兼顾了准确性和参数量,Xception----->Extreme(极致的) Inception. 2.创新点 引入 ...

  4. 深度学习之基于Tensorflow2.0实现InceptionV3网络

    Inception网络是Google公司研发的,迄今为止有V1,V2,V3,V4四代,在V4这一代引入了残差网络的模型,本次主要介绍第三代-InceptionV3网络. 1. InceptionV3网 ...

  5. 【Python深度学习】基于Tensorflow2.0构建CNN模型尝试分类音乐类型(二)

    前情提要 基于上文所说 基于Tensorflow2.0构建CNN模型尝试分类音乐类型(一) 我用tf2.0和Python3.7复现了一个基于CNN做音乐分类器.用余弦相似度评估距离的一个音乐推荐模型. ...

  6. 【Python深度学习】基于Tensorflow2.0构建CNN模型尝试分类音乐类型(一)

    音乐分类 前言 复现代码 MP3转mel CNN模型 训练结果 总结 前言 我在逛github的时候,偶然发现了一个项目:基于深度学习的音乐推荐.[VikramShenoy97].作者是基于CNN做的 ...

  7. 【深度学习】(6) tensorflow2.0使用keras高层API

    各位同学好,今天和大家分享一下TensorFlow2.0深度学习中借助keras的接口减少神经网络代码量.主要内容有: 1. metrics指标:2. compile 模型配置:3. fit 模型训练 ...

  8. 【深度学习】利用tensorflow2.0卷积神经网络进行卫星图片分类实例操作详解

    本文的应用场景是对于卫星图片数据的分类,图片总共1400张,分为airplane和lake两类,也就是一个二分类的问题,所有的图片已经分别放置在2_class文件夹下的两个子文件夹中.下面将从这个实例 ...

  9. 深度学习实战—基于TensorFlow 2.0的人工智能开发应用

    作者:辛大奇 著 出版社:中国水利水电出版社 品牌:智博尚书 出版时间:2020-10-01 深度学习实战-基于TensorFlow 2.0的人工智能开发应用

  10. 飞桨深度学习开源框架2.0抢先看:成熟完备的动态图开发模式

    百度飞桨于近期宣布,深度学习开源框架2.0抢先版本正式发布,进入2.0时代.其中一项重大升级,就是推出更加成熟完备的命令式编程模式,即通常说的动态图模式.同时在该版本中将默认的开发模式定为动态图模式, ...

最新文章

  1. 1.ireport基本使用
  2. TZOJ 2569 Wooden Fence(凸包求周长)
  3. 新装ubuntu10.04后的一些设置
  4. 把strassen乘法调出来了...
  5. 【自定义Android带图片和文字的ImageButton】
  6. 通过DataX从Oracle同步数据到MySQL-安装配置过程
  7. hive建表报错JsonSerDe
  8. ios protobuf java_iOS 集成Protobuf,转换proto文件
  9. 怎样做计算机系统的镜像文件,Windows7 镜像制作过程 图文说明
  10. JAVA最全最细基础知识点
  11. Windows语言栏不见了,解决办法。任务栏的语言栏没了、不显示了。语言栏异常导致不能输入中文。默认中文输入法设置。
  12. 【笔记】个人博客建立(域名选择、网站备案、公安联网备案、安全评估报告)
  13. 如何写一个proto消息
  14. 网上药店领导品牌_药康网
  15. Linux最最最常用命令!
  16. mysql 循环之continue
  17. 天翼云 Ubuntu 22.04.1 LTS apt换源 (阿里云)
  18. 国际法学19春在线作业1-0005
  19. #730 (Div. 2) A 思维 C dfs D1 交互思维
  20. html怎么做商品列表,纯js实现商品列表功能

热门文章

  1. 遗传算法 matlab实现 多维变量 二进制编码
  2. Fedora 14 yum 报错: Cannot retrieve repository metadata (repomd.xml) for repository
  3. java计算机毕业设计进出货管理系统MyBatis+系统+LW文档+源码+调试部署
  4. html吃豆豆游戏代码,吃豆豆小游戏
  5. 皮尔森相关系数_克莱姆相关系数的计算
  6. Qt echarts 教程(3):qml echarts 的使用方法
  7. eplan 培训中心ppt_Eplan从入门到精通.doc
  8. VM options
  9. 讲讲NVivo11的版本细节
  10. 北大慕课(郭炜):程序设计与算法(一)编程题答案(全)