使用numpy或pytorch校验两个张量是否相等

文章目录

  • 1、numpy
  • 2、pytorch

做算法过程中,如果涉及到模型落地,那必然会将原始的深度学习的框架训练好的模型转换成目标硬件模型的格式,如onnx,tensorrt,openvino,tflite;那么就有对比不同格式模型输出的一致性,从而判断模型转换是否成功。

1、numpy

用到的核心代码就一行,就是:

import numpy as np
np.testing.assert_allclose(actual,expected,rtol,atol)

上代示例:

import numpy as np# 定义两个数组
actual= np.array([1.0, 2.0, 3.0])
expected = np.array([1.01, 1.99, 3.0])# 使用 np.testing.allclose 检查它们是否近似相等
np.testing.assert_allclose(actual,expected,rtol=0,atol=0.01)

输出:
在这里插入图片描述
最大的绝对误差是0.01,最大的相对误差是0.00990099.
再一个示例:

import numpy as np# 定义两个数组
actual= np.array([1.0, 2.0, 3.0])
expected = np.array([1.01, 1.99, 3.0])# 使用 np.testing.allclose 检查它们是否近似相等
np.testing.assert_allclose(actual,expected,rtol=0,atol=0.0100001)

只是改了atol 从0.01改成0.0100001。

所以关于rtol和atol做如下理解:
rtol 就是relative tolarance ,atol 就absolute tolarance.
先计算绝对误差:

diff = abs(actual-expecd) #绝对误差
tolarance = atol+ rtol*abs(expected) #误差容忍上限
if diff<tolarance:pass
else:print("报错信息,如图,有最大绝对误差 最大相对误差 不相等的百分比等")

最大绝对误差= max(diff)
最大相对误差= max(diff)/abs(expected)

函数默认的 atol=1e-7,rtol=0
但考虑到float32精度,有效数字也就7位,可以设置atol=1e-5,小数点后五位有效数字即可。

2、pytorch

pytorch有相似的api:

import numpy as np
import torch
actual= np.array([1.0, 2.0, 3.0])
expected = np.array([1.01, 1.99, 3.0])
torch.testing.assert_close(torch.tensor(actual),torch.tensor(expected),rtol=0,atol=0.011)

以上不会有任何输出

import numpy as np
import torch
actual= np.array([1.0, 2.0, 3.0])
expected = np.array([1.01, 1.99, 3.0])
torch.testing.assert_close(torch.tensor(actual),torch.tensor(expected),rtol=0,atol=0.01)

在这里插入图片描述
相比numpy,多给出了相关最大误差的位置及允许的上限。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/706541.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【面试干货】 两个有序数组的合并排序

【面试干货】 两个有序数组的合并排序 1、实现思想2、代码实现 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 1、实现思想 使用两个指针分别指向两个数组的起始位置&#xff0c;然后逐个比较两个指针所指向的元素&#xff0c;将较小的元素…

视觉叙事的艺术:StoryDiffusion打造一致性图像/视频故事创作

论文&#xff1a;https://arxiv.org/pdf/2405.01434 主页&#xff1a;StoryDiffusion: Consistent Self-Attention for Long-Range Image and Video Generation 一、摘要总结 本文提出了一种名为StoryDiffusion的新方法&#xff0c;用于生成一系列内容一致的图像和视频&#…

[vue] nvm use时报错 exit status 1:一堆乱码,exit status 5

报错exit status 5&#xff1a;&#xfffd;ܾ&#xfffd;&#xfffd;&#xfffd;&#xfffd;ʡ&#xfffd; 原因&#xff1a;因为当前命令提示符窗口是user权限&#xff0c; 解决&#xff1a;cmd使用管理员方式打开就可以 参考&#xff1a; vm use时报错 exit status 1…

华为认证考试流程是怎样的呢?

我们之前讲了华为认证hcie和hcip的学习内容、就业情况&#xff0c;那么华为认证考试流程是怎么样的呢&#xff1f;今天给大家详细介绍一下。 华为认证笔试流程和规则&#xff1a; 1.注册并预约考试 考生须使用华为账号预约考试&#xff0c;通过以下三种方式&#xff1a; ①网…

简单聊聊分布式和集群

前言 分布式和集群&#xff0c;我们都听的比较多&#xff0c;分布式系统和集群的概念对于刚进入职场的小伙伴可能不是很清楚&#xff0c;这篇文章我们就一起看看两者到底是什么&#xff0c;有什么区别。 什么是分布式系统&#xff1f; 先看下书面解释&#xff1a; 分布式系统…

Kotlin核心编程知识点-02-面向对象

文章目录 1.类和构造方法1.1.Kotlin 中的类及接口1.1.1.Kotlin 中的类1.1.2.可带有属性和默认方法的接口 1.2.更简洁地构造类的对象1.2.1.构造方法默认参数1.2.2.init 语句块1.2.3.延迟初始化&#xff1a;by lazy 和 lateinit 1.3.主从构造方法 2.不同的访问控制原则2.1.限制修…

一种新型多任务模型:模仿皮肤科医生进行临床图像中皮肤疾病的准确鉴别诊断

文章目录 A Novel Multi-task Model Imitating Dermatologists for Accurate Differential Diagnosis of Skin Diseases in Clinical Images摘要方法实验结果 A Novel Multi-task Model Imitating Dermatologists for Accurate Differential Diagnosis of Skin Diseases in Cli…

C语言 | Leetcode C语言题解之第86题分隔链表

题目&#xff1a; 题解&#xff1a; struct ListNode* partition(struct ListNode* head, int x) {struct ListNode* small malloc(sizeof(struct ListNode));struct ListNode* smallHead small;struct ListNode* large malloc(sizeof(struct ListNode));struct ListNode* …

Linux基础之进程的优先级

目录 一、进程优先级的概念 二、进程优先级的查看 三、怎么修改进程优先级 四、进程饥饿 一、进程优先级的概念 cpu资源分配的先后顺序&#xff0c;就是指进程的优先权&#xff08;priority&#xff09;。优先权高的进程有优先执行权利。配置进程优先权对多任务环境的linu…

react18【系列实用教程】useReducer —— 升级版的 useState (2024最新版)

useReducer 可看做升级版的 useState &#xff0c;其强大之处在于&#xff0c;可以自定义复杂的响应式变量修改逻辑。 useReducer 语法 useReducer 是 hook 函数 第一个参数&#xff08;必要&#xff09;&#xff1a; 自定义的 reducer 函数&#xff08;详见下文介绍&#xff…

【算法】网络图中的dfs

快乐的流畅&#xff1a;个人主页 个人专栏&#xff1a;《算法神殿》《数据结构世界》《进击的C》 远方有一堆篝火&#xff0c;在为久候之人燃烧&#xff01; 文章目录 引言一、单词搜索二、黄金矿工三、不同路径 |||四、图像渲染五、岛屿数量六、岛屿的最大面积七、被围绕的区域…

从零入门激光SLAM(十七)——SLAM中为什么用ESKF误差卡尔曼滤波器

上一节&#xff0c;介绍了卡尔曼滤波的基本原理&#xff0c;但在SLAM中却使用ESKF&#xff0c;让我们一起看看具体的原因是什么吧 一、误差卡尔曼滤波器ESKF(Error State Kalman Filter) 1.1动机 在常规的卡尔曼滤波器中&#xff0c;需要假定系统的状态服从高斯分布&#xf…