用pytorch构建一个多分类网络
时间: 2023-07-17 16:04:02 浏览: 118
当然可以!以下是使用PyTorch构建一个多分类网络的示例代码:
```python
import torch
import torch.nn as nn
import torch.optim as optim
# 定义网络架构
class Net(nn.Module):
def __init__(self, input_size, hidden_size, num_classes):
super(Net, self).__init__()
self.fc1 = nn.Linear(input_size, hidden_size)
self.relu = nn.ReLU()
self.fc2 = nn.Linear(hidden_size, num_classes)
def forward(self, x):
out = self.fc1(x)
out = self.relu(out)
out = self.fc2(out)
return out
# 定义训练数据和标签
input_size = 10
hidden_size = 20
num_classes = 3
input_data = torch.randn(100, input_size)
labels = torch.randint(0, num_classes, (100,))
# 初始化网络和优化器
model = Net(input_size, hidden_size, num_classes)
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(model.parameters(), lr=0.01)
# 训练网络
num_epochs = 10
for epoch in range(num_epochs):
# 前向传播
outputs = model(input_data)
loss = criterion(outputs, labels)
# 反向传播和优化
optimizer.zero_grad()
loss.backward()
optimizer.step()
# 每训练一轮输出一次损失
print(f'Epoch [{epoch+1}/{num_epochs}], Loss: {loss.item():.4f}')
```
这段代码创建了一个具有一个隐藏层的多分类神经网络。输入数据的维度为`input_size`,隐藏层的大小为`hidden_size`,类别数为`num_classes`。训练数据和标签存储在`input_data`和`labels`中。在训练过程中,使用交叉熵损失函数和随机梯度下降(SGD)优化器进行模型训练。每个训练轮次都会输出损失值。
请根据自己的数据和需求修改输入数据的维度、隐藏层大小、类别数和其他超参数,并适当调整优化器和损失函数等设置。
阅读全文