mindspore.ops.SparseApplyFtrl
- class mindspore.ops.SparseApplyFtrl(lr, l1, l2, lr_power, use_locking=False)[源代码]
根据FTRL-proximal算法更新相关参数或者Tensor。
更多详细信息请参见
mindspore.nn.FTRL
。- 参数:
lr (float) - 学习率,必须为正值。
l1 (float) - l1正则化,必须大于或等于零。
l2 (float) - l2正则化,必须大于或等于零。
lr_power (float) - 在训练期间控制降低学习率,必须小于或等于零。如果lr_power为零,则使用固定学习率。
use_locking (bool, 可选) - 是否对参数更新加锁保护。默认值:
False
。
- 输入:
var (Union[Parameter, Tensor]) - 要更新的权重。数据类型必须为float16或float32。shape为 \((N, *)\) ,其中 \(*\) 表示任意数量的附加维度。
accum (Union[Parameter, Tensor]) - 要更新的累数值,shape必须与 var 相同。
linear (Union[Parameter, Tensor]) - 要更新的线性系数,shape必须与 var 相同。
grad (Tensor) - 梯度,为一个Tensor。需要满足:如果 var.shape > 1,则 \(grad.shape[1:] = var.shape[1:]\) 。
indices (Tensor) - var 和 accum 第一维度的索引向量,数据类型为int32或int64,且需要保证 \(indices.shape[0] = grad.shape[0]\) 。
- 输出:
var (Tensor) - shape和数据类型与输入 var 相同。
accum (Tensor) - shape和数据类型与输入 accum 相同。
linear (Tensor) - shape和数据类型与输入 linear 相同。
- 异常:
TypeError - 如果 lr 、 l1 、 l2 或 lr_power 不是float类型。
TypeError - 如果 use_locking 不是bool。
TypeError - 如果 var 、 grad 、linear 或者 grad 的数据类型既不是float16也不是float32。
TypeError - 如果 indices 不是int32也不是int64类型。
RuntimeError - 如果 var 、 grad 、linear 或者 grad 不支持数据类型转换。
- 支持平台:
Ascend
GPU
CPU
样例:
>>> import mindspore >>> import numpy as np >>> from mindspore import Tensor, nn, Parameter, ops >>> class SparseApplyFtrlNet(nn.Cell): ... def __init__(self): ... super(SparseApplyFtrlNet, self).__init__() ... self.sparse_apply_ftrl = ops.SparseApplyFtrl(lr=0.01, l1=0.0, l2=0.0, lr_power=-0.5) ... self.var = Parameter(Tensor(np.array([[0.2]]).astype(np.float32)), name="var") ... self.accum = Parameter(Tensor(np.array([[0.1]]).astype(np.float32)), name="accum") ... self.linear = Parameter(Tensor(np.array([[0.6]]).astype(np.float32)), name="linear") ... ... def construct(self, grad, indices): ... out = self.sparse_apply_ftrl(self.var, self.accum, self.linear, grad, indices) ... return out ... >>> net = SparseApplyFtrlNet() >>> grad = Tensor(np.array([[0.7]]).astype(np.float32)) >>> indices = Tensor(np.ones([1]), mindspore.int32) >>> output = net(grad, indices) >>> print(output) (Tensor(shape=[1, 1], dtype=Float32, value= [[2.00000003e-01]]), Tensor(shape=[1, 1], dtype=Float32, value= [[1.00000001e-01]]), Tensor(shape=[1, 1], dtype=Float32, value= [[6.00000024e-01]]))