【发布时间】:2019-05-24 22:58:21
【问题描述】:
我正在尝试在 PyTorch 中对一个简单的 0,1 标记数据集执行逻辑回归。标准或损失定义为:criterion = nn.CrossEntropyLoss()。型号为:model = LogisticRegression(1,2)
我有一个数据点是一对:dat = (-3.5, 0),第一个元素是数据点,第二个是对应的标签。
然后我将输入的第一个元素转换为张量:tensor_input = torch.Tensor([dat[0]]).
然后我将模型应用到 tensor_input:outputs = model(tensor_input).
然后我将标签转换为张量:tensor_label = torch.Tensor([dat[1]]).
现在,当我尝试这样做时,事情就中断了:loss = criterion(outputs, tensor_label)。它给出了错误:RuntimeError: Dimension out of range (expected to be in range of [-1, 0], but got 1)
import torch
import torch.nn as nn
class LogisticRegression(nn.Module):
def __init__(self, input_size, num_classes):
super(LogisticRegression, self).__init__()
self.linear = nn.Linear(input_size, num_classes)
def forward(self, x):
out = self.linear(x)
return out
model = LogisticRegression(1,2)
criterion = nn.CrossEntropyLoss()
dat = (-3.5,0)
tensor_input = torch.Tensor([dat[0]])
outputs = binary_model(tensor_input)
tensor_label = torch.Tensor([dat[1]])
loss = criterion(outputs, tensor_label)
我一辈子都想不通。
【问题讨论】:
-
附带说明:您在示例代码中只定义了
model,但您稍后使用binary_model进行前向传递。可能只是一个错字,但我不知道你的代码。
标签: pytorch logistic-regression