猿问

“ input”是否是用作参数名称(在PyTorch中)时会导致错误的关键字?

所以我有一行代码:


packed_embeddings = pack_padded_sequence(input=embeddings,

                                                 lengths=lengths,

                                                 batch_first=True)

这引发了我这个错误:


  File "/Users/kwj/anaconda3/lib/python3.6/site-packages/torch/onnx/__init__.py", line 130, in might_trace

    first_arg = args[0]


IndexError: tuple index out of range

但是,如果我删除“输入”,魔术会自行修复:


    packed_embeddings = pack_padded_sequence(embeddings,

                                             lengths=lengths,

                                             batch_first=True)

这是PyTorch文档中的功能规范:


https://pytorch.org/docs/stable/_modules/torch/nn/utils/rnn.html#pack_padded_sequence


我正在使用Python3和PyTorch 0.4。我是否缺少一些基本的东西?不知道这是我的问题,还是PyTorch特有的问题...在这里非常困惑。


慕雪6442864
浏览 183回答 1
1回答

智慧大石

这里发生的是pack_padded_sequence经过修饰以返回部分应用的函数,并且在修饰代码中有一个函数将参数接受为*args, **kwargs。该函数传递args给另一个函数,该函数检查first arg。当您将所有参数传递packed_padded_sequence为关键字参数时,该参数args为空,因此args[0]引发IndexError。如果input作为位置参数传递,args则不为空,并且IndexError不引发。此示例代码演示了该行为(Pytorch代码不容易阅读)。def decorator(func):&nbsp; &nbsp; def wrapper(*args, **kwargs):&nbsp; &nbsp; &nbsp; &nbsp; print('Args:', repr(args))&nbsp; &nbsp; &nbsp; &nbsp; print('Kwargs:', repr(kwargs))&nbsp; &nbsp; &nbsp; &nbsp; return func(*args, **kwargs)&nbsp; &nbsp; return wrapper&nbsp; &nbsp;@decoratordef f(a, b=0, c=0):&nbsp; &nbsp; return a, b, cif __name__ == '__main__':&nbsp; &nbsp; print('Positional argument...')&nbsp; &nbsp; print(f(1, b=2, c=3))&nbsp; &nbsp; print('All keyword arguments...')&nbsp; &nbsp; print(f(a=1, b=2, c=3))代码产生以下输出:Positional argument...Args: (1,)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <- Args is populatedKwargs: {'b': 2, 'c': 3}(1, 2, 3)All keyword arguments...Args: ()&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <- Args is emptyKwargs: {'a': 1, 'b': 2, 'c': 3}(1, 2, 3)
随时随地看视频慕课网APP

相关分类

Python
我要回答