以下是PyTorch常用命令的分类整理,涵盖张量操作、模型构建、数据加载、训练流程等核心内容:
1. 张量操作
-
创建张量
pythonx = torch.tensor([1, 2, 3]) # 从数据创建 x = torch.zeros(3, 3) # 全零张量 x = torch.ones(3, 3) # 全一张量 x = torch.randn(3, 3) # 标准正态分布随机数 x = torch.arange(0, 10, step=2) # 类似range的序列
-
形状操作
pythonx = x.view(2, -1) # 调整形状(需连续内存) x = x.reshape(2, -1) # 更灵活的调整形状 x = x.permute(1, 0) # 维度转置 x = x.squeeze() # 删除维度为1的轴 x = x.unsqueeze(0) # 增加维度为1的轴
-
数学运算
pythonz = x + y # 逐元素加法 z = torch.matmul(x, y) # 矩阵乘法 z = x.sum(dim=1) # 沿维度求和 z = torch.cat([x, y], dim=0) # 沿维度拼接张量
2. 模型构建
-
定义模型
pythonimport torch.nn as nn class MyModel(nn.Module): def __init__(self): super().__init__() self.fc = nn.Linear(10, 5) # 全连接层 self.relu = nn.ReLU() # 激活函数 def forward(self, x): return self.relu(self.fc(x))
-
层与激活函数
pythonnn.Conv2d(in_channels, out_channels, kernel_size) # 卷积层 nn.LSTM(input_size, hidden_size) # LSTM层 nn.BatchNorm2d(num_features) # 批归一化 nn.Dropout(p=0.5) # Dropout层
-
损失函数
pythoncriterion = nn.CrossEntropyLoss() # 分类任务 criterion = nn.MSELoss() # 回归任务
-
优化器
pythonoptimizer = torch.optim.SGD(model.parameters(), lr=0.01) optimizer = torch.optim.Adam(model.parameters())
3. 数据加载
-
自定义数据集
pythonfrom torch.utils.data import Dataset, DataLoader class MyDataset(Dataset): def __len__(self): return len(data) def __getitem__(self, idx): return data[idx], label[idx] dataset = MyDataset() dataloader = DataLoader(dataset, batch_size=32, shuffle=True)
-
预加载数据集
pythonfrom torchvision import datasets, transforms transform = transforms.Compose([ transforms.ToTensor(), transforms.Normalize((0.5,), (0.5,)) ]) mnist = datasets.MNIST(root='./data', train=True, download=True, transform=transform)
4. 训练流程
-
训练循环模板
pythondevice = 'cuda' if torch.cuda.is_available() else 'cpu' model = MyModel().to(device) for epoch in range(num_epochs): model.train() for inputs, labels in dataloader: inputs, labels = inputs.to(device), labels.to(device) outputs = model(inputs) # 前向传播 loss = criterion(outputs, labels) optimizer.zero_grad() # 清零梯度 loss.backward() # 反向传播 optimizer.step() # 更新参数
-
评估模式
pythonmodel.eval() with torch.no_grad(): # 禁用梯度计算 for inputs, labels in val_loader: outputs = model(inputs)
5. 模型保存与加载
python
# 保存模型参数
torch.save(model.state_dict(), 'model.pth')
# 加载模型参数
model.load_state_dict(torch.load('model.pth'))
6. 设备管理
python
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
model = model.to(device) # 模型移至GPU
x = x.to(device) # 数据移至GPU
torch.cuda.empty_cache() # 清理GPU缓存
7. 其他实用命令
-
与NumPy互转
pythonnumpy_array = torch_tensor.numpy() # Tensor → NumPy torch_tensor = torch.from_numpy(numpy_array) # NumPy → Tensor
-
随机种子设置
pythontorch.manual_seed(42) # 固定随机性
-
自动求导
pythonx = torch.tensor(1.0, requires_grad=True) y = x**2 y.backward() # 计算梯度 print(x.grad) # 输出梯度值: 2.0
如果此文章对您有所帮助,那就请点个赞吧,收藏+关注 那就更棒啦,十分感谢!!!