当前位置: 首页 > news >正文

pytorch小记(二十九):深入解析 PyTorch 中的 `torch.clip`(及其别名 `torch.clamp`)

pytorch小记(二十九):深入解析 PyTorch 中的 `torch.clip`(及其别名 `torch.clamp`)

    • 深入解析 PyTorch 中的 `torch.clip`(及其别名 `torch.clamp`)
      • 一、函数签名
      • 二、简单示例
      • 三、广播支持
      • 四、与 Autograd 的兼容性
      • 五、典型应用场景
      • 六、小结


深入解析 PyTorch 中的 torch.clip(及其别名 torch.clamp

在深度学习任务中,我们经常需要对张量(Tensor)中的数值进行约束,以保证模型训练的稳定性和数值的合理性。PyTorch 提供了 torch.clip(以及早期版本中的别名 torch.clamp)函数,能够快速将张量中的元素裁剪到指定范围。本文将带你从函数签名、参数说明,到实际示例和应用场景,一步步掌握 torch.clip 的用法。


一、函数签名

torch.clip(input, min=None, max=None, *, out=None) → Tensor
# 等价于
torch.clamp(input, min=min, max=max, out=out)
  • input (Tensor):待裁剪的输入张量。
  • min (floatTensor,可选):下界;所有元素小于此值的会被设置成该值。若为 None,则不进行下界裁剪。
  • max (floatTensor,可选):上界;所有元素大于此值的会被设置成该值。若为 None,则不进行上界裁剪。
  • out (Tensor,可选):可选的输出张量,用于将结果写入指定张量中,避免额外分配。

返回值:一个新的张量(或当指定了 out 时,原地写入并返回该张量),其中的每个元素满足:

output[i] =min  if input[i] < min,max  if input[i] > max,input[i] otherwise.

二、简单示例

import torchx = torch.tensor([-5.0, -1.0, 0.0, 2.5, 10.0])# 裁剪到区间 [0, 5]
y = torch.clip(x, min=0.0, max=5.0)
print(y)  # tensor([0.0, 0.0, 0.0, 2.5, 5.0])# 只有下界裁剪(所有 < 1 的值变成 1)
y_lower = torch.clip(x, min=1.0)
print(y_lower)  # tensor([1.0, 1.0, 1.0, 2.5, 10.0])# 只有上界裁剪(所有 > 3 的值变成 3)
y_upper = torch.clip(x, max=3.0)
print(y_upper)  # tensor([-5.0, -1.0, 0.0, 2.5, 3.0])

三、广播支持

minmax 为张量时,torch.clip 会自动执行广播对齐:

import torchx = torch.arange(6).reshape(2, 3).float()
# tensor([[0., 1., 2.],
#         [3., 4., 5.]])min_vals = torch.tensor([[1., 2., 3.]])
max_vals = torch.tensor([[2., 3., 4.]])y = torch.clip(x, min=min_vals, max=max_vals)
print(y)
# tensor([[1., 2., 2.],
#         [2., 3., 4.]])

四、与 Autograd 的兼容性

torch.clip 支持自动梯度(Autograd):

  • 当输入值位于 (min, max) 区间内时,梯度正常传递;
  • 当输入值被裁剪到边界时(小于 min 或大于 max),对应位置的梯度为 0,因为输出对该输入不敏感。
x = torch.tensor([-10.0, 0.5, 10.0], requires_grad=True)
y = torch.clip(x, min=-1.0, max=1.0)y.sum().backward()
print(x.grad)  # tensor([0., 1., 0.])

五、典型应用场景

  1. 数值稳定性:避免激活值和梯度过大或过小导致溢出/下溢。
  2. 数据归一化:将输入特征裁剪到指定区间,例如将图像像素限定在 [0, 1]
  3. 损失裁剪:限制损失值范围,避免单次梯度过大影响整体训练。
  4. 强化学习:裁剪策略梯度中的概率比率,防止策略更新过猛。

六、小结

torch.clip(或 torch.clamp)是 PyTorch 中一个高效且直观的张量裁剪操作。通过简单的参数设置,就能保证张量数值在合理范围内,提升模型训练的稳定性和鲁棒性。掌握好它的用法,能让你的深度学习工作流更加可靠。

希望本文能帮到你,如果有任何问题或讨论,欢迎在评论区留言交流!

http://www.lryc.cn/news/587928.html

相关文章:

  • linux 驱动的platform机制:
  • SQL ORM映射框架深度剖析:从原理到实战优化
  • SPL 轻量级多源混算实践
  • Redis集群方案——Redis分片集群
  • Linux 消息队列接收与处理线程实现
  • python的微竞网咖管理系统
  • P2802 回家
  • 国家互联网信息办公室关于发布第十二批深度合成服务算法备案信息的公告
  • 力扣算法--数青蛙与外观数列问题
  • 3.2 WPF 画散点图
  • 【Python3教程】Python3高级篇之MySQL - mysql-connector 驱动介绍及示例
  • 【WPF】WPF 自定义控件 实战详解,含命令实现
  • 深地之下的智慧触角:Deepoc具身智能如何为矿业机器人铸就“感知之核”
  • Mac (m1) Java 加载本地C共享库函数 .dylib 函数 Unable to load library ‘liblicense‘
  • 【爬虫】Python实现爬取京东商品信息(超详细)
  • 来时路,零帧起手到Oracle大师
  • FilterRegistationBean报错does not have type parameters。idea启动日志无明显报错提示冲突 kaki的博客
  • IDEA实现纯java项目并打包jar(不使用Maven,Spring)
  • Linux的相关学习
  • Oracle物化视图函数使用注意事项
  • Oracle 递归函数及 其他数据库 CTE 使用小计
  • SpringBoot集成SAP,本地IDEA启动和Windows服务器部署
  • 企业培训笔记:axios 发送 ajax 请求
  • iOS高级开发工程师面试——RunLoop
  • [Nagios Core] struct监控对象 | 配置.cfg加载为内存模型
  • CSS `:root` 伪类深入讲解
  • Reactor 模式详解
  • spring shell 基础使用
  • Transformer江湖录 第五章:江湖争锋 - BERT vs GPT
  • 20250714让荣品RD-RK3588开发板在Android13下长按关机