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

pytorch torch.isclose函数介绍

torch.isclose 是 PyTorch 中用于比较两个张量是否“近似相等”的函数。它主要用于判断两个张量的对应元素在数值上是否接近(考虑了浮点数精度的可能误差)。


函数定义

torch.isclose(input, other, rtol=1e-05, atol=1e-08, equal_nan=False)

参数说明

  1. input (Tensor):

    • 第一个张量。
  2. other (Tensor):

    • 第二个张量,和 input 的形状必须相同,或者可以通过广播机制与 input 对齐。
  3. rtol (float, 可选,默认值:1e-05):

    • 相对容忍误差(relative tolerance)。比较时的相对误差阈值,定义了两个值相对距离的可接受范围。
  4. atol (float, 可选,默认值:1e-08):

    • 绝对容忍误差(absolute tolerance)。比较时的绝对误差阈值,定义了两个值绝对距离的可接受范围。
  5. equal_nan (bool, 可选,默认值:False):

    • 是否将 NaN 视为“接近”。
    • 如果为 True,则两个 NaN 会被认为是相等的。

返回值

  • 返回一个与 input 和 other 形状相同的布尔张量。
  • 每个元素表示 input 和 other 对应位置的元素是否“近似相等”。

比较规则

两个元素 aa 和 bb 被认为是“近似相等”的条件是:

  • |a - b|: 表示 input 和 other 对应元素之间的绝对差值。
  • atol: 绝对误差阈值。
  • rtol: 相对误差阈值。

常见用途

  • 比较浮点数是否相等(避免浮点数精度误差)。
  • 检查数值计算中张量的结果是否一致或接近。
  • 判断两个张量之间的元素是否在某个容忍范围内。

示例

import torch

# 创建两个浮点张量
a = torch.tensor([1.0, 2.0, 3.0001])
b = torch.tensor([1.0, 2.0, 3.0])

# 默认参数下比较
result = torch.isclose(a, b)
print(result)  # tensor([True, True, False])

# 调整容忍误差
result = torch.isclose(a, b, rtol=1e-03, atol=1e-05)
print(result)  # tensor([True, True, True])

# 比较含有 NaN 的张量
a = torch.tensor([1.0, float('nan')])
b = torch.tensor([1.0, float('nan')])

# 默认不认为 NaN 相等
print(torch.isclose(a, b))  # tensor([ True, False])

# 允许 NaN 相等
print(torch.isclose(a, b, equal_nan=True))  # tensor([ True, True])

注意事项

  • rtol 和 atol 的选择

    • 如果数值范围较大,可以增加 rtol
    • 如果数值精度要求较高,可以减小 atol
  • NaN 的比较

    • 默认情况下,torch.isclose 认为 NaN 是不相等的,除非 equal_nan=True

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

相关文章:

  • doris:远程存储
  • 【QT】增删改查 XML 文件的类
  • .net core 为什么使用 null!
  • Unity-Mirror网络框架-从入门到精通 总目录
  • 如何用代码提交spark任务并且获取任务权柄
  • 设计模式——泛型单例类
  • 基于单片机的室外休闲智能座椅设计(论文+源码)
  • 设计模式 行为型 策略模式(Strategy Pattern)与 常见技术框架应用 解析
  • 数据库课设——网上花店销售管理系统(上)
  • Jina AI/Reader:将 URL 和 PDF 内容自动化提取并转换为 LLM 可处理文本
  • 创建型模式5.单例模式
  • 【Linux】文件的压缩与解压
  • 利用Python爬虫获取API接口:探索数据的力量
  • Jenkins pipeline 发送邮件及包含附件
  • 【杂谈】-DeepSeek如何以560万美元突破成本障碍
  • Arduino IDE刷微控制器并下载对应固件的原由
  • SpringCloud系列教程:微服务的未来(六)docker教程快速入门、常用命令
  • thinnkphp5.1和 thinkphp6以及nginx,apache 解决跨域问题
  • Gary Marcus 预测2025年AI发展的25项展望:深刻反思与前瞻
  • 青少年编程与数学 02-006 前端开发框架VUE 09课题、计算属性
  • Django的runserver
  • 书籍推荐:Kubernetes 修炼手册
  • 121 买入股票的最佳时机
  • C4D2025 win版本安装完无法打开,提示请将你的maxon App更新至最新版本,如何解决
  • RabbitMQ如何实现队列持久化
  • Python数据可视化-Pandas绘图