Pytorch的学习——残差神经网络

本文介绍了残差神经网络的起源,旨在解决深层神经网络中的梯度爆炸、梯度弥散和网络退化问题。通过残差单元的跳层连接,使得网络能更好地训练。举例展示了在Pytorch中实现残差网络的效果,最终达到约99.32%的训练准确率。残差网络可以视为LSTM与批标准化的结合,但不包含门控机制。
摘要由CSDN通过智能技术生成

残差神经网络

残差神经网络产生的原因:为了更好的神经网络效果,研究人员想到了深层神经网络,即在浅层神经网络的基础上加更多的神经网络层,但是因为过拟合等的原因深层网络可能准确率还不如浅层网络,尽管误差值差不多,所以研究人员想到了添加恒等映射网络层,即数据在通过该层时输入和输出一样,这样结果再差也不会差过浅层网络。
然而激活函数很难拟合y=x这个函数,所以研究人员想到了将单元的输入直接与单元输出加在一起,然后再激活,即残差单元可以以跳层连接的形式实现。那么期望的输出:H(x)=F(x)+x,F(x)就是输入x经过残差模块计算的结果。

例子

import torch
import torch.nn as nn
import torch.utils.data as Data
import torchvision
import torchvision.transforms as transforms

# 判断是否启用GPU计算
device = torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')

# 超参数
EPOCHS = 80              # 批处理的次数
BATCH_SIZE = 100         # 批处理时,每次提取的数据个数
LR = 0.001               # 学习效率

# 图像预处理
transform = transforms.Compose([
    transforms.Pad(4),                  # 图片的边界以0填充
    transforms.RandomHorizontalFlip(),  # 随机水平翻转,概率为0.5
    transforms.RandomCrop(32),          # 给定大小的图片的随机剪辑
    transforms.ToTensor()               # 转化数据类型为tensor
])

# 训练集、测试集加载
train_data = torchvision.datasets.MNIST(
    root='./mnist',
    train=True,
    transform=transform,
    download=False
)
train_loader = Data.DataLoader(dataset=train_data, BATCH_SIZE=BATCH_SIZE, shuffle=True)
test_data = torchvision.datasets.MNIST(root='./mnist/', train=False,  transform=transform)
test_loader = Data.DataLoader(dataset=test_data, BATCH_SIZE=BATCH_SIZE, shuffle=True)

# 残差模块的定义
class Residual_Block(nn.Module):
    def __init__(self, i_channel, o_channel, stride=1, down_sample=None):
        
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值