在Torch中處理多類分類任務通常使用交叉熵損失函數和softmax函數。首先,定義一個包含所有可能類別的輸出層,并使用softmax函數將輸出映射為概率分布。然后,計算預測概率分布與真實標簽之間的交叉熵損失,通過反向傳播算法更新模型參數來最小化損失。以下是一個處理多類分類任務的示例代碼:
import torch
import torch.nn as nn
import torch.optim as optim
# 定義模型
class Net(nn.Module):
def __init__(self, num_classes):
super(Net, self).__init__()
self.fc = nn.Linear(10, num_classes)
def forward(self, x):
x = self.fc(x)
return x
# 初始化模型和損失函數
model = Net(num_classes=5)
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(model.parameters(), lr=0.01)
# 準備數據
inputs = torch.randn(3, 10) # batch size為3,特征維度為10
targets = torch.LongTensor([1, 3, 0]) # 真實標簽
# 訓練模型
for epoch in range(100):
optimizer.zero_grad()
outputs = model(inputs)
loss = criterion(outputs, targets)
loss.backward()
optimizer.step()
print('Epoch {}, Loss: {}'.format(epoch, loss.item()))
在上面的示例中,我們定義了一個簡單的神經網絡模型Net
,包含一個全連接層和一個softmax操作。然后,我們使用交叉熵損失函數和隨機梯度下降優化器來訓練模型,最小化預測概率分布與真實標簽之間的交叉熵損失。在每個epoch中,我們計算損失并反向傳播更新模型參數,直到達到指定的訓練次數為止。