pymc.norm_约束#
- pymc.norm_constraint(tensor_var, max_norm, norm_axes=None, epsilon=1e-07)[源代码]#
最大权重范数约束和梯度裁剪
这会取一个 TensorVariable 并对其进行重新缩放,使得输入的权重范数低于指定的约束值。违反约束的向量将被重新缩放,使其处于允许的范围内。
- 参数:
- tensor_var: TensorVariable
PyTensor 表达式用于更新、梯度或其他数量。
- max_norm: 标量
此值设置 tensor_var 中任何范数的最大允许值。
- norm_axes: 序列 (列表或元组)
计算范数所用的轴。这将覆盖为 tensor_var 的维度数定义的默认范数轴。当未指定此参数且 tensor_var 是矩阵(2D)时,此参数设置为 (0,)。如果 tensor_var 是 3D、4D 或 5D 张量,则设置为列出除轴 0 以外的所有轴的元组。前者的默认设置对处理密集层很有用,后者对处理 1D、2D 和 3D 卷积层很有用。(可选)
- epsilon: 标量, 可选
用于防止在除以非常小或零范数时数值不稳定的值。
- 返回:
TensorVariable
应用了重新缩放的输入 tensor_var,针对违反指定约束的权重向量。
注释
当 norm_axes 未指定时,计算范数的轴取决于输入变量的维度。如果是2D,则假定来自密集层,并在轴0上计算范数。如果是3D、4D或5D,则假定来自卷积层,并在轴0之后的所有尾随轴上计算范数。对于其他用途,您应使用 norm_axes 明确指定计算范数的轴。
示例
>>> param = pytensor.shared( ... np.random.randn(100, 200).astype(pytensor.config.floatX)) >>> update = param + 100 >>> update = norm_constraint(update, 10) >>> func = pytensor.function([], [], updates=[(param, update)]) >>> # Apply constrained update >>> _ = func() >>> from lasagne.utils import compute_norms >>> norms = compute_norms(param.get_value()) >>> np.isclose(np.max(norms), 10) True