import torch``import torch.nn as nn``import torch.optim as optim``#该示例仅用于
时间: 2025-06-05 10:45:02 浏览: 23
### 如何使用 `torch`、`torch.nn` 和 `torch.optim` 进行深度学习模型的构建与训练
#### 定义神经网络结构
为了创建一个简单的多层感知器 (MLP),可以利用 `torch.nn.Module` 类来定义模型架构。此过程涉及组合多个线性变换和其他组件,如激活函数。
```python
import torch
from torch import nn, optim
class SimpleMLP(nn.Module):
def __init__(self, input_size=784, hidden_sizes=[50], output_size=10):
super(SimpleMLP, self).__init__()
layers = []
current_input_size = input_size
for hsize in hidden_sizes:
layers.append(nn.Linear(current_input_size, hsize))
layers.append(nn.ReLU())
current_input_size = hsize
layers.append(nn.Linear(current_input_size, output_size))
# 将所有层放入Sequential模块中以便简化前向传播逻辑
self.model = nn.Sequential(*layers)
def forward(self, x):
return self.model(x.view(-1, 784)) # 假设输入图像尺寸为28x28像素
model = SimpleMLP()
print(model)
```
这段代码展示了如何使用 `nn.Linear` 来设置每一层之间的权重矩阵,并通过 `ReLU()` 添加非线性的激活特性[^1]。
#### 设置优化算法
对于这个例子来说,Adam 是一种常用的选择因为它通常能提供较好的收敛速度和性能表现:
```python
criterion = nn.CrossEntropyLoss() # 对于分类任务而言这是常见的损失函数选项之一
optimizer = optim.Adam(model.parameters(), lr=0.001) # Adam具有自适应的学习率调整机制
```
这里选择了交叉熵作为损失度量标准,适用于多类别分类问题;而 Adam 则因其能够自动调节每一步更新步长而在实践中广受欢迎[^3]。
#### 训练循环
最后,在给定的数据集上执行多次迭代以最小化预测误差:
```python
for epoch in range(epochs):
running_loss = 0.0
for inputs, labels in trainloader:
optimizer.zero_grad()
outputs = model(inputs)
loss = criterion(outputs, labels)
loss.backward()
optimizer.step()
running_loss += loss.item()
print(f'Epoch {epoch+1}, Loss: {running_loss/len(trainloader)}')
```
上述片段实现了典型的反向传播流程——先清零梯度 (`zero_grad`) ,接着计算当前批次上的输出并求得相应的损失值(`loss.backward`) 。之后应用选定的优化策略来进行参数更新(`step`) .
阅读全文
相关推荐



















