如何使用 Python 的 PyTorch 库进行数据训练?
步骤:
- 导入必要的库
import torch
import torchvision
- 加载数据
# 加载训练数据
train_data = torchvision.datasets.MNIST(root='./data', train=True, download=True)
# 加载测试数据
test_data = torchvision.datasets.MNIST(root='./data', train=False, download=True)
- 创建模型
# 创建一个模型,使用 MNIST 数据集的线性层
model = torch.nn.Linear(784, 10)
- 定义训练函数
def train_model(model, train_data, test_data):
# 训练模型
model.train()
# 循环遍历训练数据
for batch_idx, (data, target) in enumerate(train_data):
# 将数据和标签转换为 PyTorch tensor
data = torch.tensor(data).float()
target = torch.tensor(target).float()
# 训练模型
optimizer.zero_grad()
loss = criterion(model(data), target)
loss.backward()
optimizer.step()
# 每 100 个批次打印一次训练进度
if batch_idx % 100 == 0:
print(f'训练进度:{100 * (batch_idx + 1) / len(train_data)}%')
- 训练模型
# 设置训练参数
optimizer = torch.optim.Adam(model.parameters())
# 开始训练模型
train_model(model, train_data, test_data)
- 测试模型
# 加载测试数据
test_loader = torch.utils.data.DataLoader(test_data, batch_size=64, shuffle=False)
# 遍历测试数据
correct = 0
total = 0
for data, target in test_loader:
# 将数据和标签转换为 PyTorch tensor
data = torch.tensor(data).float()
target = torch.tensor(target).float()
# 预测标签
prediction = model(data)
# 计数正确预测的样本数量
if prediction.item() == target.item():
correct += 1
# 统计总样本数量
total += len(test_loader)
# 打印测试准确率
print(f'测试准确率:{correct / total * 100:.2f}%')
注意:
-
MNIST
是一个包含 784 个像素的 28x28 像素的图像数据集。 -
torch.nn.Linear
是一个线性层,用于将 784 个特征转换为 10 个输出的标签。 -
optimizer.zero_grad()
用于清空模型中的梯度,loss.backward()
用于计算梯度,optimizer.step()
用于更新模型中的参数。 -
train_loader
是一个数据加载器,用于将训练数据分发给多个线程。 -
test_loader
是一个数据加载器,用于将测试数据分发给多个线程。