导读部分 返回列表
亲爱的同学们,大家是不是看到"深度学习"四个字就有点紧张啦?别担心哦~🫂 我刚开始接触的时候也是一头雾水,什么卷积、反向传播、激活函数……看得我头都大了😵 但后来我发现,其实只要找对方法,一步一步来,...
正文内容
亲爱的同学们,大家是不是看到”深度学习”四个字就有点紧张啦?别担心哦~🫂 我刚开始接触的时候也是一头雾水,什么卷积、反向传播、激活函数……看得我头都大了😵 但后来我发现,其实只要找对方法,一步一步来,从零搭建一个神经网络真的没有那么可怕!今天我们就一起来动手,用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出图的高级技巧。这些都是在深度学习基础之上延伸出来的应用,看完你会更理解深度学习的强大之处!
再聊聊:这个网络背后的小秘密
刚才我们实际动手搭建了一个三层的全连接神经网络,你别看它结构简单,里面包含的可是深度学习最核心的思想哦:
- 参数学习:网络的每一层都有很多参数(权重和偏置),总共我们的模型有(784×128)+(128×64)+(64×10)=约10.9万个参数。训练的过程就是不断调整这些参数,让预测越来越准。
- 端到端学习:我们不需要手动告诉模型”这个边缘应该怎么识别”,而是让它从原始像素自己学习。这是深度学习最大的魅力所在——让模型自己发现规律。
- 层次化特征:浅层学到的往往是边缘、纹理等基础特征;中层能学到形状、图案等组合特征;深层则是针对任务的抽象特征。这就是为什么”深”度学习能比传统方法更强大。
💰 一个小成本计算:用Google Colab的免费GPU跑这个模型,大概只需要1分钟训练时间、0元成本。如果用你自己的笔记本CPU,也就3~5分钟。完全不需要那些几万块钱的专业显卡哦!
给你的鼓励小贴士💪
看到这里,你已经亲手搭建并训练了你的第一个神经网络,真的很了不起!🫂 很多人在深度学习门外徘徊了很久,就是不敢迈出第一步。而你,已经走出来了!
如果训练过程中遇到什么问题,别着急。🌟 我当年也是这样过来的,第一次跑的时候连安装PyTorch都报了三次错,气得差点砸电脑(笑~)。不过坚持下来之后,现在回头看,那些坑反而让我对原理理解得更深刻了。
你如果想继续深入,可以试试这些小挑战:
- 把隐藏层改成256个神经元,看看准确率会不会提高?
- 增加一层变成4层网络,看看效果有什么变化?
- 把学习率改成0.01或0.0001,观察训练速度的变化
每一次尝试都是一次进步,不要怕犯错哦~🧘 记得休息一下,喝杯茶☕️,慢慢来不着急。你已经做得很好了!我们一起加油💪!

本文出自 AI一族,原文链接:https://www.aiyizu.cn/?p=3737
转发请注明出处,禁止未经允许用于任何商业用途。