• fluid.clip
    • ErrorClipByValue
    • GradientClipByGlobalNorm
    • GradientClipByNorm
    • GradientClipByValue

    fluid.clip

    SourceEnglish

    ErrorClipByValue

    SourceEnglish

    • class paddle.fluid.clip.ErrorClipByValue(max, min=None)
    • 将张量值的范围压缩到 [min, max]。

    给定一个张量 t ,该操作将它的值压缩到 minmax 之间

    • 任何小于min(最小值)的值都被设置为min
    • 任何大于max(最大值)的值都被设置为max
    • 参数:
      • max (foat) - 要修剪的最大值。
      • min (float) - 要修剪的最小值。如果用户没有设置,将被框架默认设置为 -max代码示例
    1. import paddle.fluid as fluid
    2. BATCH_SIZE = 128
    3. CLIP_MAX = 2e-6
    4. CLIP_MIN = -1e-6
    5. prog = fluid.framework.Program()
    6. with fluid.program_guard(main_program=prog):
    7. image = fluid.layers.data(name='x', shape=[784], dtype='float32')
    8. hidden1 = fluid.layers.fc(input=image, size=128, act='relu')
    9. hidden2 = fluid.layers.fc(input=hidden1, size=64, act='relu')
    10. predict = fluid.layers.fc(input=hidden2, size=10, act='softmax')
    11. label = fluid.layers.data(name='y', shape=[1], dtype='int64')
    12. cost = fluid.layers.cross_entropy(input=predict, label=label)
    13. avg_cost = fluid.layers.mean(cost)
    14. prog_clip = prog.clone()
    15. prog_clip.block(0).var(hidden1.name)._set_error_clip(
    16. fluid.clip.ErrorClipByValue(
    17. max=CLIP_MAX, min=CLIP_MIN)

    GradientClipByGlobalNorm

    SourceEnglish

    • class paddle.fluid.clip.GradientClipByGlobalNorm(clip_norm, group_name='default_group')
    • 通过多个张量的范数之和的比率来剪切(clip)多个张量。

    给定一个张量列表

    fluid.clip - 图1 和一个剪切比率 clip_norm ,返回一个被剪切的张量列表list_clipped和fluid.clip - 图2 中所有张量的全局范数(global_norm)。

    剪切过程如下:

    fluid.clip - 图3

    其中:

    fluid.clip - 图4

    如果

    fluid.clip - 图5fluid.clip - 图6 中的张量保持不变,否则它们都会按照全局比率缩减。

    • 参数:
      • clip_norm (float) - 范数最大值
      • group_name (str, optional) - 剪切的组名代码示例
    1. import paddle.fluid as fluid
    2. prog = fluid.framework.Program()
    3. startup_program = fluid.framework.Program()
    4. with fluid.program_guard(
    5. main_program=prog, startup_program=startup_program):
    6. image = fluid.layers.data(name='x', shape=[784], dtype='float32')
    7. label = fluid.layers.data(name='y', shape=[1], dtype='int64')
    8. hidden1 = fluid.layers.fc(input=image, size=128, act='relu')
    9. hidden2 = fluid.layers.fc(input=hidden1, size=64, act='relu')
    10. predict = fluid.layers.fc(input=hidden2, size=10, act='softmax')
    11. cost = fluid.layers.cross_entropy(input=predict, label=label)
    12. avg_cost = fluid.layers.mean(cost)
    13. prog_clip = prog.clone()
    14. avg_cost_clip = prog_clip.block(0).var(avg_cost.name)
    15. p_g_clip = fluid.backward.append_backward(loss=avg_cost_clip)
    16.  
    17. with fluid.program_guard(main_program=prog_clip):
    18. fluid.clip.set_gradient_clip(
    19. fluid.clip.GradientClipByGlobalNorm(clip_norm=2.0))
    20. p_g_clip = fluid.clip.append_gradient_clip_ops(p_g_clip)

    GradientClipByNorm

    SourceEnglish

    • class paddle.fluid.clip.GradientClipByNorm(clip_norm)
    • 将张量转换为L2范数不超过 clip_norm 的张量

    该operator 限制了 输入张量

    fluid.clip - 图7 的L2范数不会超过fluid.clip - 图8 。如果fluid.clip - 图9L2 范数小于或等于fluid.clip - 图10 ,输出和fluid.clip - 图11 一样,如果fluid.clip - 图12 的L2范数大于fluid.clip - 图13 ,fluid.clip - 图14 将被线性缩放到L2范数等于fluid.clip - 图15 ,如以下公式所示:

    fluid.clip - 图16

    其中

    fluid.clip - 图17 代表fluid.clip - 图18 的 L2 范数

    • 参数:
      • clip_norm (float) - 二范数最大值代码示例
    1. import paddle.fluid as fluid
    2. w_param_attrs = fluid.ParamAttr(name=None,
    3. initializer=fluid.initializer.UniformInitializer(low=-1.0, high=1.0, seed=0),
    4. learning_rate=1.0,
    5. regularizer=fluid.regularizer.L1Decay(1.0),
    6. trainable=True,
    7. gradient_clip=fluid.clip.GradientClipByNorm(clip_norm=2.0))
    8. x = fluid.layers.data(name='x', shape=[10], dtype='float32')
    9. y_predict = fluid.layers.fc(input=x, size=1, param_attr=w_param_attrs)

    GradientClipByValue

    SourceEnglish

    • class paddle.fluid.clip.GradientClipByValue(max, min=None)
    • 将梯度值(gradient values)的范围压缩到 [min, max]。

    给定一个张量 t ,该操作将它的值压缩到 minmax 之间

    • 任何小于最小值的值都被设置为最小值
    • 任何大于max的值都被设置为max
    • 参数:
      • max (foat) - 要修剪的最大值。
      • min (float,optional) - 要修剪的最小值。如果用户没有设置,将被 framework 设置为 -max代码示例
    1. import paddle.fluid as fluid
    2. w_param_attrs = fluid.ParamAttr(name=None,
    3. initializer=fluid.initializer.UniformInitializer(low=-1.0, high=1.0, seed=0),
    4. learning_rate=1.0,
    5. regularizer=fluid.regualrizer.L1Decay(1.0),
    6. trainable=True,
    7. gradient_clip=fluid.clip.GradientClipByValue(-1.0, 1.0))
    8. x = fluid.layers.data(name='x', shape=[10], dtype='float32')
    9. y_predict = fluid.layers.fc(input=x, size=1, param_attr=w_param_attrs)