gpt4 book ai didi

python - 预期目标大小 (50, 88),得到 torch.Size([50, 288, 88])

转载 作者:行者123 更新时间:2023-12-01 00:56:08 26 4
gpt4 key购买 nike

我正在尝试训练我的神经网络。模型中的训练是正确的,但我无法计算损失。输出和目标具有相同的维度。

我曾尝试使用 torch.stack,但我不能,因为每个输入的大小是 (252, x),其中 x 在 252 个元素中是相同的,但对于其他输入来说是不同的。

我使用自定义数据集:

class MusicDataSet(Dataset):
def __init__(self, transform=None):
self.ms, self.target, self.tam = sd.cargarDatos()
self.mean, self.std = self.NormalizationValues()
def __len__(self):
return self.tam

def __getitem__(self, idx):
#Normalize
inp = (self.ms[idx]-self.mean)/self.std
inp = torch.from_numpy(inp).float()
inp = inp.t()
inp = inp.to('cuda')

target= torch.from_numpy(self.target[idx])
target = target.long()
target = target.t()
target = target.to('cuda')

return inp, target

我必须说列表不能用类似的东西来转换:target = torch.Tensor() 或 torch.stack() 因为这个 (252, x),正如我已经说过的。

def music_collate_fn(batch):
data = [item[0] for item in batch]
data = pad_sequence(data, batch_first=True)
target = [item[0] for item in batch]
target = pad_sequence(target, batch_first=True)
return data, target


musicSet = mds.MusicDataSet()
train_loader = torch.utils.data.DataLoader(musicSet,batch_size=50, collate_fn = music_collate_fn, shuffle=False)

input_dim = 252
hidden_dim = (512,1024,512)
output_dim = 88
mlp = rn.MLP(input_dim, hidden_dim, output_dim).to(device)

optimizer = torch.optim.RMSprop(mlp.parameters(), lr = learning_rate)
criterion = nn.CrossEntropyLoss()
for batch_idx, (x,y) in enumerate(train_loader):
outputs = mlp(x.to(device))
loss = criterion(outputs, y)
optimizer.zero_grad()
loss.backward()
optimizer.step()

输出和目标的大小相同,

output: torch.Size([50, 288, 88])
target: torch.Size([50, 288, 88])

但是当我尝试计算损失时出现下一个错误:

  File "<ipython-input-205-3c47d7aa11a4>", line 32, in <module>
loss = criterion(outputs, y)

File "C:\ProgramData\Anaconda3\lib\site-packages\torch\nn\modules\module.py", line 489, in __call__
result = self.forward(*input, **kwargs)

File "C:\ProgramData\Anaconda3\lib\site-packages\torch\nn\modules\loss.py", line 904, in forward
ignore_index=self.ignore_index, reduction=self.reduction)

File "C:\ProgramData\Anaconda3\lib\site-packages\torch\nn\functional.py", line 1970, in cross_entropy
return nll_loss(log_softmax(input, 1), target, weight, None, ignore_index, None, reduction)

File "C:\ProgramData\Anaconda3\lib\site-packages\torch
\nn\functional.py", line 1800, in nll_loss
out_size, target.size()))

ValueError: Expected target size (50, 88), got torch.Size([50, 288, 88])

最佳答案

我认为您错误地使用了CrossEntropyLoss。请参阅文档 here .

特别是,如果输入的形状为 [NxCxd],则目标的形状应为 [Nxd],并且目标中的值是 0 到 C-1 之间的整数,即您可以只提供类标签,这不是必需的对目标变量进行one-hot编码。错误消息也指出了同样的情况。

关于python - 预期目标大小 (50, 88),得到 torch.Size([50, 288, 88]),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56243672/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com