использование о rnn.pack_padded_sequence - PullRequest
0 голосов
/ 24 октября 2018

Когда я использую torch.nn.utils.rnn.pack_padded_sequence(), произошла ошибка.Вот мой код:

import torch
import numpy as np
x = torch.from_numpy(np.array([[1,2,3,4,5,6,0,0],[6,7,8,9,0,0,0,0],[12,83,84,0,0,0,0,0]]))
length =[6,4,3]
print(torch.nn.utils.rnn.pack_padded_sequence(input=x, lengths=length, batch_first=True))

Ошибка выглядит следующим образом:

Traceback (most recent call last):
  File "/home/pc/PycharmProjects/padded/padded.py", line 112, in <module>
    print(torch.nn.utils.rnn.pack_padded_sequence(input=x, lengths=length, batch_first=True))
  File "/home/pc/anaconda3/lib/python3.6/site-packages/torch/onnx/__init__.py", line 67, in wrapper
    if not might_trace(args):
  File "/home/pc/anaconda3/lib/python3.6/site-packages/torch/onnx/__init__.py", line 141, in might_trace
    first_arg = args[0]
IndexError: tuple index out of range

Но когда я ввожу следующий код:

import torch
import numpy as np
x = torch.from_numpy(np.array([[1,2,3,4,5,6,0,0],[6,7,8,9,0,0,0,0],[12,83,84,0,0,0,0,0]]))
length =[6,4,3]
print(torch.nn.utils.rnn.pack_padded_sequence(x, lengths=length, batch_first=True))

Результат нормальный,И я не знаю почему.

Можете ли вы помочь мне решить проблему?

1 Ответ

0 голосов
/ 25 октября 2018

Так что причина этого звучит невероятно глупо, но я думаю, что это связано с тем, как функция оболочки / низкоуровневого транслятора работает с функциями PyTorch:

Из того, что я понимаю о *args, **kwargsдекораторы python (см. больше здесь , проблема в том, что вы упорядочили аргументы только в том случае, если вы передаете их без =.

То есть они сохраняютсяв словаре пар ключевое слово / значение. Вместо этого, если мы посмотрим на соответствующую часть нашего сообщения об ошибке (эта часть: File "/home/pc/anaconda3/lib/python3.6/site-packages/torch/onnx/__init__.py"), мы увидим следующее:

first_arg = args[0]

означает, что оно хочетчтобы решить эту проблему с помощью индекса. К сожалению, поскольку ключевое слово хранится и передается только в словарь ключ / значение, мы не можем решить эту проблему с помощью индекса, и впоследствии возникает ошибка.

Пока что у меня естьне смог найти способ обойти это, потому что это очень абстрактно и (потенциально) используется многими различными классами, особенно потому, что он передается через Iпромежуточный слой (в строке 67, см. трассировку стека).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...