深度学习听着挺吓人,好像得是天才才能搞懂。其实不然,只要你有Python基础,就能轻松上手。深度学习就像搭积木,一层一层堆叠神经网络,让机器学会思考。今天我带你从零开始,用最简单的方式理解深度学习的核心概念。
环境搭建:工欲善其事
搞深度学习,PyTorch是标配。装起来贼简单:
# 安装PyTorch
pip install torch torchvision
# 测试安装是否成功
import torch
print(torch.cuda.is_available()) # 看看能不能用GPU
温馨提示:没GPU也不要慌,CPU也能跑,就是慢点。想省事直接用Google Colab,啥环境都帮你配好了。
张量:深度学习的基本积木
张量说白了就是多维数组,跟numpy的array差不多:
import torch
# 创建张量
x = torch.tensor([[1, 2], [3, 4]])
y = torch.zeros(2, 2) # 全是0的2x2张量
z = torch.randn(2, 2) # 随机生成的2x2张量
# 基本运算
result = x + y # 加法
product = torch.matmul(x, y) # 矩阵乘法
神经网络:照着葫芦画瓢
写个最简单的神经网络,认识手写数字:
import torch.nn as nn
class SimpleNet(nn.Module):
def __init__(self):
super().__init__()
self.flatten = nn.Flatten()
self.layer1 = nn.Linear(784, 128)
self.relu = nn.ReLU()
self.layer2 = nn.Linear(128, 10)
def forward(self, x):
x = self.flatten(x)
x = self.layer1(x)
x = self.relu(x)
x = self.layer2(x)
return x
model = SimpleNet()
就这么几行代码,就能识别数字了,是不是很神奇?
训练模型:像教小孩认字
训练模型就像教小孩认字,要不停地练习和纠正:
import torch.optim as optim
# 准备数据
from torchvision import datasets, transforms
train_data = datasets.MNIST('data', train=True, download=True,
transform=transforms.ToTensor())
# 训练循环
optimizer = optim.SGD(model.parameters(), lr=0.01)
criterion = nn.CrossEntropyLoss()
for epoch in range(3):
for data, target in train_data:
optimizer.zero_grad()
output = model(data)
loss = criterion(output, target)
loss.backward()
optimizer.step()
温馨提示:学习率(lr)设太大模型容易学不会,设太小训练太慢,0.01是个不错的起点。
实战案例:老大爷相机
整个简单的图像分类器,识别照片里是猫还是狗:
class PetClassifier(nn.Module):
def __init__(self):
super().__init__()
self.conv1 = nn.Conv2d(3, 16, 3)
self.pool = nn.MaxPool2d(2, 2)
self.fc1 = nn.Linear(16 * 14 * 14, 2)
def forward(self, x):
x = self.pool(torch.relu(self.conv1(x)))
x = x.view(-1, 16 * 14 * 14)
x = self.fc1(x)
return x
# 使用模型
model = PetClassifier()
img = torch.randn(1, 3, 28, 28) # 假装这是张照片
prediction = model(img)
深度学习没啥神秘的,说到底就是找规律。机器通过大量练习,慢慢学会分辨图像的特征。
写深度学习代码有几个坑得注意:
- 数据维度要搞对,不然运行时报错找半天
- GPU内存别用太狠,显卡也是要休息的
- 记得保存模型,训练一天结果没保存太惨了
- 多打印中间结果,不然出错都不知道错哪了
代码写完了,调参调到头发掉光。不过只要掌握这些基础概念,啥模型都能搞定。深度学习就是这样,入门简单,精通很难。
想玩转深度学习,基础挺重要:线性代数得懂一点,Python得溜一点,最好能整台带显卡的电脑。不过没这些也别怕,慢慢来,从简单的开始,代码敲着敲着就熟练了。