写对比学习损失函数有感(关于速度差异、出现nan的情况)

出现nan的情况

1、比如 loss = sum(loss[i]) / count,这个时候就要小心分母,如果分母是0的话,loss就会变成nan。

2、使用交叉熵,因为有一个log函数,要注意内部。比如,-log(fenzi / fenmu),首先分母不能为0,第二分子也不能为0(否则log(0)一样会出问题),所以最好对分子分母都加一个很小的值,比如1e-8。

运行速度

使用time.perf_counter()来计时,因为time.time()得到的是以秒为单位的时间,在这里不合适。

1、创建一个 1024*1024 的二维数组:

python列表:158
在这里插入图片描述

torch.zeros:131
在这里插入图片描述

np.zeros:0.38
在这里插入图片描述

torch.zeros(1024, 1024).to(‘cuda’):55839
在这里插入图片描述

结论:如果用torch.zeros创建数组,还往cuda里放的话,速度会非常慢。最好用numpy,快好几个数量级。

2、给 1024*1024 的二维数组遍历赋值:

python自带数组:1800
在这里插入图片描述

torch.tensor.to(‘cuda’):39400
在这里插入图片描述

np.zeros:4700
在这里插入图片描述

结论:在赋值方面np略逊于原生数组,但是没有数量级上的差距。tensor更不用说了,慢死人。

3、给 1024*1024 的二维数组遍历赋值,而且计算余弦相似度:

torch.tensor的数组,以及F.cos的相似度:774
在这里插入图片描述

np的数组,以及np的相似度:686
在这里插入图片描述

我所用的转化一大堆转来转去的相似度:624
在这里插入图片描述

结论:计算相似度的话,几种方法都差不多。而且都不高。最耗时的,还是创建数组的过程。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值