我在努力&;在Pytork上做一些实验,在那里我创建了自己的输入&;目标。我把这些输入输入输入到模型中(这是一个有两个隐藏层的基本人工神经网络,没有错)。但由于某些原因,我无法计算CrossEntropyLoss()。我不知道为什么。我知道关于StakCflow的其他一些问题与我的标题相同,或者有类似的问题。我已经经历过了,但没有任何结果。很多人都对数据集有意见,这似乎不是我的问题
import torch
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
class Net(nn.Module):
def __init__(self) -> None:
super(Net, self).__init__()
self.layer1 = nn.Linear(2, 10)
self.layer2 = nn.Linear(10, 1)
def forward(self, x):
x = F.relu(self.layer1(x))
x = self.layer2(x)
return x
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
model = Net().to(device=device)
loss_fn = nn.CrossEntropyLoss()
learning_rate = 1e-3
epochs = 20
optimizer = optim.Adam(model.parameters(), lr=learning_rate)
inputs = torch.Tensor([
[0,0],
[0,1],
[1,0],
[1,1]
], ).to(device=device)
targets = torch.Tensor([
0,
1,
1,
0
]).to(device=device)
model.train()
for epoch in range(epochs):
pred_output = model(inputs)
print(pred_output.dtype)
print(targets.dtype)
loss = loss_fn(pred_output, targets)
optimizer.zero_grad()
loss.backward()
optimizer.step()
print()
break
我看到的错误是
torch.float32
torch.float32
Traceback (most recent call last):
File ".\main.py", line 57, in <module>
loss = loss_fn(pred_output, targets)
File "C:\Users\user\anaconda3\lib\site-packages\torch\nn\modules\module.py", line 889, in _call_impl
result = self.forward(*input, **kwargs)
File "C:\Users\user\anaconda3\lib\site-packages\torch\nn\modules\loss.py", line 1047, in forward
return F.cross_entropy(input, target, weight=self.weight,
File "C:\Users\user\anaconda3\lib\site-packages\torch\nn\functional.py", line 2693, in cross_entropy
return nll_loss(log_softmax(input, 1), target, weight, None, ignore_index, None, reduction)
File "C:\Users\user\anaconda3\lib\site-packages\torch\nn\functional.py", line 2388, in nll_loss
ret = torch._C._nn.nll_loss(input, target, weight, _Reduction.get_enum(reduction), ignore_index)
RuntimeError: Expected object of scalar type Long but got scalar type Float for argument #2 'target' in call to _thnn_nll_loss_forward
我可以使用此代码复制您的错误
错误:
将target的数据类型更改为
target = torch.tensor([1., 2., 3.], dtype=torch.long)
,一切正常。我相信目标变量确实需要长数据类型,因为将输入更改为float也会起作用注意,文档在示例代码中也有这个
torch.long
数据类型https://pytorch.org/docs/stable/generated/torch.nn.CrossEntropyLoss.html#编辑1 它不起作用的原因是您在代码中定义输入/目标张量的方式。将
torch.tensor
与小的“t”一起使用,而不是torch.Tensor
。有关详细讨论,请参见What is the difference between torch.tensor and torch.Tensor?相关问题 更多 >
编程相关推荐