Pytorch Pyrotch BCELoss不接受列表

Pytorch Pyrotch BCELoss不接受列表,pytorch,loss-function,Pytorch,Loss Function,我的convLSTM模型返回一个隐藏状态列表(总共17个,大小(1,3128128)),我的目标是一个包含17个图像的列表(所有张量大小:(3128128) 调用loss函数时,我得到以下错误: 文件“/Users/xyz/opt/anaconda3/envs/matrix/lib/python3.7/site->packages/torch/nn/modules/loss.py”,第498行,向前 返回F.binary\u cross\u熵(输入,目标,权重=自身权重,>缩减=自身缩减) 文件

我的convLSTM模型返回一个隐藏状态列表(总共17个,大小(1,3128128)),我的目标是一个包含17个图像的列表(所有张量大小:(3128128) 调用loss函数时,我得到以下错误:

文件“/Users/xyz/opt/anaconda3/envs/matrix/lib/python3.7/site->packages/torch/nn/modules/loss.py”,第498行,向前 返回F.binary\u cross\u熵(输入,目标,权重=自身权重,>缩减=自身缩减) 文件“/Users/xyz/opt/anaconda3/envs/matrix/lib/python3.7/site->packages/torch/nn/functional.py”,第2052行,二进制交叉熵 如果target.size()!=input.size(): AttributeError:“列表”对象没有属性“大小”

培训循环的一部分:

hc=model.init\u hidden(批量大小=1)
对于enumerate(train_loader)中的batch_idx(数据,目标):
optimizer.zero_grad()
#设定目标,图像2至18
目标=数据[1:]
如果gpu:
data=data.cuda()
target=target.cuda()
hc.cuda()
#获取LSTM的输出
输出=型号(数据,hc)
#计算损失
损失=标准(输出、目标)
loss.backward()
optimizer.step()

我本以为会出现大小不匹配错误,但却得到了此错误。如何解决此问题?

目标需要是张量,而不是张量列表

示例

    >>> m = nn.Sigmoid()
    >>> loss = nn.BCELoss()
    >>> input = torch.randn(3, requires_grad=True)
    >>> target = torch.empty(3).random_(2) #This is a tensor, not a list
    >>> output = loss(m(input), target)
    >>> output.backward()

看一看or中的BCELoss,我使用了
torch.stack解决了这个问题。本来可以使用
torch.cat
,但是想要一个带有张量列表的张量传递给loss函数,以匹配所使用的目标格式
torch.stack

我尝试过:
target=torch.tensor(数据[1:]
我遇到了同样的错误。然后我尝试执行
output=torch.tensor(output)
现在我遇到了以下错误:ValueError:只有一个元素张量可以转换为Python标量。您必须连接张量列表才能创建张量。请参阅