这是我定义的ConvLSTM 里面的forward方法有你查看整体代码并告诉我可以只输出最后一层输出张量吗 if not selfreturn_all_layers layer_output_list = layer_output_list-1 last_state_list = last_state_list-1 return layer_output_list last_state_list
是的,可以只输出最后一层的输出张量。只需在forward方法的最后,判断self.return_all_layers是否为True,如果为False,则只返回最后一层的输出张量和最后一层的状态列表。修改后的代码如下:
def forward(self, input_tensor, hidden_state=None): if not self.batch_first: # (t, b, c, h, w) -> (b, t, c, h, w) input_tensor = input_tensor.permute(1, 0, 2, 3, 4)
b, t, _, h, w = input_tensor.size()
# Implement stateful ConvLSTM
if hidden_state is not None:
raise NotImplementedError()
else:
# Since the init is done in forward. Can send image size here
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])
c_cur =torch.zeros_like(hidden_state[1][0])
c_cur = c_cur[:, :1, :, :]
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:
layer_output_list = layer_output_list[-1:]
last_state_list = last_state_list[-1:]
# Only return the last layer's output and state
return layer_output_list[0], last_state_list[0]
else:
return layer_output_list, last_state_list
原文地址: https://www.cveoy.top/t/topic/brhZ 著作权归作者所有。请勿转载和采集!