sponge.optimizer.SteepestDescent

查看源文件
class sponge.optimizer.SteepestDescent(params: Union[List[Parameter], List[dict]], learning_rate: Union[float, int, Tensor, Iterable, LearningRateSchedule] = 0.001, weight_decay: Union[float, int] = 0.0, loss_scale: float = 1.0, max_shift: float = None)[源代码]

实现最陡下降(梯度下降)算法。

说明

如果参数未分组,则优化器中的 weight_decay 将应用于名称中不含 'beta' 或 'gamma' 的网络参数。用户可以对参数进行分组以更改权重衰减策略。当参数分组时,每个组可以设置 weight_decay。如果没有,则将应用优化器中的 weight_decay

参数:
  • params (Union[list[mindspore.Parameter], list[dict]]) - 必须是 mindspore.Parameter 的列表或字典的列表。当 params 是字典列表时,可以解析的键包括 "params"、"lr"、"grad_centralization" 和 "order_params"。

    • params - 必需。当前组中的参数。值必须是 mindspore.Parameter 的列表。

    • lr - 可选。如果键中有 "lr",将使用相应的学习率值。 如果没有,则使用优化器中的 learning_rate。支持固定和动态学习率。

    • weight_decay - 目前不支持通过分组参数使用不同的 weight_decay

    • grad_centralization - 可选。必须是bool。如果键中有"grad_centralization",则使用设置的值。 如果没有,默认为 False。此配置仅在卷积层中有效。

    • order_params - 可选。当参数分组时,通常用于维持网络中出现的参数的顺序以提高性能。值应为优化器中将遵循的参数顺序。如果键中有 order_params,将忽略其他键, order_params 的元素必须在一个 params 组中。

  • learning_rate (Union[float, int, Tensor, Iterable, LearningRateSchedule], 可选) - 学习率。默认值 1e-03

    • float: 固定学习率值。必须大于或等于0。

    • int: 固定学习率值。必须大于或等于0。它将转换为 float。

    • Tensor: 其值应该是标量或1-D向量。对于标量,将应用固定学习率。 对于向量,学习率是动态的,第 i 步将采用第 i 个值作为学习率。

    • Iterable: 学习率是动态的。第 i 步将采用第 i 个值作为学习率。

    • mindspore.nn.LearningRateSchedule: 学习率是动态的。在训练过程中,优化器调用 LearningRateSchedule 实例,并以步骤作为输入来获取当前步骤的学习率。

  • weight_decay (Union[float, int], 可选) - 权重衰减。必须大于或等于0。如果 weight_decay 是 int,将转换为 float。默认值 0.0

  • loss_scale (float, 可选) - 损失缩放的浮点值。必须大于0。如果 loss_scale 输入类型为 int,将转换为 float。通常使用默认值。只有当使用 mindspore.amp.FixedLossScaleManager 进行训练并且 mindspore.amp.FixedLossScaleManager 中的 drop_overflow_update 设置为 False 时,此值需要与 mindspore.amp.FixedLossScaleManager 中的 loss_scale 相同。有关更多详细信息,请参阅类 mindspore.amp.FixedLossScaleManager。默认值: 1.0

  • max_shift (float, 可选) - 最大偏移的浮点值。必须大于0。它是优化器中每次迭代的偏移距离上限。如果最大偏移设置为 None,则不会对偏移进行任何操作。但如果 max_shift 是一个给定的float,则偏移的界限为:[-max_shift, max_shift] 默认值: None

输入:
  • gradients (Tensor) - 参数的梯度。

输出:
  • success (bool) - 操作是否成功。

异常:
  • TypeError - 如果 learning_rate 不是 int、float、Tensor、Iterable、LearningRateSchedule 中的一种。

  • TypeError - 如果 parameters 的元素既不是 Parameter 也不是 dict。

  • TypeError - 如果 loss_scale 不是 float。

  • TypeError - 如果 weight_decay 既不是 float 也不是 int。

  • ValueError - 如果 loss_scale 小于或等于 0。

  • ValueError - 如果 weight_decay 小于 0。

  • ValueError - 如果 learning_rate 是一个 Tensor,但是 tensor 的维度大于 1。

支持平台:

Ascend GPU CPU

样例:

>>> from sponge import Sponge, Molecule, ForceField
>>> from sponge.optimizer import SteepestDescent
>>> system = Molecule(template='water.tip3p.yaml')
>>> potential = ForceField(system, parameters='SPCE')
>>> optim = SteepestDescent(params=system.trainable_params(), learning_rate=1e-7)
>>> print(system.coordinate.value())
>>> # [[[ 0. 0. 0. ]
>>> # [ 0.07907964 0.06120793 0. ]
>>> # [-0.07907964 0.06120793 0. ]]]
>>> md = Sponge(system, potential, optim)
>>> md.run(1000)
>>> # [MindSPONGE] Started simulation at 2024-04-29 01:00:42
>>> # [MindSPONGE] Finished simulation at 2024-04-29 01:00:44
>>> # [MindSPONGE] Simulation time: 2.02 seconds.
>>> print(system.coordinate.value())
>>> # [[[ 5.3361070e-12 2.3146218e-03 0.0000000e+00]
>>> # [ 8.1648827e-02 6.0050689e-02 0.0000000e+00]
>>> # [-8.1648827e-02 6.0050689e-02 0.0000000e+00]]]