自己动手搭建卷积神经网络实现手写数字识别(Mnist数据集)

目录

一、配置环境

二、模型创建

三、模型训练

四、测试手写数字


一、配置环境

  1. 安装anaconda

  2. 创建anaconda虚拟环境

  3. 在环境下安装依赖(注意torch和cuda的版本要匹配,否则不能调用GPU)

二、模型创建

设计一个可以用于图像分类的卷积神经网络,首先明确输入的size大小为24*24的灰度图像,在此基础上使用公式

$n'=\lfloor\frac{(n+2p-k)}{s}\rfloor+1$

计算在前向传播的过程中,图片的尺寸变化,其中p是padding,k是kernel的边长,s是stride

我这里简单设计了一个卷积模型如下:

# 定义网络
class CustomNet(nn.Module):
    def __init__(self):
        super(CustomNet, self).__init__()
        self.features = nn.Sequential(
            # inputsize is 1 * 24 * 24
            nn.Conv2d(1, 16, 3, 2, 1),  # 输入通道 1(灰度图像),输出通道 16
            nn.ReLU(),
            # 16 * 12 * 12
            nn.Conv2d(16, 32, 5, 1, 2),
            nn.ReLU(),
            # 32 * 12 * 12
            nn.MaxPool2d(2, 2),
            # 32 * 6 * 6
            nn.Conv2d(32, 20, 5, 1, 2),
            nn.ReLU()
            # 20 * 6 * 6
        )
        self.fc = nn.Sequential(
            nn.Linear(20 * 6 * 6, 30),
            nn.ReLU(),
            # 20 * 6 * 6 -> 30
            nn.Linear(30, 10),
            # 30 -> 10
            nn.Softmax(dim=1)  # 改为 dim=1,因为 Softmax 需要指定维度
        )
​
    def forward(self, x):
        x = self.features(x)
     
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值