现代卷积网络实战系列6:PyTorch从零构建ResNet训练MNIST数据集

1、MNIST数据集处理、加载、网络初始化、测试函数

2、训练函数、PyTorch构建LeNet网络

3、PyTorch从零构建AlexNet训练MNIST数据集

4、PyTorch从零构建VGGNet训练MNIST数据集

5、PyTorch从零构建GoogLeNet训练MNIST数据集

6、PyTorch从零构建ResNet训练MNIST数据集

1、ResNet

2、PyTorch构建残差块Residual

python 复制代码
class Residual(nn.Module):
    def __init__(self, in_channel, out_channel, stride, upsamlpe):
        super(Residual, self).__init__()
        self.conv1 = nn.Conv2d(in_channel, out_channel, kernel_size=3, stride=stride, padding=1)
        self.conv2 = nn.Conv2d(out_channel, out_channel, kernel_size=3, stride=1, padding=1)
        self.conv3 = nn.Conv2d(in_channel, out_channel, kernel_size=1, stride=stride)

        self.bn1 = nn.BatchNorm2d(out_channel, affine=False)
        self.bn2 = nn.BatchNorm2d(out_channel, affine=False)

        self.relu1 = nn.ReLU()
        self.relu2 = nn.ReLU()

    def forward(self, x):
        out = self.relu1(self.bn1(self.conv1(x)))

        out = self.bn2(self.conv2(out))

        x = self.conv3(x)
        out = self.relu2(out + x)

        # print(out.shape)

        return out

3、PyTorch构建ResNet

python 复制代码
class ResNet(nn.Module):
    def __init__(self, num_classes):
        super(ResNet, self).__init__()
        self.conv1 = nn.Conv2d(1, 64, kernel_size=1)
        self.maxpool1 = nn.MaxPool2d(3, stride=2, padding=1)

        self.resblock1 = Residual(64, 64, 1, True)
        self.resblock2 = Residual(64, 64, 1, True)
        self.resblock3 = Residual(64, 128, 2, True)
        self.resblock4 = Residual(128, 128, 1, True)
        self.resblock5 = Residual(128, 256, 1, True)
        self.resblock6 = Residual(256, 256, 1, True)
        self.resblock7 = Residual(256, 512, 1, True)
        self.resblock8 = Residual(512, 512, 1, True)
        self.avgpool = nn.AdaptiveAvgPool2d((1, 1))
        self.fc = nn.Linear(512, num_classes)

    def forward(self, x):
        x = self.maxpool1(self.conv1(x))
        x = self.resblock1(x)
        x = self.resblock2(x)
        x = self.resblock3(x)
        x = self.resblock4(x)
        x = self.resblock5(x)
        x = self.resblock6(x)
        x = self.resblock7(x)
        x = self.resblock8(x)

        x = self.avgpool(x)
        x = x.reshape(x.shape[0], -1)
        x = self.fc(x)

        return x
相关推荐
飞哥数智坊1 小时前
多次尝试用 CodeBuddy 做小程序,最终我放弃了
人工智能·ai编程
后端小肥肠2 小时前
别再眼馋 10w + 治愈漫画!Coze 工作流 3 分钟出成品,小白可学
人工智能·aigc·coze
唐某人丶5 小时前
教你如何用 JS 实现 Agent 系统(2)—— 开发 ReAct 版本的“深度搜索”
前端·人工智能·aigc
FIT2CLOUD飞致云5 小时前
九月月报丨MaxKB在不同规模医疗机构的应用进展汇报
人工智能·开源
阿里云大数据AI技术5 小时前
【新模型速递】PAI-Model Gallery云上一键部署Qwen3-Next系列模型
人工智能
袁庭新5 小时前
全球首位AI机器人部长,背负反腐重任
人工智能·aigc
机器之心6 小时前
谁说Scaling Law到头了?新研究:每一步的微小提升会带来指数级增长
人工智能·openai
算家计算6 小时前
AI配音革命!B站最新开源IndexTTS2本地部署教程:精准对口型,情感随心换
人工智能·开源·aigc
量子位6 小时前
马斯克周末血裁xAI 500人
人工智能·ai编程
算家计算6 小时前
OpenAI最强编程模型GPT-5-Codex发布!可独立编程7小时,编程效率提升10倍
人工智能·ai编程·资讯