为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕雪6442864 2021-05-07 10:11:56
所以我有一行代码: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特有的问题...在这里非常困惑。
查看完整描述

1 回答

?
智慧大石

TA贡献1946条经验 获得超3个赞

这里发生的是pack_padded_sequence经过修饰以返回部分应用的函数,并且在修饰代码中有一个函数将参数接受为*args, **kwargs。该函数传递args给另一个函数,该函数检查first arg。当您将所有参数传递packed_padded_sequence为关键字参数时,该参数args为空,因此args[0]引发IndexError。如果input作为位置参数传递,args则不为空,并且IndexError不引发。


此示例代码演示了该行为(Pytorch代码不容易阅读)。


def decorator(func):

    def wrapper(*args, **kwargs):

        print('Args:', repr(args))

        print('Kwargs:', repr(kwargs))

        return func(*args, **kwargs)

    return wrapper   


@decorator

def f(a, b=0, c=0):

    return a, b, c



if __name__ == '__main__':

    print('Positional argument...')

    print(f(1, b=2, c=3))

    print('All keyword arguments...')

    print(f(a=1, b=2, c=3))

代码产生以下输出:


Positional argument...

Args: (1,)                        <- Args is populated

Kwargs: {'b': 2, 'c': 3}

(1, 2, 3)

All keyword arguments...

Args: ()                          <- Args is empty

Kwargs: {'a': 1, 'b': 2, 'c': 3}

(1, 2, 3)


查看完整回答
反对 回复 2021-05-11
  • 1 回答
  • 0 关注
  • 182 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信