gpt4 book ai didi

python - "input"是用作参数名称(在 PyTorch 中)时会导致错误的关键字吗?

转载 作者:太空狗 更新时间:2023-10-29 21:54:05 25 4
gpt4 key购买 nike

所以我有一行代码:

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 的特定问题...在这里很困惑。

谢谢

最佳答案

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

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

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)

关于python - "input"是用作参数名称(在 PyTorch 中)时会导致错误的关键字吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51531007/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com