现代卷积网络实战系列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

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

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

http://www.niftyadmin.cn/n/5048119.html

相关文章

【linux进程(一)】深入理解进程概念--什么是进程?PCB的底层是什么?

💓博主CSDN主页:杭电码农-NEO💓   ⏩专栏分类:Linux从入门到精通⏪   🚚代码仓库:NEO的学习日记🚚   🌹关注我🫵带你学更多操作系统知识   🔝🔝 Linux进程 1. 前言2. PCB初认…

自动发现、zabbix_proxy代理

自动发现:自己去发现被监控的主机 它能够根据用户事先定义的规则自动添加监控的主机或服务等。 优点 加快Zabbix部署(agent) 简化管理 在快速变化的环境中使用Zabbix,而不需要过度管理 部署自动发现(新机子) rpm -Uvh https://re…

【从0学习Solidity】49. 通用可升级代理

【从0学习Solidity】49. 通用可升级代理 博主简介:不写代码没饭吃,一名全栈领域的创作者,专注于研究互联网产品的解决方案和技术。熟悉云原生、微服务架构,分享一些项目实战经验以及前沿技术的见解。关注我们的主页,探…

【iOS】—— present和push再学习

文章目录 一、push和present二、界面切换的三种需求三、present的若干知识点presenting view controller & presented view controllercontainer view controller 四、示例代码 一、push和present 当我们写项目时经常会使用界面切换来切换不同的视图,当我们需要…

Go开发微信小程序SDK推荐以及简单示例

最近准备用Go语言开发微信小程序,发现会调用很多微信小程序的服务端接口,并且还需要自己封装。于是想着去GitHub上看看,是否有第三方现成的SDK直接拿来使用,结果发现两个非常不错的第三方库。 SDK标准: 这里罗列几点&…

loadEnv是vite的工具函数

loadEnv()函数返回一个对象,这个对象就是根据开发模式还是生产环境加载的.env.development文件里的环境变量,有系统自带的也有自己手写的 loadEnv(第1个参数,第2个参数,第3个参数) 注意:第3个参数如果是“”空字符…

CFGPT: Chinese Financial Assistant with Large Language Model

本文是LLM系列文章,针对《CFGPT: Chinese Financial Assistant with Large Language Model》的翻译。 CFGPT:大型语言模型的中文财务助理 摘要1 引言2 相关工作3 数据集4 模型和训练5 应用6 结论 摘要 大型语言模型(LLM)在金融领…

opencv实现仿射变换和透射变换

##1, 什么是仿射变换? 代码实现 import numpy as np import cv2 as cv import matplotlib.pyplot as plt#设置字体 from pylab import mpl mpl.rcParams[font.sans-serif] [SimHei]#图像的读取 img cv.imread("lena.png")#仿射变换 row…