第三章: 神经网络原理详解与Pytorch入门
第二部分:深度学习框架PyTorch入门
第二节:Pytorch主要组成模块
内容:数据读取、模型构建、loss函数、Optimizer
PyTorch 提供了构建、训练和评估神经网络模型所需的完整工具链。主要包括四大模块:
-
数据读取(
torch.utils.data
) -
模型构建(
torch.nn
) -
损失函数(
torch.nn
) -
优化器(
torch.optim
)
一、数据读取模块:torch.utils.data
PyTorch 通过 Dataset 和 DataLoader 提供高效灵活的数据加载机制。
1. 自定义 Dataset 类
from torch.utils.data import Dataset
class MyDataset(Dataset):
def __init__(self, data, labels):
self.data = data
self.labels = labels
def __len__(self):
return len(self.data)
def __getitem__(self, idx):
return self.data[idx], self.labels[idx]
2. 使用 DataLoader 批量加载
from torch.utils.data import DataLoader
dataset = MyDataset(data, labels)
dataloader = DataLoader(dataset, batch_size=32, shuffle=True)
二、模型构建模块:torch.nn
提供丰富的层定义与模型构建方式,主要通过继承 nn.Module
实现。
示例:构建简单神经网络
import torch.nn as nn
class Net(nn.Module):
def __init__(self):
super(Net, self).__init__()
self.fc1 = nn.Linear(784, 128)
self.relu = nn.ReLU()
self.fc2 = nn.Linear(128, 10)
def forward(self, x):
x = self.relu(self.fc1(x))
return self.fc2(x)
三、损失函数模块:torch.nn
损失函数用于衡量模型预测值与真实值之间的差距。PyTorch 常用的损失函数包括:
损失函数名称 | 用途 | 示例代码 |
---|---|---|
MSELoss | 回归 | nn.MSELoss() |
CrossEntropy | 多分类 | nn.CrossEntropyLoss() |
BCEWithLogitsLoss | 二分类 | nn.BCEWithLogitsLoss() |
criterion = nn.CrossEntropyLoss()
loss = criterion(output, target)
四、优化器模块:torch.optim
用于更新模型参数以最小化损失函数。
常用优化器:
优化器 | 特点 |
---|---|
SGD | 最基本的随机梯度下降 |
Adam | 自动调整学习率 |
RMSprop | 适用于循环神经网络 |
示例:
import torch.optim as optim
optimizer = optim.Adam(model.parameters(), lr=0.001)
# 训练过程中
optimizer.zero_grad()
loss.backward()
optimizer.step()
五、训练流程简要汇总
for epoch in range(num_epochs):
for inputs, targets in dataloader:
outputs = model(inputs)
loss = criterion(outputs, targets)
optimizer.zero_grad()
loss.backward()
optimizer.step()
小结
模块 | 作用说明 |
---|---|
Dataset/DataLoader | 管理和加载训练数据 |
nn.Module | 构建模型结构 |
nn.Loss | 衡量模型预测与真实标签之间的误差 |
optim.Optimizer | 更新模型参数以减小误差 |