pymc.total_norm_constraint#

pymc.total_norm_constraint(tensor_vars, max_norm, epsilon=1e-07, return_norm=False)[源代码]#

根据一组张量的组合范数对其进行重新缩放

如果输入张量的组合范数超过阈值,则所有张量都会被重新缩放,使得组合范数等于阈值。

在训练循环神经网络时,通常会使用缩放梯度的范数 [1]

参数:
tensor_vars: TensorVariables 列表。

需要重新调整的张量。

max_norm: float

总范数的阈值。

epsilon: 标量, 可选

用于防止在除以非常小或零范数时数值不稳定的值。

return_norm: bool

如果为真,则总范数也会被返回。

返回:
tensor_vars_scaled: list of TensorVariables

缩放的张量变量。

norm: PyTensor scalar

重缩放前输入变量的组合范数,仅在 return_norms=True 时返回。

注释

总范数可用于监控训练。

参考文献

[1]

Sutskever, I., Vinyals, O., & Le, Q. V. (2014): 使用神经网络进行序列到序列学习。在神经信息处理系统进展中 (pp. 3104-3112)。

示例

>>> from lasagne.layers import InputLayer, DenseLayer
>>> import lasagne
>>> from lasagne.updates import sgd, total_norm_constraint
>>> x = pt.matrix()
>>> y = pt.ivector()
>>> l_in = InputLayer((5, 10))
>>> l1 = DenseLayer(l_in, num_units=7, nonlinearity=pt.special.softmax)
>>> output = lasagne.layers.get_output(l1, x)
>>> cost = pt.mean(pt.nnet.categorical_crossentropy(output, y))
>>> all_params = lasagne.layers.get_all_params(l1)
>>> all_grads = pt.grad(cost, all_params)
>>> scaled_grads = total_norm_constraint(all_grads, 5)
>>> updates = sgd(scaled_grads, all_params, learning_rate=0.1)