vgg网络结构以及keras实现

图像分类系列:

0、BP前反馈神经网络原理详解

1、Lenet详解

2、Alexnet详解

3、VGG网络结构

4、NIN网络结构

5、Googlenet inception v1 结构详解inception v2 和 inception v3

VGG和GoogleNet同在2014年参赛,图像分类任务中GoogLeNet第一,VGG第二,它们都是重要的网络结构。VGG在AlexNet基础上做了改进,整个网络都使用了同样大小的3*3卷积核尺寸和2*2最大池化尺寸。VGG网络结构简单,是一个很好的特征提取器。

参考https://blog.csdn.net/weixin_40031404/article/details/80133583

一、网络结构

VGG可以设计成不同的深度,见下表:

拿出19层的vgg 19作分析见下表:

二、技术点

1、小卷积核

首先是两个3x3卷积核可以替代一个5x5卷积核,三个3x3卷积核可以替代一个7x7卷积核。作用是a、减少参数量以及计算量 b、增加激活函数以增加网络的非线性

其次是增加了1x1卷积层,作用是 a、通道之间的特征融合 b、 增加激活函数以增加网络的非线性表达能力。

2、小池化核

2x2池化核代替3x3池化核,相比平均池化,max-pooling更能捕捉图像的变化。

3、层数更深、特征图更宽

图像更深是小尺寸卷积核,更宽是由于更多的卷积核数。

4、全连接转卷积

在测试时采用卷积代替全连接测试,可以使得输入图片的尺寸不受限制,详细可以参考https://blog.csdn.net/fanzy1234/article/details/85216087

5、Muti-Scale多尺度图片数据扩增

将原始图像进行不同尺度S的缩放,在缩放后的图片上随机裁剪成224x224的图片,这样就可以大大增加训练图片的数量

6、预训练

在训练深层网路时,可以用训练浅层网络得到的参数作为深层网络的初始化参数,增加深层网络的收敛速度。

作者把浅层网络A的前4个卷积层(感觉是每个阶段的以第一卷积层)和最后全连接层的权值当做其他网络的初始值,未赋值的中间层通过随机初始化。

三 keras实现


from utils import loaddata
from utils import loss_history
from utils import plot_loss
from keras.utils.vis_utils import plot_model

import os
import cv2
import numpy as np

from keras.models import Sequential
from keras.layers import Dense,Conv2D,MaxPooling2D,Flatten,BatchNormalization,Dropout
from keras.optimizers import SGD
from keras.utils import np_utils

path='/home/fanzy/data/catdog/train/'
size=224
x_train,x_test,y_train,y_test=loaddata.catdogimg(path,size,0.3)

model=Sequential()
model.add(Conv2D(64,(3,3),padding='same',input_shape=(size,size,3),activation='tanh'))
model.add(BatchNormalization())
model.add(Conv2D(64,(3,3),padding='same',activation='tanh'))
model.add(BatchNormalization())
model.add(MaxPooling2D((2,2),strides=2))

model.add(Conv2D(128,(3,3),padding='same',activation='tanh'))
model.add(Conv2D(128,(3,3),padding='same',activation='tanh'))
model.add(MaxPooling2D((2,2),strides=2))

model.add(Conv2D(256,(3,3),padding='same',activation='tanh'))
model.add(Conv2D(256,(3,3),padding='same',activation='tanh'))
model.add(MaxPooling2D((2,2),strides=2))

model.add(Conv2D(512,(3,3),padding='same',activation='tanh'))
model.add(Conv2D(512,(3,3),padding='same',activation='tanh'))
model.add(Conv2D(512,(3,3),padding='same',activation='tanh'))
model.add(Conv2D(512,(3,3),padding='same',activation='tanh'))
model.add(MaxPooling2D((2,2),strides=2))

model.add(Conv2D(512,(3,3),padding='same',activation='tanh'))
model.add(Conv2D(512,(3,3),padding='same',activation='tanh'))
model.add(Conv2D(512,(3,3),padding='same',activation='tanh'))
model.add(Conv2D(512,(3,3),padding='same',activation='tanh'))
model.add(MaxPooling2D((2,2),strides=2))

model.add(Flatten())
model.add(Dense(1024,activation='tanh'))
model.add(Dense(1024,activation='tanh'))
model.add(Dense(1024,activation='tanh'))
model.add(Dense(2,activation='softmax'))

plot_model(model,to_file='vgg.png',show_shapes=True,show_layer_names=False)

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值