【PyTorch教程】保姆级实战教程【三】
第2章 - PyTorch基础操作实训操作手册 1. 张量操作 目标:掌握基本的张量操作,如索引、切片、连接和变换。 内容: a. 张量索引和切片 张量的索引和切片操作与Numpy数组非常相似。可以使用方括号[]来选择特定的元素、行、列或区域。 实操: import torch tensor = torch.tensor([[1, 2
第2章 - PyTorch基础操作实训操作手册
1. 张量操作
目标:掌握基本的张量操作,如索引、切片、连接和变换。
内容:
a. 张量索引和切片
张量的索引和切片操作与Numpy数组非常相似。可以使用方括号[]
来选择特定的元素、行、列或区域。
实操:
import torch
tensor = torch.tensor([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
# 选择第1行
print(tensor[0])
# 选择第1列
print(tensor[:, 0])
# 选择2x2的子张量
print(tensor[0:2, 0:2])
b. 张量连接
可以使用torch.cat
来连接两个或多个张量。
实操:
tensor1 = torch.tensor([1, 2, 3])
tensor2 = torch.tensor([4, 5, 6])
concatenated = torch.cat((tensor1, tensor2), dim=0)
print(concatenated)
- 注意点:确保在连接时张量的形状是兼容的。
2. 自动微分与计算图
目标:理解PyTorch中的自动微分机制和如何使用它进行反向传播。
内容:
a. 计算图简介
计算图是表示数学表达式的图,其中节点表示张量,边表示从输入到输出的函数。PyTorch使用这些图来自动计算复杂表达式的导数。
b. 使用autograd进行自动微分
PyTorch的autograd
模块使得自动微分变得非常简单。只需设置requires_grad=True
,PyTorch就会为该张量构建计算图。
实操:
x = torch.tensor(2.0, requires_grad=True)
y = x**2
# 计算梯度
y.backward()
# 输出梯度
dy/dx = 2x = 2*2 = 4 print(x.grad)
- 注意点:只有浮点型的张量才能需要梯度。确保在进行自动微分操作时,张量的
requires_grad
属性设置为True
。
3. 基本神经网络构建
目标:了解如何使用PyTorch构建一个简单的神经网络。
内容:
a. 构建一个简单的全连接层
在PyTorch中,可以使用nn.Module
来构建神经网络模型。
实操:
import torch.nn as nn
class SimpleNet(nn.Module):
def __init__(self, input_size, hidden_size, output_size):
super(SimpleNet, self).__init__()
self.fc1 = nn.Linear(input_size, hidden_size)
self.fc2 = nn.Linear(hidden_size, output_size)
def forward(self, x):
x = torch.relu(self.fc1(x))
x = self.fc2(x)
return x
model = SimpleNet(3, 5, 2)
print(model)
- 注意点:确保模型中的
forward
方法定义了数据的前向传播方式。
4. 数据加载和处理:使用DataLoader和Dataset
目标:学会使用PyTorch的数据加载工具,为模型训练做准备。
内容:
a. 使用Dataset加载数据
Dataset
是一个抽象类,可以用来表示一个数据集。
b. 使用DataLoader进行批处理
DataLoader
是一个迭代器,可以用来为神经网络轻松地加载数据。
实操:
from torch.utils.data import Dataset, DataLoader
class SimpleDataset(Dataset):
def __init__(self, data):
self.data = data
def __len__(self):
return len(self.data)
def __getitem__(self, idx):
return self.data[idx]
dataset = SimpleDataset([1, 2, 3, 4, 5])
dataloader = DataLoader(dataset, batch_size=2, shuffle=True)
for batch in dataloader:
print(batch)
- 注意点:
DataLoader
的batch_size
参数决定了每个批次的数据量。shuffle=True
确保数据在每个epoch之间都会被打乱。
实战项目:构建一个简单的线性回归模型
目标:使用PyTorch构建、训练并评估一个线性回归模型。
操作步骤:
import torch.optim as optim
# 1. 生成模拟数据
x_train = torch.randn(100, 1) * 10
y_train = x_train + 3*torch.randn(100, 1)
# 2. 构建线性回归模型
class LinearRegression(nn.Module):
def __init__(self):
super(LinearRegression, self).__init__()
self.linear = nn.Linear(1, 1)
def forward(self, x):
return self.linear(x)
model = LinearRegression()
# 3. 定义损失函数和优化器
criterion = nn.MSELoss()
optimizer = optim.SGD(model.parameters(), lr=0.01)
# 4. 训练模型
epochs = 100
for epoch in range(epochs):
model.train()
optimizer.zero_grad()
outputs = model(x_train)
loss = criterion(outputs, y_train)
loss.backward()
optimizer.step()
if (epoch+1) % 10 == 0:
print(f'Epoch [{epoch+1}/{epochs}], Loss: {loss.item():.4f}')
- 注意点:在每次迭代之前,都需要使用
optimizer.zero_grad()
来清除旧的梯度。
更多推荐
所有评论(0)