这是我的源代码紧接着下面还有代码的报错信息重点在为什么报错了没报错的地方你就不要再改了之后请你仔细查看我的代码再结合报错信息告诉我修改意见只需要在我的代码基础上进行修改注意不需要从头开始写代码只需要把错误的地方或者需要修改的地方进行修改即可从头写你也写不完整。 源代码如
根据报错信息,可以看到问题出在计算损失函数上,具体地说,是输入的 outputs 和 labels 参数类型不匹配。outputs 是一个元组类型的变量,而 labels 是一个 Tensor 类型的变量。这里应该是模型输出的类型不正确,需要检查模型的输出是否符合要求。
修改建议:
在模型的 forward 函数中,需要将模型输出的元组类型转换成一个 Tensor 类型,具体做法可以使用 torch.cat() 函数将各个时间步的输出拼接起来,形成一个新的张量。修改后的代码如下:
def forward(self, input_tensor, hidden_state=None):
if not self.batch_first:
input_tensor = input_tensor.permute(1, 0, 2, 3, 4)
b, t, _, h, w = input_tensor.size()
if hidden_state is not None:
raise NotImplementedError()
else:
hidden_state = self._init_hidden(batch_size=b, image_size=(h, w))
layer_output_list = []
last_state_list = []
seq_len = input_tensor.size(1)
cur_layer_input = input_tensor
for layer_idx in range(self.num_layers):
h, c = hidden_state[layer_idx]
output_inner = []
for t in range(seq_len):
h, c = self.cell_list[layer_idx](input_tensor=cur_layer_input[:, t, :, :, :], cur_state=[h, c])
output_inner.append(h)
layer_output = torch.stack(output_inner, dim=1)
cur_layer_input = layer_output
layer_output_list.append(layer_output)
last_state_list.append([h, c])
if not self.return_all_layers:
last_layer_output = layer_output_list[-1]
outputs = last_layer_output[:, -1, :, :, :]
else:
outputs = torch.cat(layer_output_list, dim=2)
return outputs, last_state_list
原文地址: https://www.cveoy.top/t/topic/bsKT 著作权归作者所有。请勿转载和采集!