机器学习模型 类 中 **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.
上找到大部分内容
我想知道属性 **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.
上找到大部分内容