pytorch使用例子
时间: 2024-12-27 08:27:16 浏览: 2
### PyTorch 使用示例代码
#### 加载数据集并创建 DataLoader
为了方便处理批量数据,在PyTorch中通常会使用`DataLoader`类来加载数据。这允许更高效的内存管理和批处理机制。
```python
from torch.utils.data import DataLoader, TensorDataset
import torch
# 创建一些虚拟的数据作为例子
features = torch.randn((100, 5)) # 假设有100个样本,每个有5维特征
labels = torch.randint(0, 2, (100,)).long() # 随机生成二元分类标签
dataset = TensorDataset(features, labels)
dataloader = DataLoader(dataset, batch_size=8, shuffle=True)
for batch_features, batch_labels in dataloader:
print(batch_features.shape, batch_labels.shape)
break # 只打印第一个批次的信息
```
#### 定义神经网络结构
定义一个多层感知器(MLP),这是一个简单的全连接前馈神经网络模型。
```python
import torch.nn as nn
import torch.optim as optim
class SimpleNet(nn.Module):
def __init__(self, input_dim, hidden_dim, output_dim):
super(SimpleNet, self).__init__()
self.fc1 = nn.Linear(input_dim, hidden_dim)
self.relu = nn.ReLU()
self.fc2 = nn.Linear(hidden_dim, output_dim)
def forward(self, x):
out = self.fc1(x)
out = self.relu(out)
out = self.fc2(out)
return out
model = SimpleNet(input_dim=5, hidden_dim=10, output_dim=2) # 对应于上面的例子中的输入维度和类别数量
criterion = nn.CrossEntropyLoss() # 处理多分类问题时常用的损失函数
optimizer = optim.SGD(model.parameters(), lr=0.01) # 使用随机梯度下降法更新参数
```
#### 训练过程
下面展示了一个基本的训练循环,其中包含了前向传播、计算损失以及反向传播三个部分。
```python
num_epochs = 5 # 设定迭代次数
for epoch in range(num_epochs):
running_loss = 0.0
for inputs, targets in dataloader:
optimizer.zero_grad() # 清除之前的梯度
outputs = model(inputs) # 执行一次前向传递得到预测结果
loss = criterion(outputs, targets) # 根据实际值与预测值计算误差
loss.backward() # 进行反向传播计算梯度
optimizer.step() # 更新权重
running_loss += loss.item()
average_loss = running_loss / len(dataloader)
print(f'Epoch [{epoch+1}/{num_epochs}], Loss: {average_loss:.4f}')
```
阅读全文