深度学习实战2-残差神经网络ResNet

深度学习实战2-残差神经网络ResNet



前言

ResNet将网络层训练为残差函数以克服退化问题。退化问题是当网络层数变得非常高时,深度神经网络的准确性会随着层数的增加而增加,然后饱和,最后会开始下降。


一、残差学习

如果H(x)是需要几层学习的映射,则训练的残差函数

                      F(x)=H(x)−x

相反的,原来的功能变成了F(x)+x
在参数化形式中,这可以写成

                        F(x,{Wi})+x

当特征图大小F(x,Wi)和x不同时,使用学习权重进行线性投影Ws

                    ​F(x,{Wi})+Ws·x

二、残差块

它包含两个3×3卷积层。
在这里插入图片描述

三、数据集预处理

代码如下(示例):

import torch
import torch.nn as nn
import torchvision
import torchvision.transforms as transforms
import numpy as np
import random

device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')


# 神经网络参数设置
num_epochs = 20 # 回合数
learning_rate = 0.001 # 学习率

transform_train = transforms.Compose([
    transforms.RandomCrop(32, padding=4),
    transforms.RandomHorizontalFlip(),
    transforms.ToTensor(),
    transforms.Normalize(mean=[0.507, 0.487, 0.441], std=[0.267, 0.256, 0.276]) # 图片有RGB三个输入通道
])

transform_test = transforms.Compose([
    transforms.ToTensor(),
    transforms.Normalize(mean=[0.507, 0.487, 0.441], std=[0.267, 0.256, 0.276])
])

# 使用CIFAR-10数据集 
# 读取数据集
trainset = torchvision.datasets.CIFAR10(root='./data',
                                         train=True,
                                         download=True,
                                         transform=transform_train)
# 迭代数据集,加batch
train_loader = torch.utils.data.DataLoader(
    trainset, batch_size=200, shuffle=True, num_workers=0)

testset = torchvision.datasets.CIFAR10(root='./data',
                                        train=False,
                                        download=True,
                                        transform=transform_test)
test_loader = torch.utils.data.DataLoader(
    testset, batch_size=200, shuffle=False, num_workers=0)

四、定义残差块的一个子卷积层

代码如下(示例):

def conv3x3(in_channels, out_channels, stride=1):
    return nn.Conv2d(
        in_channels=in_channels,  # 输入通道
  
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值