【Pytorch】残差神经网络(Residual Networks)

该博客介绍了残差神经网络(ResNet)如何通过跳跃连接解决传统深度神经网络中的梯度消失问题,允许训练更深的模型。博主详细展示了如何用PyTorch构建一个简单的ResNet模型,包括数据预处理、模型定义、训练和测试过程,并在MNIST数据集上达到了99.25%的准确率。在后续工作中,博主计划进一步研究ResNet的不同变体和深度学习的相关知识。

一、背景
传统的神经网络,由于网络层数增加,会导致梯度越来越小,这样会导致后面无法有效的训练模型,这样的问题成为梯度消弭。为了解决这样的问题,引入残差神经网络(Residual Networks),残差神经网络的核心是”跳跃”+“残差块”。通过引入RN网络,可以有效缓解梯度消失的问题,可以训练更深的网络。

二、残差网络的基本模型
下图是一个基本残差块。它的操作是把某层输入跳跃连接到下一层乃至更深层的激活层之前,同本层输出一起经过激活函数输出。
在这里插入图片描述
当对H(x)进行求导时,x求导为1,这样就避免了F(X)导数过小,进而使梯度消失的问题。
有图就是将几个残差块连接在一起。
在这里插入图片描述

三、简单残差神经网络的实现
用Pytorch实现以下残差神经网络模型。
在这里插入图片描述
(1)导入包

import torch
from torch import nn
from torchvision import transforms
from torchvision import datasets
from torch.utils.data import DataLoader
import torch.nn.functional as F
import torch.optim as optim
import matplotlib.pyplot as plt

(2)数据准备

batch_size = 64
transform = transforms.Compose([
    transforms.ToTensor(),
    transforms.Normalize((0.1307, ), (0.3081, ))
])

train_dataset = datasets.MNIST(root='dataset/mnist',
                               train=True,
                               download=True,
                               transform=transform)
train_loader = DataLoader(dataset=train_dataset,
                          batch_size=batch_size,
                          shuffle=True)

test_dataset = datasets.MNIST(root='dataset/mnist',
                              train=False,
                              download=True,
                              transform=transform
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值