手把手教你用CNN实现MNIST手写数字识别——深度学习入门(1)

利用CNN对MNIST训练 目录 1 简介 2 数据集 3 数据预处理 3.1 数据集导入 3.2 像素值归一化处理 3.3 计算图片的高和宽 3.4 读取标签并进行one-hot编码 3.5 数据集划分 4 参数与网络设置 4.1 参数设置 4.2 网络设置 5 损失设置与训练 6 结果展示 1 简介 MNIST是一个入门级的计算机视觉数据集,它包含各种从0到9的手写数字图片以及对应的标签,本篇使用了简单卷积神经网络来实现手写图片预测,主要目的在于熟悉CNN的操作。 首先,设置一些参数 .. 阅读详情

1. 项目背景与目标

1.1 为什么选择MNIST数据集?

MNIST作为深度学习入门首选数据集,具备以下优势:

  • 数据质量高:60,000张训练图+10,000张测试图,均经过尺寸标准化和居中处理
  • 特征复杂度适中:28x28像素灰度图,兼顾计算效率与特征学习需求
  • 丰富的基准结果:学术界已积累大量模型对比数据(如MLP 98%、CNN 99.5%+)
  • 快速验证可行性:单GPU训练仅需数分钟,适合教学演示与原型验证

1.2 新手价值点

即使零基础,通过本项目也能掌握图像分类任务的通用方法论,为后续实战(如医学影像识别、自动驾驶标志检测)打下坚实基础! 🚀


2、环境配置与工具准备

2.1 PyTorch框架安装与GPU加速设置

如果设备上支持GPU就使用GPU,否则使用CPU(一般游戏本都有GPU)
【超详细教程】2024最新Pytorch安装教程(同时讲解安装CPU和GPU版本)

2.2 依赖库导入与硬件检查(torch.cuda验证)

import torch
import torch.nn as nn
import matplotlib.pyplot as plt
import torchvision
import numpy as np
# 设置硬件设备,如果有GPU则使用,没有则使用cpu
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
device  
 # 如果输出结果是“device(type='cuda')”,则说明GPU版本的pytorch安装成功

3、MNIST数据集深度解析

3.1 数据集加载与基本统计

这里先构建训练集和测试集,因为torchvision.datasets里有现成的MNIST数据集,我们可以直接下载,下载后再探索数据集。
由于PyTorch/TensorFlow的底层计算依赖Tensor,我们需要把数据转换成Tensor格式。
· 原始图像的像素值范围不符合神经网络输入要求
MNIST原始数据是0-255的整数像素值,直接输入会导致两个问题:

  • ○ 梯度爆炸/消失:大范围数值导致反向传播不稳定
  • ○ 收敛速度慢:不同特征尺度差异大

· ToTensor()转换的核心作用

  • 将PIL Image或NumPy数组 → PyTorch Tensor(维度变为 [C, H, W])
  • 像素值归一化:[0,255] → [0.0, 1.0](浮点数)
train_ds = torchvision.datasets.MNIST('data', 
                                      train=True, 
                                      transform=torchvision.transforms.ToTensor(), # 将数据类型转化为Tensor
                                      download=True)

test_ds  = torchvision.datasets.MNIST('data', 
                                      train=False, 
                                      transform=torchvision.transforms.ToTensor(), # 将数据类型转化为Tensor
                                      download=True)

3.2 数据格式对比:Tensor转换 vs PIL图像 vs NumPy数组

(1)先查看已经转换成Tensor格式的MNIST数据长什么样

image_,label_=train_ds[0]
# 打印数据类型和基本信息
print("原始数据类型:", type(image_))  # 原始数据类型: <class 'torch.Tensor'>
print("图像模式:", image_.mode)       # 图像模式: <built-in method mode of Tensor object at 0x0000021FD5BEFEF0>
print("图像大小:", image_.size)       # 图像大小: <built-in method size of Tensor object at 0x0000021FD5BEFEF0>
print("标签:", label_)                # 标签: 5
print("Tensor形状:", image_.shape)         # 输出: torch.Size([1, 28, 28])
print("像素值范围:", image_.min(), "-", image_.max())  # 输出: 0.0 - 1.0

(2)查看原始数据类型(PIL.Image)

# 加载MNIST数据集,不设置transform(默认返回PIL图像)
raw_train_ds = torchvision.datasets.MNIST(
    root='data', 
    train=True, 
    download=True  # 不指定transform,默认返回PIL.Image
)
# 获取第一个样本的图像和标签
image, label = raw_train_ds[0]

# 打印数据类型和基本信息
print("原始数据类型:", type(image))  # 输出: <class 'PIL.Image.Image'>
print("图像模式:", image.mode)       # 输出: 'L'(表示灰度图)
print("图像大小:", image.size)       # 输出: (28, 28)
print("标签:", label)               # 输出: 5(示例标签)

# 显示图像
image.show()  # 会调用系统默认图片查看器显示

系统会自动弹出这样的图片,这是MNIST数据集的第一个图片
系统弹出的图片
(3) 查看原始像素值(转换为NumPy数组)
如果想进一步查看原始的像素值(0-255的整数),可以将PIL图像转为NumPy数组:

# 将PIL图像转为NumPy数组
image_np = np.array(image)
print("\nNumPy数组形状:", image_np.shape)  # 输出: (28, 28)
print("像素值范围:", np.min(image_np), "-", np.max(image_np))  # 输出: 0 - 255
print("第一行像素值示例:", image_np)  # 打印像素值

关键点总结

  1. 默认返回类型:
    MNIST数据集未经转换时返回的是PIL.Image对象(单通道灰度图,模式为'L')。
  2. 像素值范围:
    原始像素值为0-255的整数,ToTensor()会将其归一化为0.0-1.0的浮点数。
  3. 维度差异:
    • PIL/Numpy格式:(H, W)
    • Tensor格式:(C, H, W)(自动添加通道维度)。

3.3数据加载器(DataLoader)的配置与优化 与 随机样本展示与像素值分析

为了简化操作,我们这里直接构建dataloader数据加载器查看数据,后面会用到它训练模型。

  • 数据加载器的核心功能:
    • 核心功能:批量数据加载
    • 数据随机化:防止模型过拟合
    • 多进程加速:提升数据加载效率
    • 处理不完整批次(drop_last)
    • 支持自定义数据集和复杂操作
batch_size = 32

train_dl = torch.utils.data.DataLoader(train_ds, 
                                       batch_size=batch_size, 
                                       shuffle=True)

test_dl  = torch.utils.data.DataLoader(test_ds, 
                                       batch_size=batch_size)  # 为什么测试集不用shuffle?
                                                               # 测试是为了检查真实能力,就像考试不能打乱考卷顺序。
# 取一个批次查看数据格式
# 数据的shape为:[batch_size, channel, height, weight]
# 其中batch_size为自己设定,channel,height和weight分别是图片的通道数,高度和宽度。
imgs, labels = next(iter(train_dl))
print(imgs.shape)     # 输出:torch.Size([32, 1, 28, 28])

这里取dataloader的第一个batchsize的前20个样本进行可视化
我简述一下enumerate函数的作用,方便初学者理解。

enumerate 函数的作用

作用参数说明返回值使用场景
在循环中同时获取 索引 和 元素值1. iterable: 可迭代对象(如列表、元组、字符串等)
2. start (可选): 索引起始值(默认从0开始)
生成 (索引, 元素) 格式的元组迭代器需要同时操作索引和元素的场景(例如:遍历列表时记录位置、生成带序号的数据、批量处理数据时定位问题)
import numpy as np

 # 指定图片大小,图像大小为20宽、5高的绘图(单位为英寸inch)
plt.figure(figsize=(20, 5)) 
for i, imgs in enumerate(imgs[:20]):
    # 维度缩减
    npimg = np.squeeze(imgs.numpy())
    # 将整个figure分成2行10列,绘制第i+1个子图。
    plt.subplot(2, 10, i+1)
    plt.imshow(npimg, cmap=plt.cm.binary)
    plt.axis('off')
    
#plt.show()  如果你使用的是Pycharm编译器,请加上这行代码

输出结果如下:
随机样本展示

3.4 探索dataloader的常用属性

本篇文章中训练集的dataloader被命名为train_dl,后续提到的train_dl都是dataloader,还请各位初学者注意。

字段值/描述
DatasetMNIST(手写数字数据集)
Number of datapoints60,000(训练样本总数)
Root locationdata(本地存储路径)
SplitTrain(训练集分支)
StandardTransformPyTorch 标准数据预处理流程
TransformToTensor()(将图像转换为张量,归一化像素值到 [0.0, 1.0] 范围)

查看数据集信息

train_dl.dataset 

输出结果:

Dataset MNIST
    Number of datapoints: 60000
    Root location: data
    Split: Train
    StandardTransform
Transform: ToTensor()

查看数据集的类别标签

train_dl.dataset.classes 

输出结果:

['0 - zero',
 '1 - one',
 '2 - two',
 '3 - three',
 '4 - four',
 '5 - five',
 '6 - six',
 '7 - seven',
 '8 - eight',
 '9 - nine']
len(train_dl.dataset)    # 训练样本总数,输出结果:60000
len(train_dl)            # 批次数目,1875(60000/32)

4、卷积神经网络(CNN)模型构建

4.1 网络结构设计:卷积层、池化层与全连接层

import torch.nn.functional as F

num_classes = 10  # 图片的类别数

class Model(nn.Module):
     def __init__(self):
        super().__init__()
         # 特征提取网络
        self.conv1 = nn.Conv2d(1, 32, kernel_size=3)  # 第一层卷积,卷积核大小为3*3
        self.pool1 = nn.MaxPool2d(2)                  # 设置池化层,池化核大小为2*2
        self.conv2 = nn.Conv2d(32, 64, kernel_size=3) # 第二层卷积,卷积核大小为3*3   
        self.pool2 = nn.MaxPool2d(2) 
                                      
        # 分类网络
        self.fc1 = nn.Linear(1600, 64)          
        self.fc2 = nn.Linear(64, num_classes)
     # 前向传播
     def forward(self, x):
        x = self.pool1(F.relu(self.conv1(x)))     
        x = self.pool2(F.relu(self.conv2(x)))

        x = torch.flatten(x, start_dim=1)

        x = F.relu(self.fc1(x))
        x = self.fc2(x)
       
        return x

4.2 使用torchinfo分析模型参数(12.2万可训练参数)

使用torchinfo可以更好的查看已经搭建好的神经网路的参数。

from torchinfo import summary
# 将模型转移到GPU中(我们模型运行均在GPU中进行)
model = Model().to(device)

summary(model)

输出结果如下:

=================================================================
Layer (type:depth-idx)                   Param #
=================================================================
Model                                    --
├─Conv2d: 1-1                            320
├─MaxPool2d: 1-2                         --
├─Conv2d: 1-3                            18,496
├─MaxPool2d: 1-4                         --
├─Linear: 1-5                            102,464
├─Linear: 1-6                            650
=================================================================
Total params: 121,930
Trainable params: 121,930
Non-trainable params: 0
=================================================================

5、模型训练与验证

5.1 损失函数(CrossEntropyLoss)与优化器(SGD)选择

loss_fn    = nn.CrossEntropyLoss() # 创建损失函数
learn_rate = 1e-2 # 学习率
opt        = torch.optim.SGD(model.parameters(),lr=learn_rate)  # 这里使用SGD随机梯度下降,MNIST数据简单,SGD足以胜任

5.2 训练函数与测试函数的实现

训练函数

# 训练循环
def train(dataloader, model, loss_fn, optimizer):
    size = len(dataloader.dataset)  # 训练集的大小,一共60000张图片
    num_batches = len(dataloader)   # 批次数目,1875(60000/32)

    train_loss, train_acc = 0, 0  # 初始化训练损失和正确率
    
    for X, y in dataloader:  # 获取图片及其标签
        X, y = X.to(device), y.to(device)
        
        # 计算预测误差
        pred = model(X)          # 网络输出
        loss = loss_fn(pred, y)  # 计算网络输出和真实值之间的差距,targets为真实值,计算二者差值即为损失
        
        # 反向传播三部曲
        optimizer.zero_grad()  # grad属性归零     (梯度归零)
        loss.backward()        # 反向传播         (梯度计算)
        optimizer.step()       # 每一步自动更新    (梯度更新)
         
        # 记录acc与loss
        train_acc  += (pred.argmax(1) == y).type(torch.float).sum().item()
        train_loss += loss.item()
            
    train_acc  /= size
    train_loss /= num_batches

    return train_acc, train_loss

测试函数

def test (dataloader, model, loss_fn):
    size        = len(dataloader.dataset)  # 测试集的大小,一共10000张图片
    num_batches = len(dataloader)          # 批次数目,313(10000/32=312.5,向上取整)
    test_loss, test_acc = 0, 0
    
    # 当不进行训练时,停止梯度更新,节省计算内存消耗
    with torch.no_grad():
        for imgs, target in dataloader:
            imgs, target = imgs.to(device), target.to(device)
            
            # 计算loss
            target_pred = model(imgs)
            loss        = loss_fn(target_pred, target)
            
            test_loss += loss.item()
            test_acc  += (target_pred.argmax(1) == target).type(torch.float).sum().item()

    test_acc  /= size
    test_loss /= num_batches

    return test_acc, test_loss

5.4 模型训练与评估

epochs     = 5
train_loss = []
train_acc  = []
test_loss  = []
test_acc   = []

for epoch in range(epochs):
    model.train()
    epoch_train_acc, epoch_train_loss = train(train_dl, model, loss_fn, opt)
    
    model.eval()
    epoch_test_acc, epoch_test_loss = test(test_dl, model, loss_fn)
    
    train_acc.append(epoch_train_acc)
    train_loss.append(epoch_train_loss)
    test_acc.append(epoch_test_acc)
    test_loss.append(epoch_test_loss)
    
    template = ('Epoch:{:2d}, Train_acc:{:.1f}%, Train_loss:{:.3f}, Test_acc:{:.1f}%,Test_loss:{:.3f}')
    print(template.format(epoch+1, epoch_train_acc*100, epoch_train_loss, epoch_test_acc*100, epoch_test_loss))
print('Done')

输出结果:


Epoch: 1, Train_acc:76.5%, Train_loss:0.766, Test_acc:93.5%,Test_loss:0.225
Epoch: 2, Train_acc:94.4%, Train_loss:0.185, Test_acc:96.6%,Test_loss:0.120
Epoch: 3, Train_acc:96.4%, Train_loss:0.120, Test_acc:97.2%,Test_loss:0.092
Epoch: 4, Train_acc:97.2%, Train_loss:0.093, Test_acc:97.7%,Test_loss:0.072
Epoch: 5, Train_acc:97.6%, Train_loss:0.077, Test_acc:98.1%,Test_loss:0.060
Done

6 、可视化与结果展示

import matplotlib.pyplot as plt
#隐藏警告
# import warnings
# warnings.filterwarnings("ignore")               #忽略警告信息
plt.rcParams['font.sans-serif']    = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False      # 用来正常显示负号
plt.rcParams['figure.dpi']         = 100        #分辨率

from datetime import datetime
current_time = datetime.now() # 获取当前时间

epochs_range = range(epochs)

plt.figure(figsize=(12, 3))
plt.subplot(1, 2, 1)

plt.plot(epochs_range, train_acc, label='Training Accuracy')
plt.plot(epochs_range, test_acc, label='Test Accuracy')
plt.legend(loc='lower right')
plt.title('Training and Validation Accuracy')
plt.xlabel(current_time) # 打卡请带上时间戳,否则代码截图无效

plt.subplot(1, 2, 2)
plt.plot(epochs_range, train_loss, label='Training Loss')
plt.plot(epochs_range, test_loss, label='Test Loss')
plt.legend(loc='upper right')
plt.title('Training and Validation Loss')
plt.show()

运行结果如下:
可视化结果

7 、个人总结与复盘

经过本次手写数字识别项目,掌握PyTorch数据管道构建全流程,特别是DataLoader这个完全新的概念,重点感受到了深度学习与机器学习在数据预处理与模型训练的区别;在探索数据集的过程中,对Tensor这个torch中特有的格式有个比较直观的认识。对整个整个CNN神经网络的前向传播与反向传播有了更清晰的认识,着重记忆反向传播三部曲“梯度归零”、“梯度计算”与“梯度更新”。

CNN实现MNIST手写数字识别 关键词:CNN、TensorFlow、卷积、池化、特征图 一. 前言本文用TensorFlow实现了CNN(卷积神经网络)的经典结构LeNet-5, 具体CNN的LeNet-5模型原理见《深度学习(四)卷积神经网络入门学习(1)》,讲得还是比较清楚的。数据来源自MNIST, 为了方便起见,已经准备了一个脚本来自动下载和导入MNIST数据集。它会自动创建一个’MNIST_data’的目录来存储数据。 阅读详情

相关推荐

CNN实现手写数字识别(Pytorch)

CNN(卷积神经网络)主要包括卷积层、池化层和全连接层。输入数据经过多个卷积层和池化层提取图片信息后,最后经过若干个全连接层获得最终的输出。以下基于Pytorch框架搭建一个CNN神经网络实现手写数字识别。

weixin_46599926的博客 1万+

深度学习实战入门——CNN实现MNIST手写数字识别

深度学习实战入门——CNN实现MNIST手写数字识别 今天来从头自己搭一个非常简单的卷积网络,使用的数据集是MNIST. MNIST应该算是一个被用烂了的数据集了,非常非常适合初学,数据量比较小,数据处理、训练和预测的时间都比较短,可以很好地用于把控网络搭建的整个过程。 0x01 数据和自定义函数的准备 MNIST数据集的下载地址是http://yann.lecun.com/exdb/mnist/ ,可能稍微有一点点慢,有耐心即可。一共有四个文件: 文件名 说明 大小 train-image

人形自走写bug机的Blog 1万+

Python基于深度学习的手写数字识别

Python基于深度学习的手写数字识别1.代码的功能和运行方法2. 网络设计3.训练方法4.实验结果分析5.结论 1.代码的功能和运行方法 代码可以实现任意数字0-9的识别,只需要将图片载入网络,或者用鼠标绘画,都可以预测其数字。 1.首先下载压缩包所有文件,安装pytorch,pytorch的安装教程可以在pytorch官网找到(https://pytorch.org/)。 2.然后打开编辑器(...

qq_41094877的博客 8535

深度学习——CNN实现MNIST手写数字的识别

本篇博客记录了学习K同学啊的深度学习100例的第一例的学习过程,主要介绍了CNN神经网络的基本知识,使用方法及使用流程, 简单介绍了数据集的归一化和标准化 激活函数 优化器 损失函数 metrics等配置............

尘心平的博客 2万+

CNN实现MNIST数据集手写数字识别

1.MNIST数据集 MNIST数据集是由0 到9 的手写数字图像构成的。训练图像有6 万张,测试图像有1 万张每一张图片都有对应的标签数字。因此这个测试集就可以作为验证集使用。 MNIST的图像,每张图片是包含28 像素× 28 像素的灰度图像(1 通道),各个像素的取值在0 到255 之间。每张图片都由一个28 ×28 的矩阵表示,每张图片都由一个784 维的向量表示(28*28=784)。 详细介绍参考:http://yann.lecun.com/exdb/mnist/ 2.CNN的基础 卷积和池化

t18438605018的博客 8156

PyTorch实现CNN用于MNIST手写数字识别任务的python完整代码

数据集中的图像经过标准化处理,背景为黑色,数字前景为白色,像素值范围为0-255(通常会归一化至0-1),格式简洁且易于处理,常被用作深度学习入门的“Hello World”级示例(如CNN模型的基础测试),也是评估分类算法性能的基准数据集之一,在PyTorch、TensorFlow等框架中可直接加载调用,适合用于演示数据预处理、模型训练和推理的全流程。MNIST数据集的均值和标准差是预计算好的全局统计量。在第一次卷积操作中,输入是1通道的28×28图像,输出变为16通道的28×28特征图。

搏博的专栏 2135

基于CNN卷积神经网络实现mnist手写数据集识别

CNN理论 CNN结构卷积层卷积运算,填充 步幅 三维数据的运算 多滤波器 批处理 池化层 CNN实现 im2col原理与代码 卷积层与池化层的实现 CNN卷积神经网络的实现 训练CNN

泥签的博客 8555

0基础深度学习项目1:基于Pytorch实现mnist手写数字识别

MNIST手写数字数据集来源于是美国国家标准与技术研究所,是著名的公开数据集之一。(下载后需解压)。我们一般会采用这行代码直接调用,这样就比较简单。MNIST手写数字数据集中包含了70000张图片,其中60000张为训练数据,10000为测试数据,70000张图片均是2828,数据集样本如下:如果我们把每一张图片中的像素转换为向量,则得到长度为2828=784的向量。因此我们可以把训练集看成是一个[60000,784]的张量,第一个维度表示图片的索引,第二个维度表示每张图片中的像素点。

qq_42492684的博客 1871

深度学习:使用卷积神经网络CNN实现MNIST手写数字识别

卷积神经网络是一种多层、前馈型神经网络。从功能上来说,可以分为两个阶段,特征提取阶段和分类识别阶段。特征提取阶段能够自动提取输入数据中的特征作为分类的依据,它由多个特征层堆叠而成,每个特征层又由卷积层和池化层组成。处在前面的特征层捕获图像中局部细节的信息,而后面的特征层能够捕获到图像中更加高层、抽象的信息。MNIST数据集是美国国家标准与技术研究院收集整理的大型手写数字数据库,包含60,000个示例的训练集以及10,000个示例的测试集。其中的图像的尺寸为28*28。

十年以上架构设计经验,专注于软件架构和人工智能领域,对机器视觉、NLP、音视频等领域都有涉猎 6209

通过卷积神经网络(CNN)识别和预测手写数字

本文演示了使用Python的Pytorch库来完成一个卷积神经网络(CNN)来训练MNIST数据集,这个示例能够帮助更好的了解卷积神经网络(CNN)的原理。

eeee~~的博客 2131

深度学习100例-卷积神经网络(CNN)实现mnist手写数字识别 | 第1天

文章目录一、前期工作1. 设置GPU(如果使用的是CPU可以忽略这步)2. 导入数据3. 标准化图片4. 可视化图片5. 调整图片格式二、构建CNN网络模型三、编译模型四、训练模型五、预测六、知识点详解1. MNIST手写数字数据集介绍2. 神经网络程序说明3. 网络结构说明 我的环境: 语言环境:Python3.6.5 编译器:jupyter notebook 深度学习环境:TensorFlow2 一、前期工作 1. 设置GPU(如果使用的是CPU可以忽略这步) import tensorflow

“365天深度学习训练营”报名进行中~ 2万+

用PyTorch实现MNIST手写数字识别(最新,非常详细)

1 MNIST数据集(提取码: zm7q )

qq_45588019的博客 13万+

labview设置工业摄像头外部触发

使用labview对海康MV-CA013-GM相机设置外部触发。 一、硬件部分 1、硬件引脚定义 2、触发模式设置 相机的触发模式分为两种,一种是内触发模式、另外一种是外触发模式。 3、接线图 信号线的地要跟给信号的设备共地。信号线给高电平时触发拍照。 二、软件部分 1、创建vision acquisition 2、选择使用的摄像头。 3、选择模式。 4、在Acquisition Control中设置这些选项。 5、设置保存图片路径 设置保存路径和保存图片的格式。点击完成即可 参考:https:/

qq_43493715的博客 5665

Pytorch入门——手把手教你MNIST手写数字识别

MNIST手写数字识别教程 要开始带组内的小朋友了,特意出一个Pytorch教程来指导一下 [!] 这里是实战教程,默认读者已经学会了部分深度学习原理,若有不懂的地方可以先停下来查查资料 目录MNIST手写数字识别教程1 什么是MNIST?2 使用Pytorch实现手写数字识别2.1 任务目的2.2 开发环境2.3 实现流程3 具体代码实现3.1 数据预处理部分3.1.1 初始化全局变量3.1.2 构建数据集3.2 训练部分3.2.1 构建模型3.2.2 构建迭代器与损失函数3.2.3 构建训练循环3.2

Elwin的博客 9万+

深入浅出:.sh文件在Linux系统中的实战应用与技巧

本文深入浅出地介绍了.sh文件在Linux系统中的实战应用与技巧。从基础概念入手,详细讲解了Bash脚本的运行方法、权限管理,并通过编写自动化备份脚本等实例,展示了如何利用Shell脚本提升工作效率。文章还涵盖了脚本调试、错误处理以及函数、参数解析等进阶技巧,帮助读者从入门到精通,掌握这一强大的自动化工具。

weixin_29243279的博客 351

gradle报错:A problem occurred configuring root project ‘My Application‘.

即使翻译了,我开始也看不懂,到处找网上教程,但都是改环境变量。马虎的我即使看了很多遍,改了很多遍也没反应过来,今天第一次搞gradle,突然就报错了,打印出。好了我就继续看项目了。

m0_59878789的博客 4091

CNN实现mnist手写数字识别

本文使用的是最简单的CNN模型 LeNet-5,来实现mnist手写数字识别,希望可以给像我一样初次学习深度学习的新手带来帮助!

Long4105262004的博客 2229

内网CentOS离线部署LibreOffice:从依赖缺失到服务启动的完整避坑指南

本文详细介绍了在CentOS内网环境中离线部署LibreOffice的完整流程,包括依赖包准备、安装顺序优化及常见报错解决方案。针对金融等封闭网络场景,提供从rpm包选择到服务启动的全套避坑指南,特别解决libXinerama等图形库缺失问题,确保文档转换服务稳定运行。

weixin_33416697的博客 246

从手写数字识别入门深度学习丨MNIST数据集详解

就像无数人从敲下“Hello World”开始代码之旅一样,许多研究员从“MNIST数据集”开启了人工智能的探索之路。

OpenDataLab的博客 4万+

【HCIE】FRR+BFD+OSPF与BGP联动

FRR+BFD+OSPF与BGP联动

Wenrs的博客 1997

J-LINK下载程序出现No Cortex-M Device found in JTAG chain…问题,最全7种解决方法

J-Link下载程序出现No Corect 等的问题的7种方法 后来编辑JLinkSettings.ini文件,找到"Device"项,将其更改Device="Cortex-M0+"

cjmsea的博客 5613

Pytorch入门一:卷积神经网络实现MNIST手写数字识别

1. pytorch介绍 Pytorch是Torch7团队开发的,与Torch的不同之处在于Pytorch使用了Python作为开发语言,同样说明它是一个以Python优先的深度学习框架,它不仅能够实现强大的GPU加速,同时还支持动态神经网络,这是TensorFlow等很多主流框架不支持的。而且Pytorch可以轻松扩展,近两年有赶超TensorFlow的势头 Pytorch中有两种变量类型,...

GuDoerr的博客 1万+

卸载python弹框报错:Could not set file security for file ‘D:\Config.Msi\abd5.rbf‘. Error: 5. Verify...如何解决?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 6491

基于卷积神经网络CNN的手写数字识别

基于卷积神经网络CNN的手写数字识别1.CNN卷积神经网络中的几个概念卷积核(Convolution Kernel)卷积(Convolution)池化(Pooling)2.导入mnist手写数据集3.构建卷积神经网络4.训练卷积神经网络5.使用测试集测试6.参考文献 1.CNN卷积神经网络中的几个概念 想象现在你有一张手写数字图片,你需要识别它是0-9中的哪个数字,一种思路是寻找图片局部的特征,如果这个图片和某个数字的大部分局部特征最相似,则将该图片识别为该数字。 卷积核(Convolution Kerne

AddVH的博客 9331

使用cmd命令查看电脑是不是翻新机 如何查看自己电脑是不是翻新机

最近pdd啥的百亿补贴啊,什么品牌店啊,很多“假一赔十”,绝对“正品”都蹦出来了,很多人拿到以后,也上网查了各种鉴别方式,包括区分是不是翻新机之类的。本人亲自踩坑“pdd品牌店”,“假一赔十”,“绝对正品”等店铺,跟大家分享一下我得鉴别经验(说道分享鉴别经验了,大家也就不用好奇了,我肯定是买到翻新机了,mmp)。 第一步:准备好手机,开始录屏,没有完整的拆箱视频,可能不容易退货退款 第二步:拆箱,查看屏幕划痕(用手机闪光灯看,要不然看不清),然后查看屏幕有没有被擦过的痕迹 第三步:查看USB孔等插口有没有划

weixin_39417324的博客 1万+

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Keras入门级MNIST手写数字识别超级详细教程

MNIST 手写数字分类数据集 该MNIST数据集是代表标准和技术数据集的改良研究所的缩写。 它是一个包含 60,000 张 0 到 9 之间的手写单个数字的 60,000 个小正方形 28×28 像素灰度图像的数据集。 任务是将给定的手写数字图像分类为 10 个类别之一,代表从 0 到 9 的整数值,包括 0 到 9。 它是一个广泛使用且深入理解的数据集,并且在大多数情况下已“解决”。表现最好的模型是深度学习卷积神经网络,其分类准确率超过 99%,在保持测试数据集上的错误率在 0.4% 到 0.2

xfxuezhang.cn 2万+

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

下一篇: 【保姆级教程】PyTorch实战CIFAR-10:从零构建CNN,手撕卷积/池化计算!——深度学习入门(2)
Meraki____
博客等级 码龄4年 59粉丝 7原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值