现代卷积网络实战系列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
相关推荐
EasyDSS13 分钟前
WebRTC技术下的EasyRTC音视频实时通话SDK,助力车载通信打造安全高效的智能出行体验
人工智能·音视频
北京青翼科技22 分钟前
【PXIE301-211】基于PXIE总线的16路并行LVDS数据采集、1路光纤数据收发处理平台
图像处理·fpga开发·信号处理
jndingxin33 分钟前
OpenCV CUDA模块中逐元素操作------数学函数
人工智能·opencv·计算机视觉
暴龙胡乱写博客35 分钟前
机器学习 --- KNN算法
人工智能·算法·机器学习
极新1 小时前
极新携手火山引擎,共探AI时代生态共建的破局点与增长引擎
人工智能·火山引擎
是麟渊1 小时前
【大模型面试每日一题】Day 17:解释MoE(Mixture of Experts)架构如何实现模型稀疏性,并分析其训练难点
人工智能·自然语言处理·面试·职场和发展·架构
Poseidon、2 小时前
2025年5月AI科技领域周报(5.5-5.11):AGI研究进入关键验证期 具身智能开启物理世界交互新范式
人工智能·agi
天机️灵韵2 小时前
字节开源FlowGram与n8n 技术选型
人工智能·python·开源项目
jixunwulian2 小时前
AI边缘网关_5G/4G边缘计算网关厂家_计讯物联
人工智能·5g·边缘计算
boooo_hhh2 小时前
第28周——InceptionV1实现猴痘识别
python·深度学习·机器学习