RNN实战之一 -------------------------------------RNN 实现MNIST手写数字分类

本文通过将MNIST手写数字图片转化为28维序列,利用RNN进行分类,实验结果显示在验证集上达到98%准确率。然而,由于图片信息的无序性和RNN的序列计算限制,RNN在处理此类数据时效率较低,相比之下,卷积神经网络表现更优。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

首先需要将图片数据转化为一个序列数据,MNIST手写数字的图片大小是28×28,那么可以将每张图片看作是长为28的序列,序列中的每个元素的特征维度是28,这样就将图片变成了一个序列。同时考虑到循环神经网络的记忆性,所以图片从左往右输入网络的时候,网络可以记忆住前面观察到的东西,也就是说一张图片虽然被切割成了28份,但是网络能够通过记住前面的部分,同时和后面的部分结合 得到最后预测数字的输出结果,所以从理论上而言是行得通的。

实验代码

实验代码如下:

import torch
import torch.nn as nn
from torchvision import transforms as transform
from torchvision.datasets import MNIST
from torch.utils.data import DataLoader
from datetime import datetime
from torch.autograd import Variable

data_tf = transform.Compose([
    transform.ToTensor(),
    transform.Normalize([0.5], [0.5])
])

train_dataset = MNIST('./data', train=True, download=True, transform=data_tf)
test_dataset = MNIST('./data', train=False, transform=data_tf)

train_data_loader = DataLoader(train_dataset, batch_size=32, shuffle=True, num_workers=0)
test_data_loader = DataLoader(test_dataset, batch_size=32, shuffle=False, num_workers=0)


class rnn_classification(nn.Module):
    def __init__(self, dim_in, dim_hidden, layer_num, n_class):
        super
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值