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



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

class Model(nn.Module):
def __init__(self, input_dim, hidden_dim, output_dim, **kwargs)

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

这不是机器学习模型类所特有的,而是Python的一个特性。

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

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

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

正如你所看到的,我们不需要命名所有的参数,我们仍然在Conv3x3类初始化器中保持与nn.Conv2d相同的接口:

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

使用这两个结构可以做很多很好的事情。你可以在这里找到很多。

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

最新更新