torch.nn.model用法
时间: 2023-11-26 10:04:45 浏览: 88
浅析PyTorch中nn.Module的使用
5星 · 资源好评率100%
`torch.nn.Module` 是 PyTorch 中定义神经网络模型的基类,我们可以继承它来创建自己的模型。
在继承 `torch.nn.Module` 后,需要定义模型的构造函数 `__init__` 和前向传播函数 `forward`。构造函数中可以定义网络的结构,包括卷积层、全连接层等,前向传播函数中可以定义输入数据的处理过程,如卷积、池化、激活函数等操作。
下面是一个简单的示例,定义了一个包含一个全连接层的线性模型:
```python
import torch.nn as nn
class LinearModel(nn.Module):
def __init__(self, input_dim, output_dim):
super(LinearModel, self).__init__()
self.fc = nn.Linear(input_dim, output_dim)
def forward(self, x):
x = self.fc(x)
return x
```
在上面的代码中,`__init__` 函数中定义了一个全连接层,输入维度为 `input_dim`,输出维度为 `output_dim`。`forward` 函数中通过 `self.fc(x)` 完成了输入数据到输出数据的转换。
接下来,我们可以使用定义好的模型进行训练和预测。例如:
```python
import torch
# 定义输入数据和标签
x = torch.randn(10, 20)
y = torch.randn(10, 1)
# 定义模型
model = LinearModel(20, 1)
# 定义损失函数和优化器
criterion = nn.MSELoss()
optimizer = torch.optim.SGD(model.parameters(), lr=0.1)
# 训练模型
for epoch in range(100):
# 前向传播
y_pred = model(x)
# 计算损失
loss = criterion(y_pred, y)
# 反向传播
optimizer.zero_grad()
loss.backward()
optimizer.step()
# 打印损失
print('Epoch [{}/{}], Loss: {:.4f}'.format(epoch+1, 100, loss.item()))
# 使用模型进行预测
x_test = torch.randn(5, 20)
y_pred = model(x_test)
```
在训练过程中,我们首先进行前向传播,得到模型的预测结果。然后计算损失,并通过反向传播求解梯度。最后使用优化器更新模型参数。在训练过程中可以使用 `loss.item()` 获取当前的损失值。
训练完成后,我们可以使用模型进行预测。在上面的示例中,我们使用了一个随机生成的输入数据 `x_test`,并通过模型的前向传播得到了预测结果 `y_pred`。
阅读全文