经典的神经网络-VGGNet

VGGNet是由Visual Geometry Group和DeepMind合作研发的深度卷积网络,以其16-19层的深度和重复的3*3卷积层+2*2最大池化层设计著称。虽然训练过程耗时长,但其在图像识别任务上的性能表现优秀,接近人眼识别水平。本文将介绍VGGNet的结构和实现,以及如何构建类似的网络。附有Inception Net和ResNet的相关代码链接。
摘要由CSDN通过智能技术生成

      VGGNet是牛津大学计算机视觉组(Visual Geometry Grouop)和Google DeepMind公司的研究员一起研发的深度卷积神经网络。该网络通过反复堆叠3*3的卷积核和2*2的最大池化层,构建了16~19层卷积神经网络(有多个版本)。VGGNet训练时使用了4块Geforce GTX Titan GPU并行计算,也要耗时2~3周才能训练完。因此,我们依然不训练数据,而是构造出VGGNet网络,并评测其forward耗时和backward耗时。

      代码依然很简单,为了避免由于多个隐层致使程序臃肿,我们先定义卷积层函数和全连接层函数。

from datetime import datetime
import math
import time
import tensorflow as tf
#其中input_op是输入的tensor,name是这一层的名称,kh是kernel high即卷积核的高,kw是kernel width是卷积核的宽
#n_out是卷积核数量,即输出通道数,dh是步长的高,dw是步长的宽,p是参数列表,用于存入本层的参数
batch_size=32
num_batches=100
def conv_op(input_op,name,kh,kw,n_out,dh,dw,p):
    n_in=input_op.get_shape()[-1].value  #n_in为输入的通道数
    with tf.name_scope(name) as scope:
        kernel=tf.get_variable(scope+'w',shape=[kh,kw,n_in,n_out],dtype=tf.float32,initializer=tf.contrib.layers.xavier_initializer_conv2d())#使用前面的网络的权重来初始化后面的模型参数
        conv=tf.nn.conv2d(input_op,kernel,(1,kh,kw,1),padding='SAME')
        bias_init_val=tf.constant(0.0,shape=[n_out],dtype=tf.float32)
        biases=tf.Variable(bias_init_val,trainable=True,name='b')
        z=tf.nn.bias_add(conv,biases)
        activation=tf.nn.relu(z,name=scope)
        p+=[kernel,biases]
        return activation

#接下来定义全连接层
def fc_op(input_op,name,n_out,p):
    n_in=input_op.get_shape()[-1].value
    with tf.name_scope(name) as scope:
        kernel=tf.get_variable(scope+'w',shape=[n_in,n_out],dtype=tf.float32,initializer=tf.contrib.layers.xavier_initializer())
        biases=tf.Variable(tf.constant(0.1,shape=[n_out],dtype=tf.float32),name='b')
        activation=tf.nn.relu_layer(input_op,kernel,biases,name='scope')
        p+=[kernel,biases]
        return activation
#再定义最大池化层函数,池化尺寸为kh*kw,步长为dh*dw,padding模式为SAME
def mpool_op(input_op,name,kh,kw,dh,dw):
    return tf.nn.max_pool(input_op,ksize=[1,kh,kw,1],strides=[1,dh,dw,1],padding='SAME',name=name)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值