- fluid.clip
- ErrorClipByValue
- GradientClipByGlobalNorm
- GradientClipByNorm
- GradientClipByValue
fluid.clip
SourceEnglish
ErrorClipByValue
SourceEnglish
- class
paddle.fluid.clip.
ErrorClipByValue
(max, min=None) - 将张量值的范围压缩到 [min, max]。
给定一个张量 t
,该操作将它的值压缩到 min
和 max
之间
- 任何小于min(最小值)的值都被设置为min
- 任何大于max(最大值)的值都被设置为max
- 参数:
- max (foat) - 要修剪的最大值。
- min (float) - 要修剪的最小值。如果用户没有设置,将被框架默认设置为
-max
代码示例
- import paddle.fluid as fluid
- BATCH_SIZE = 128
- CLIP_MAX = 2e-6
- CLIP_MIN = -1e-6
- prog = fluid.framework.Program()
- with fluid.program_guard(main_program=prog):
- image = fluid.layers.data(name='x', shape=[784], dtype='float32')
- hidden1 = fluid.layers.fc(input=image, size=128, act='relu')
- hidden2 = fluid.layers.fc(input=hidden1, size=64, act='relu')
- predict = fluid.layers.fc(input=hidden2, size=10, act='softmax')
- label = fluid.layers.data(name='y', shape=[1], dtype='int64')
- cost = fluid.layers.cross_entropy(input=predict, label=label)
- avg_cost = fluid.layers.mean(cost)
- prog_clip = prog.clone()
- prog_clip.block(0).var(hidden1.name)._set_error_clip(
- fluid.clip.ErrorClipByValue(
- max=CLIP_MAX, min=CLIP_MIN)
GradientClipByGlobalNorm
SourceEnglish
- class
paddle.fluid.clip.
GradientClipByGlobalNorm
(clip_norm, group_name='default_group') - 通过多个张量的范数之和的比率来剪切(clip)多个张量。
给定一个张量列表
和一个剪切比率 clip_norm
,返回一个被剪切的张量列表list_clipped和 中所有张量的全局范数(global_norm)。
剪切过程如下:
其中:
如果
, 中的张量保持不变,否则它们都会按照全局比率缩减。
- 参数:
- clip_norm (float) - 范数最大值
- group_name (str, optional) - 剪切的组名代码示例
- import paddle.fluid as fluid
- prog = fluid.framework.Program()
- startup_program = fluid.framework.Program()
- with fluid.program_guard(
- main_program=prog, startup_program=startup_program):
- image = fluid.layers.data(name='x', shape=[784], dtype='float32')
- label = fluid.layers.data(name='y', shape=[1], dtype='int64')
- hidden1 = fluid.layers.fc(input=image, size=128, act='relu')
- hidden2 = fluid.layers.fc(input=hidden1, size=64, act='relu')
- predict = fluid.layers.fc(input=hidden2, size=10, act='softmax')
- cost = fluid.layers.cross_entropy(input=predict, label=label)
- avg_cost = fluid.layers.mean(cost)
- prog_clip = prog.clone()
- avg_cost_clip = prog_clip.block(0).var(avg_cost.name)
- p_g_clip = fluid.backward.append_backward(loss=avg_cost_clip)
- with fluid.program_guard(main_program=prog_clip):
- fluid.clip.set_gradient_clip(
- fluid.clip.GradientClipByGlobalNorm(clip_norm=2.0))
- 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 限制了 输入张量
的L2范数不会超过 。如果 的 L2
范数小于或等于 ,输出和 一样,如果 的L2范数大于 , 将被线性缩放到L2范数等于 ,如以下公式所示:
其中
代表 的 L2 范数
- 参数:
- clip_norm (float) - 二范数最大值代码示例
- import paddle.fluid as fluid
- w_param_attrs = fluid.ParamAttr(name=None,
- initializer=fluid.initializer.UniformInitializer(low=-1.0, high=1.0, seed=0),
- learning_rate=1.0,
- regularizer=fluid.regularizer.L1Decay(1.0),
- trainable=True,
- gradient_clip=fluid.clip.GradientClipByNorm(clip_norm=2.0))
- x = fluid.layers.data(name='x', shape=[10], dtype='float32')
- 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
,该操作将它的值压缩到 min
和 max
之间
- 任何小于最小值的值都被设置为最小值
- 任何大于max的值都被设置为max
- 参数:
- max (foat) - 要修剪的最大值。
- min (float,optional) - 要修剪的最小值。如果用户没有设置,将被
framework
设置为-max
。代码示例
- import paddle.fluid as fluid
- w_param_attrs = fluid.ParamAttr(name=None,
- initializer=fluid.initializer.UniformInitializer(low=-1.0, high=1.0, seed=0),
- learning_rate=1.0,
- regularizer=fluid.regualrizer.L1Decay(1.0),
- trainable=True,
- gradient_clip=fluid.clip.GradientClipByValue(-1.0, 1.0))
- x = fluid.layers.data(name='x', shape=[10], dtype='float32')
- y_predict = fluid.layers.fc(input=x, size=1, param_attr=w_param_attrs)