经典卷积网络

本文介绍了卷积神经网络的几个经典模型,包括Alexnet、VGG、GoogLeNet、CIFAR10上的VGG13实战、ResNet以及DenseNet。Alexnet以8层深度和ReLU激活函数为特点,VGG通过19层和小卷积核提升性能,GoogLeNet采用Inception模块实现高效计算,ResNet利用残差连接解决深度网络的梯度消失问题,DenseNet则通过特征图的直接拼接增强信息传递。
摘要由CSDN通过智能技术生成

Alexnet

Alexnet接收输入位224*224大小的彩色图片数据,经过五个卷积层和三个全连接层后得到样本属于1000个类别的概率分布。为了降低特征图的维度 ,Alexnet在第1、2、5个卷积层后添加了Max Pooling层。网络的参数量达到了60M个。
在这里插入图片描述
Alexnet的创新之处:

  • 层数达到了较深的8层
  • 采用了ReLU激活函数,过去的神经网络大多采用Sigmoid激活,容易出现梯度弥散现象
  • 引入Dropout,Dropout提高了模型的泛化能力,防止过拟合

VGG

VGG16接受224*224大小的彩色图片数据,经过2个Conv-Conv-Pooling单元,和3个Conv-Conv-Conv-Pooling单元的堆叠,最后通过3层全连接层输出当前图片分别属于1000类别的概率分布。
在这里插入图片描述
在这里插入图片描述
VGG的创新之处:

  • 层数提升至19层
  • 全部采用更小的33卷积核,相对于Alexnet中77的卷积核,参数量更少,计算价更低
  • 采用更小的池化层22窗口和步长s=2,而Alexnet中是步长s为2,33的池化窗口

GoogLeNet

GoogLeNet网络采用模块化设计的思想,通过大量堆叠Inception模块,形成了复杂的网络结构。Inception模块的输入是X,通过4个子网络得到4个网络输出,在通道轴上进行拼接,形成Inception模块的输出。

  • 1×1卷积层
  • 1×1卷积层,再通过一个3×3卷积层
  • 1×1卷积层,再通过一个5×5卷积层
  • 3×3最大池化层,再通过1×1卷积层
    在这里插入图片描述
    在这里插入图片描述

CIFAR10与VGG13实战

import tensorflow as tf
from tensorflow.keras import datasets,losses,optimizers,layers,Sequential

(x,y),(x_test,y_test)=datasets.cifar100.load_data()

y=tf.squeeze(y,axis=1)
y_test=tf.squeeze(y_test,axis=1)

print(x.shape,y.shape,x_test.shape,y_test.shape)
train_db=tf.data.Dataset.from_tensor_slices((x,y))
train_db=train_db.shuffle(1000).map(preprocess).batch(128)

test_db=tf.data.Dataset.from_tensor_slices((x_test,y_test))
test_db=test_db.map(preprocess).batch(128)
def preprocess(x,y):
    x=2*tf.cast(x,dtype=tf.float32)/255.-1
    y=tf.cast(y,dtype=tf.int32)
    return x,y
conv_layers=[
    layers.Conv2D(64,kernel_size=[3,3],padding="same",activation=tf.nn.relu),
    layers.Conv2D(64,kernel_size=[3,3],padding="same",activation=tf.nn.relu),
    layers.MaxPool2D(pool_size=[2,2],strides=2,padding="same"),
    
    layers.Conv2D(128,kernel_size=[3,3],padding="same",activation=tf.nn.relu),
    layers.Conv2D(128,kernel_size=[3,3],padding="same",activation=tf.nn.relu),
    layers.MaxPool2D(pool_size=[2,2],strides=2,padding="same"),
    
    layers.Conv2D(256,kernel_size=[3,3],padding="same",activation=tf.nn.relu),
    layers.Conv2D(256,kernel_size=[3,3],padding="same",activation=tf.nn.relu),
    layers.MaxPool2D(pool_size=[2,2],strides=2,padding="same"),
    
    layers.Conv2D(512,kernel_size=[3,3],padding="same",activation=tf.nn.relu),
    layers.Conv2D(512,kernel_size=[3,3],padding="same",activation=tf.nn.relu),
    layers.MaxPool2D(pool_size=[2,2],strides=2,padding="same")
    
    ]
conv_net=Sequential(conv_layers)

fc_net=Sequential([
    layers.Dense(256,activation=tf.nn.relu),
    layers.Dense(128,activation=tf.nn.relu),
    layers.Dense(10,activation=None)
     ])

conv_net.build(input_shape=[4,32,32,3])
fc_net.build(input_shape=[4,512])
conv_net.summary()
fc_net.summary()

for epoch in range(50):
    for step,(x,y) in enumerate(train_db):
        with tf.GradientTape() as tape:
            logits=model(x)
            y_onehot=tf.one_hot(y,depth=10)
            loss=tf.losses.categorical_crossentropy(y_onehot,logits,from_logits=True)
            loss=tf.reduce_mean(loss)
            

variables=conv_net.trainable_variables+fc_net.trainable_variables
grads=tape.gradient(loss,variables)
optimizers.apply_gradients(zip(grads,variables))

ResNet

在这里插入图片描述

DenseNet

DenseNet将前面所有层的特征图信息通过Skip Connection与当前层输出进行聚合,与ResNet的对应位置相加不同,DenseNet采用在通道轴c维度进行拼接操作,聚合特征信息。
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值