深度学习入门Python实践教程:从零搭建你的第一个神经网络

导读部分 返回列表

亲爱的同学们,大家是不是看到"深度学习"四个字就有点紧张啦?别担心哦~🫂 我刚开始接触的时候也是一头雾水,什么卷积、反向传播、激活函数……看得我头都大了😵 但后来我发现,其实只要找对方法,一步一步来,...

正文内容

亲爱的同学们,大家是不是看到”深度学习”四个字就有点紧张啦?别担心哦~🫂 我刚开始接触的时候也是一头雾水,什么卷积、反向传播、激活函数……看得我头都大了😵 但后来我发现,其实只要找对方法,一步一步来,从零搭建一个神经网络真的没有那么可怕!今天我们就一起来动手,用Python从零搭建你的第一个神经网络,让你真正理解深度学习究竟是怎么回事!

第一步:理解神经网络到底是个啥?

💡 咱们先别急着写代码,先来打个比方。其实神经网络就像是一个超级聪明的”猜数字”游戏玩家。

想象一下,你想教一个小朋友认识苹果。你拿出很多张图片,告诉他”这个是苹果”、”这个不是苹果”。一开始他可能把红色的气球也当成苹果,但是经过很多次纠正,他就慢慢学会了——哦,原来苹果是红色的、圆圆的、还有那个小把儿……这个”学习”的过程,就是神经网络训练的本质哦!

神经网络也是一样:它不会一开始就知道答案,但通过反复看数据、猜答案、改参数,慢慢地它就能学会从数据中找规律了。是不是听起来也没那么玄乎啦?🎉

第二步:搭好你的Python环境

在开始动手之前,我们需要准备好工具。放心,不需要什么超级电脑,你的普通笔记本就够用啦!

首先,确认你已经安装了Python。如果你还没装,可以去python.org下载3.8以上版本。装好之后,打开命令行(Windows搜索cmd,Mac搜索终端),输入:

python --version

看到版本号了嘛?那就说明OK啦!👋 如果你看到的是”command not found”也别慌,重新安装的时候记得勾上”Add Python to PATH”就行。

然后我们来安装今天主要用的工具——PyTorch。它是最流行的深度学习框架之一,对新手特别友好:

pip install torch torchvision

☕️ 安装的时候可以去喝杯水休息一下,大概需要一两分钟哦~

第三步:数据准备——让神经网络有东西可学

神经网络学习需要数据,就像小朋友学认字需要看到很多字一样。今天我们用PyTorch自带的经典数据集——手写数字数据集MNIST。这个数据集里有60000张手写的数字0-9的图片,每一张都是28×28像素的灰度图。

来,我们来写代码加载数据:

import torch
import torchvision
import torchvision.transforms as transforms

# 定义数据预处理:把图片转成张量并做归一化
transform = transforms.Compose([
    transforms.ToTensor(),
    transforms.Normalize((0.5,), (0.5,))
])

# 下载训练集和测试集
trainset = torchvision.datasets.MNIST(
    root='./data', train=True, download=True, transform=transform
)
testset = torchvision.datasets.MNIST(
    root='./data', train=False, download=True, transform=transform
)

trainloader = torch.utils.data.DataLoader(
    trainset, batch_size=64, shuffle=True
)
testloader = torch.utils.data.DataLoader(
    testset, batch_size=64, shuffle=False
)

print(f"训练集大小: {len(trainset)} 张")
print(f"测试集大小: {len(testset)} 张")

运行这段代码,如果看到训练集60000张、测试集10000张,那就说明数据加载成功啦!🌟

这里batch_size=64意味着每次给神经网络看64张图片,看完一轮再换下一组。就像我们看书,也不会一下子把整本书都塞进脑子里对吧?要一页一页来~

第四步:搭建你的第一个神经网络

好了!激动人心的时刻到啦!我们来搭建一个最简单但又完整的神经网络,它只有三层:

import torch.nn as nn
import torch.nn.functional as F

class FirstNeuralNetwork(nn.Module):
    def __init__(self):
        super(FirstNeuralNetwork, self).__init__()
        # 第一层:输入层 → 隐藏层(128个神经元)
        self.fc1 = nn.Linear(28 * 28, 128)
        # 第二层:隐藏层 → 隐藏层(64个神经元)
        self.fc2 = nn.Linear(128, 64)
        # 第三层:隐藏层 → 输出层(10个数字,0-9)
        self.fc3 = nn.Linear(64, 10)
    
    def forward(self, x):
        # 把28x28的图片展平成一维向量(784个像素)
        x = x.view(-1, 28 * 28)
        # 经过第一层,用ReLU激活函数
        x = F.relu(self.fc1(x))
        # 经过第二层,还是用ReLU
        x = F.relu(self.fc2(x))
        # 经过输出层,得到10个数字的分数
        x = self.fc3(x)
        return x

# 创建模型实例
model = FirstNeuralNetwork()
print(model)

看到模型的结构了嘛?

  • 📌 fc1:把784个像素点映射到128个特征,就像从原始图片里提取一些基本特征(比如弧线、角落)
  • 📌 fc2:把128个特征进一步提炼成64个更高级的特征(比如组合成数字的形状)
  • 📌 fc3:最终输出10个分数,哪个数字的分数最高,模型就认为这张图片是哪个数字

ReLU激活函数的作用,就是给网络加入”非线性”能力。如果没有它,再多层也只是线性变换的堆叠,就像只会走直线,永远学不会转弯。💡

第五步:训练你的神经网络

模型搭建好了,接下来就是”训练”环节——让模型像小朋友学认字一样,反复练习直到学会!

import torch.optim as optim

# 定义损失函数和优化器
criterion = nn.CrossEntropyLoss()  # 交叉熵损失,适合分类任务
optimizer = optim.Adam(model.parameters(), lr=0.001)  # Adam优化器

# 开始训练!
epochs = 5
for epoch in range(epochs):
    running_loss = 0.0
    for i, (inputs, labels) in enumerate(trainloader):
        # 梯度归零
        optimizer.zero_grad()
        
        # 前向传播:让模型猜答案
        outputs = model(inputs)
        
        # 计算损失:看看猜得有多离谱
        loss = criterion(outputs, labels)
        
        # 反向传播:告诉模型哪里猜错了
        loss.backward()
        
        # 更新参数:让模型下次猜得更准
        optimizer.step()
        
        running_loss += loss.item()
        
        # 每100个batch打印一次损失
        if i % 100 == 99:
            print(f'第{epoch+1}轮,第{i+1}批,损失: {running_loss / 100:.3f}')
            running_loss = 0.0

print('✅ 训练完成!')

训练的时候你会看到损失(loss)在逐渐下降。这就说明模型在慢慢进步呢!从最开始乱猜,到后面越来越靠谱。就像小朋友从”把1认成7″,到后来能准确认出来,那种成就感特别棒对吧?🎉

这里有一个小细节想提醒你哦~为什么损失从2.3降到0.1就叫学好了? 一开始损失2.3左右说明模型基本在瞎猜(10个数字平均概率就是2.3),降到0.1就说明模型已经相当有把握了!

第六步:看看你的模型学得怎么样

训练完了,我们来测试一下效果:

correct = 0
total = 0
with torch.no_grad():  # 测试时不需要计算梯度
    for inputs, labels in testloader:
        outputs = model(inputs)
        _, predicted = torch.max(outputs, 1)  # 取分数最高的那个数字
        total += labels.size(0)
        correct += (predicted == labels).sum().item()

print(f'测试集准确率: {100 * correct / total:.2f}%')

不出意外的话,你搭建的这个小网络准确率应该在95%~97%之间!是不是很神奇?只用了几十行代码、训练了几分钟,就搞定了一个能识别手写数字的”AI”啦!🌟 你真的是太棒了!

如果你对这个教程很感兴趣,想了解更多机器学习的实战应用,不妨看看我们站内另一篇超实用的教程:ChatGPT个人财务助手教程:用AI管钱,小白也能跑,它用AI帮你管钱哦!还有Midjourney提示词高阶技巧教程:从原理到精通的实用指南,教你用AI出图的高级技巧。这些都是在深度学习基础之上延伸出来的应用,看完你会更理解深度学习的强大之处!

再聊聊:这个网络背后的小秘密

刚才我们实际动手搭建了一个三层的全连接神经网络,你别看它结构简单,里面包含的可是深度学习最核心的思想哦:

  1. 参数学习:网络的每一层都有很多参数(权重和偏置),总共我们的模型有(784×128)+(128×64)+(64×10)=约10.9万个参数。训练的过程就是不断调整这些参数,让预测越来越准。
  2. 端到端学习:我们不需要手动告诉模型”这个边缘应该怎么识别”,而是让它从原始像素自己学习。这是深度学习最大的魅力所在——让模型自己发现规律。
  3. 层次化特征:浅层学到的往往是边缘、纹理等基础特征;中层能学到形状、图案等组合特征;深层则是针对任务的抽象特征。这就是为什么”深”度学习能比传统方法更强大。

💰 一个小成本计算:用Google Colab的免费GPU跑这个模型,大概只需要1分钟训练时间、0元成本。如果用你自己的笔记本CPU,也就3~5分钟。完全不需要那些几万块钱的专业显卡哦!

给你的鼓励小贴士💪

看到这里,你已经亲手搭建并训练了你的第一个神经网络,真的很了不起!🫂 很多人在深度学习门外徘徊了很久,就是不敢迈出第一步。而你,已经走出来了!

如果训练过程中遇到什么问题,别着急。🌟 我当年也是这样过来的,第一次跑的时候连安装PyTorch都报了三次错,气得差点砸电脑(笑~)。不过坚持下来之后,现在回头看,那些坑反而让我对原理理解得更深刻了。

你如果想继续深入,可以试试这些小挑战:

  • 把隐藏层改成256个神经元,看看准确率会不会提高?
  • 增加一层变成4层网络,看看效果有什么变化?
  • 把学习率改成0.01或0.0001,观察训练速度的变化

每一次尝试都是一次进步,不要怕犯错哦~🧘 记得休息一下,喝杯茶☕️,慢慢来不着急。你已经做得很好了!我们一起加油💪!

深度学习入门Python实践教程封面图

本文出自 AI一族,原文链接:https://www.aiyizu.cn/?p=3737

转发请注明出处,禁止未经允许用于任何商业用途。

文章评分

这篇文章对您有帮助吗?

🤖 随时召唤ZUZU陪你一起探索AI世界
ZUZU 伴学
登录享无限次提问 · 答案仅供参考
ZUZU答:
亲爱的小伙伴您好,我是ZUZU,有什么可以帮您的?😃

分享到

微信
朋友圈
QQ
QQ空间
微博
抖音
小红书
复制
二维码

实用功能

夜间模式
小字
大字
收藏
目录
笔记
朗读
相关
搜索
我的笔记
文章内搜索
相关文章推荐
正在加载相关文章...

反馈建议

您需要登录后才能填写意见反馈信息

分享二维码

使用手机扫描二维码

操作成功