机器学习模型 类 中 **kwargs 属性的含义

Meaning of **kwargs attribute put in classes of Machine Learning Models

我想知道属性 **kwargs 的含义,我发现它通常添加在某些机器学习模型 类 的构造函数中。例如考虑 PyTorch 中的神经网络:

class Model(nn.Module):

def __init__(self, input_dim, hidden_dim, output_dim, **kwargs)

**kwargs是否与稍后定义的额外参数相关联?

关键字**kwargs指的是关键字参数;所以是的,它们可以用于以后的添加。 参见例如https://www.w3schools.com/python/gloss_python_function_arbitrary_keyword_arguments.asp

这不是特定于机器学习模型 classes,而是 Python 功能。

你说的没错,对应的是额外的关键字参数。它将实质上收集剩余传递的命名参数,这些参数未在函数 header 中定义,并将它们添加到 字典 变量 kwargs 中。这个变量实际上可以重命名为任何名称,习惯上将 'args' 用于可迭代的未命名参数(*args),将 'kwargs' 用于关键字参数(**kwargs)。

这增加了灵活性,允许定义额外的参数并将其传递给函数,而无需在 header 中特别说明它们的名称。一个常见的用例是扩展 class。在这里,我们正在实现一个名为 Conv3x3 的虚拟 3x3 2D 卷积层,它将扩展基础 nn.Conv2d 模块:

class Conv3x3(nn.Conv2d):
    def __init__(self, **kwargs):
       super().__init__(kernel_size=3, **kwargs)

如您所见,我们不需要命名所有参数,我们仍然在 Conv3x3 class 初始化程序中保持与 nn.Conv2d 相同的接口:

>>> Conv3x3(in_channels=3, out_channels=16)
Conv3x3(3, 16, kernel_size=(3, 3), stride=(1, 1))

您可以使用这两个结构做很多不错的事情。您可以在 here.

上找到大部分内容