mindspore.ops.SparseApplyFtrlV2

class mindspore.ops.SparseApplyFtrlV2(lr, l1, l2, l2_shrinkage, lr_power, use_locking=False)[源代码]

根据FTRL-proximal算法更新相关参数。这个类比SpaseApplyFtrl类多了一个属性 l2_shrinkage

indices 外,所有输入都遵守隐式类型转换规则,以使数据类型一致。如果它们数据类型不相同,则低精度数据类型将转换为相对最高精度的数据类型。

参数:
  • lr (float) - 学习率,必须为正值。

  • l1 (float) - L1正则化,必须大于或等于零。

  • l2 (float) - L2正则化,必须大于或等于零。

  • l2_shrinkage (float) - L2收缩正则化。

  • lr_power (float) - 在训练期间控制降低学习率,必须小于或等于零。如果 lr_power 为零,则使用固定学习率。

  • use_locking (bool, 可选) - 如果为True,则 varaccum 将受到保护,不被更新。默认值:False。

输入:
  • var (Parameter) - 要更新的权重。数据类型必须为float16或float32。shape为 \((N, *)\) ,其中 \(*\) 表示任意数量的附加维度。

  • accum (Parameter) - 要更新的累加值,shape和数据类型必须与 var 相同。

  • linear (Parameter) - 要更新的线性系数,shape和数据类型必须与 var 相同。

  • grad (Tensor) - 梯度,为一个Tensor。数据类型必须与 var 相同,且需要满足当 var.shape > 1\(grad.shape[1:] = var.shape[1:]\)

  • indices (Tensor) - varaccum 第一维度的索引向量,数据类型为int32,且需要保证 \(indices.shape[0] = grad.shape[0]\)

输出:

3个Tensor组成的tuple,更新后的参数。

  • var (Tensor) - Tensor,shape和数据类型与输入 var 相同。

  • accum (Tensor) - Tensor,shape和数据类型与输入 accum 相同。

  • linear (Tensor) - Tensor,shape和数据类型与输入 linear 相同。

异常:
  • TypeError - 如果 lrl1l2lr_poweruse_locking 不是float。

  • TypeError - 如果 use_locking 不是bool。

  • TypeError - 如果 varaccumlineargrad 的数据类型既不是float16也不是float32。

  • TypeError - 如果 indices 的数据类型不是int32。

  • RuntimeError - 如果除 indices 参数外,其他的所有输入不支持数据类型转换。

支持平台:

Ascend

样例:

>>> class SparseApplyFtrlV2Net(nn.Cell):
...     def __init__(self):
...         super(SparseApplyFtrlV2Net, self).__init__()
...         self.sparse_apply_ftrl_v2 = ops.SparseApplyFtrlV2(lr=0.01, l1=0.0, l2=0.0,
...                                                         l2_shrinkage=0.0, lr_power=-0.5)
...         self.var = Parameter(Tensor(np.array([[0.2, 0.3]]).astype(np.float32)), name="var")
...         self.accum = Parameter(Tensor(np.array([[0.5, 0.9]]).astype(np.float32)), name="accum")
...         self.linear = Parameter(Tensor(np.array([[0.7, 0.5]]).astype(np.float32)), name="linear")
...
...     def construct(self, grad, indices):
...         out = self.sparse_apply_ftrl_v2(self.var, self.accum, self.linear, grad, indices)
...         return out
...
>>> net = SparseApplyFtrlV2Net()
>>> grad = Tensor(np.array([[0.8, 0.5]]).astype(np.float32))
>>> indices = Tensor(np.ones([1]), mindspore.int32)
>>> output = net(grad, indices)
>>> print(output)
(Tensor(shape=[1, 2], dtype=Float32, value=
[[ 2.00000003e-01,  3.00000012e-01]]), Tensor(shape=[1, 2], dtype=Float32, value=
[[ 5.00000000e-01,  8.99999976e-01]]), Tensor(shape=[1, 2], dtype=Float32, value=
[[ 6.99999988e-01,  5.00000000e-01]]))