float16与float32

记录一个bug,同一个模型输出保存为npy后计算余弦相似度与欧式距离后,发现余弦相似度为nan,

import numpy as np

# 读取两个 .npy 文件
# array1 = np.load('./code/fbocc-train/onnx_context_res.npy')
array1 = np.load('./code/fbocc-train/res_npy/pth_context_res.npy')
array2 = np.load('./code/fbocc-train/res_npy/pth_context_res.npy')

# 计算欧氏距离
euclidean_distance = np.linalg.norm(array1 - array2)

# 计算余弦相似度
dot_product = np.sum(array1 * array2)
norm_array1 = np.linalg.norm(array1)
norm_array2 = np.linalg.norm(array2)
cosine_similarity = dot_product / (norm_array1 * norm_array2)

print("欧氏距离:", euclidean_distance)
print("余弦相似度:", cosine_similarity)

在这里插入图片描述
原因就是模型输出时两个输出的精度不同,一个是float16,一个是float32,在做除法时有问题

print("context: ", context.cpu().numpy().dtype)
print("depth: ", depth.cpu().numpy().dtype)
np.save("./res_npy/pth_context_res.npy", context.cpu().numpy())
np.save("./res_npy/pth_depth_res.npy", depth.cpu().numpy())

在这里插入图片描述
解决方法,在保存npy时就转换成float32位的

import numpy as np

# 假设 feat 是您要保存的 float32 格式的数据
feat = np.array([1.0, 2.0, 3.0], dtype=np.float32)
# 保存为 .npy 文件
np.save("./feat.npy", feat)

另外,onnx推理时不会出现这个问题,onnx会对结果类型进行自动转换。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一位不愿暴露自己的小可爱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值