def sorted_rnn(self, sequences, sequence_lengths, rnn): sorted_inputs, sorted_sequence_lengths, restoration_indices = sort_batch_by_length(sequences, sequence_lengths) # print(sorted_inputs) # print(sorted_sequence_lengths.data.tolist()) packed_sequence_input = pack_padded_sequence(sorted_inputs, list(map(int, sorted_sequence_lengths.data.tolist())), batch_first=True) packed_sequence_output, _ = rnn(packed_sequence_input, None) unpacked_sequence_tensor, _ = pad_packed_sequence(packed_sequence_output, batch_first=True) return unpacked_sequence_tensor.index_select(0, restoration_indices)
def sorted_rnn(self, sequences, sequence_lengths, rnn): sorted_inputs, sorted_sequence_lengths, restoration_indices = sort_batch_by_length( sequences, sequence_lengths) packed_sequence_input = pack_padded_sequence( sorted_inputs, sorted_sequence_lengths.data.tolist(), batch_first=True) #压缩:去除多余的PAD的影响 packed_sequence_output, _ = rnn(packed_sequence_input, None) unpacked_sequence_tensor, _ = pad_packed_sequence( packed_sequence_output, batch_first=True) #解压 return unpacked_sequence_tensor.index_select( 0, restoration_indices) #返回复原后的经过LSTM的embed
def sorted_rnn(self, sequences, sequence_lengths, rnn): sorted_inputs, sorted_sequence_lengths, restoration_indices = sort_batch_by_length( sequences, sequence_lengths) packed_sequence_input = pack_padded_sequence( sorted_inputs, sorted_sequence_lengths.data.long().tolist(), batch_first=True) # except RuntimeError: # print(sequences) # print(sequence_lengths) # exit() packed_sequence_output, _ = rnn(packed_sequence_input, None) unpacked_sequence_tensor, _ = pad_packed_sequence( packed_sequence_output, batch_first=True) return unpacked_sequence_tensor.index_select(0, restoration_indices)