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

pytorch torch.clamp函数介绍

torch.clamp 是 PyTorch 中用于对张量的元素进行限制(裁剪)的函数。它可以将张量中的每个元素裁剪到指定的范围内,超出范围的元素将被替换为边界值。


函数定义

torch.clamp(input, min=None, max=None, *, out=None)

参数说明

  1. input (Tensor):

    • 输入的张量。
  2. min (float 或 Tensor, 可选):

    • 最小值下界。
    • 如果指定,input 中所有小于 min 的值都会被替换为 min
  3. max (float 或 Tensor, 可选):

    • 最大值上界。
    • 如果指定,input 中所有大于 max 的值都会被替换为 max
  4. out (Tensor, 可选):

    • 用于存放结果的张量。其形状必须与 input 一致。

返回值

  • 返回一个张量,其中每个元素都在 [min, max] 范围内。

功能逻辑

对于张量中的每个元素 x,torch.clamp 会应用以下规则:

  • 如果 min 和 max 都指定了:

    y=max⁡(min⁡(x,max),min)
  • 如果只指定 min

    y=max⁡(x,min)
  • 如果只指定 max

    y=min⁡(x,max)

示例

1. 基本用法
import torch

# 输入张量
x = torch.tensor([-2.0, -1.0, 0.0, 1.0, 2.0])

# 将值裁剪到 [-1.0, 1.0] 范围
result = torch.clamp(x, min=-1.0, max=1.0)
print(result)  # tensor([-1., -1.,  0.,  1.,  1.])
2. 只指定最小值
result = torch.clamp(x, min=0.0)
print(result)  # tensor([0., 0., 0., 1., 2.])
3. 只指定最大值
result = torch.clamp(x, max=0.0)
print(result)  # tensor([-2., -1.,  0.,  0.,  0.])
4. 结合 Tensor 的边界
min_tensor = torch.tensor([-1.0, 0.0, -0.5, 0.5, -2.0])
max_tensor = torch.tensor([1.0, 0.5, 0.0, 1.5, 2.0])

result = torch.clamp(x, min=min_tensor, max=max_tensor)
print(result)  # tensor([-1.0000,  0.0000,  0.0000,  1.0000,  2.0000])

常见用途

  1. 防止数值溢出:将计算结果限制在某个范围内,避免出现过大或过小的值。

  2. 正则化:如在梯度更新时,限制权重值的范围。

  3. 图像处理:将像素值裁剪到 [0, 255] 范围。


注意事项

  • min 和 max 均为可选:如果两者都未指定,则原样返回 input
  • 支持广播min 和 max 可以是标量或张量,且支持广播。
  • 对 NaN 的行为:如果 input 中有 NaN,torch.clamp 不会处理它,结果依然是 NaN。

http://www.kler.cn/a/488183.html

相关文章:

  • WEB攻防-通用漏洞_文件上传_黑白盒审计流程
  • 【SpringAOP】Spring AOP 底层逻辑:切点表达式与原理简明阐述
  • AI时代来了,我们不再需要IDE了
  • 新版2024AndroidStudio项目目录结构拆分
  • 学习记录:C/C++ 中的续行符
  • 记录一次面试中被问到的问题 (HR面)
  • 在职研生活学习--20250108~开题报告随想
  • 深入浅出C#线程池ThreadPool:提升程序性能的利器
  • 华为企业组网的一些基本运用
  • matlab函数讲解——randsample
  • 数据结构-顺序表的相关算法实现
  • 工程工程项目管理软件的核心价值与应用策略
  • OpenCV相机标定与3D重建(53)解决 Perspective-3-Point (P3P) 问题函数solveP3P()的使用
  • Linux内核TTY子系统有什么(6)
  • 对Python的深度学习
  • 一键整理背包界面功能
  • 【GoLang】两个字符串如何比较大小?以及字典顺序的比较规则
  • vue 实现打包并同时上传至服务器端
  • 六、Angular 发送请求/ HttpClient 模块
  • Elasticsearch:聚合操作
  • 13_Redis Stream消息队列
  • ADO.NET知识总结4---SqlParameter参数
  • Redis数据结构ZipList和QuickList原理解析
  • 工厂管理中 BOM(物料清单)
  • Linux Red Hat 7.9 Server安装Docker
  • 【数据库】二、关系数据库