def dual_contrastive_loss(real_logits, fake_logits):device = real_logits.devicereal_logits, fake_logits = map(lambda t: rearrange(t, '... -> (...)'), (real_logits, fake_logits))def loss_half(t1, t2):t1 = rearrange(t1, 'i -> i ()')#最里面多了一个维度i*1t2 = repeat(t2, 'j -> i j', i = t1.shape[0])#i个j组合起来,重复的组合t = torch.cat((t1, t2), dim = -1)return F.cross_entropy(t, torch.zeros(t1.shape[0], device = device, dtype = torch.long))return loss_half(real_logits, fake_logits) + loss_half(-fake_logits, -real_logits)

dual_contrastive_loss粗略解读

real_logits, fake_logits = map(lambda t: rearrange(t, '... -> (...)'), (real_logits, fake_logits))

这里是将real_logits, fake_logits两个矩阵分别转化为一维数组。

t1 = rearrange(t1, 'i -> i ()')#让t1增加一个维度从i-》i*1
t2 = repeat(t2, 'j -> i j', i = t1.shape[0])#t2是一个j个元素的一维数组,这里让重复i个j组合起来。j-》i*j
t = torch.cat((t1, t2), dim = -1)#shape为i*1的t1和shape为i*j的t2在第二个维度上拼接起来

loss_half(real_logits, fake_logits)

loss_half(real_logits, fake_logits)的作用如下,real_logits的每个元素都在t的每行的第一列,idnex=0,F.cross_entropy交叉熵损失函数的目标标签全部是0,也就是说这行代码就是让real_logits的每个元素与fake_logits的所有元素相比,real_logits的每个元素的值最大。

F.cross_entropy(t, torch.zeros(t1.shape[0], device = device, dtype = torch.long))

loss_half(-fake_logits, -real_logits)

loss_half(-fake_logits, -real_logits)的作用如下,-fake_logits的每个元素都在t的每行的第一列,idnex=0,F.cross_entropy交叉熵损失函数的目标标签全部是0,意思是这行代码就是让-fake_logits的每个元素与-real_logits的所有元素相比,-fake_logits的每个元素的值最大。因为这里是两者的负号相比,所以这里的意思就是就是让fake_logits的每个元素与real_logits的所有元素相比,fake_logits的每个元素的值最小。

F.cross_entropy(t, torch.zeros(t1.shape[0], device = device, dtype = torch.long))

dual_contrastive_loss粗略解读相关推荐

  1. Jafka源码粗略解读之二--关于JMX

    2019独角兽企业重金招聘Python工程师标准>>> JMX Jafka里用到了JMX,之前也没用过,迅速突击了一下,感觉还是挺简单的: 有一篇文章用一个例子介绍JMX怎么使用的, ...

  2. 视频对象分割论文解读系列【1】

    此处最后粗略解读更新时间:2020-2-26 11. 论文:FusionSeg 我的印象:一个中规中矩的利用了光流图片的网络 效果: 一般,让人感觉边缘分割相对粗糙 网络结构: 思想: 网络包含两个分 ...

  3. Convolutional Neural Network Pruning with Structural Redundancy Reduction 公式解读

    Convolutional Neural Network Pruning with Structural Redundancy Reduction 公式解读 3, Claim 3.1 引入网络的五种剪 ...

  4. cglib代理的使用

    一.什么是CGLIB? 总的来说,无论是cglib.jdk动态代理又或者是aop面向切面编程,都运用到了一个最重要的设计模式--代理模式!万变不离其终,学好代理模式,打遍天下无敌手! cglib就是一 ...

  5. #4.2混沌数学与混沌理论

    一个序列试验数字,随着试验数据的增多,试验误差不是保持相对一致,而是被急剧放大,导致失去序列特征,进而进入混沌状态,这种现象被数学家进一步研究,产生混沌数学. "法国数学家昂利·庞加莱(He ...

  6. iOS10新特性及开发者要注意什么

    当晚看了WWDC2016直播,第二天我安装了iOS10试用版,我们发现变得谨慎而开放的苹果在新一版四大平台系统中展示了很多变化,当然重中之重还是伟大的iOS,看这架势苹果是要做一系列行业平台了.通过试 ...

  7. iOS开发-iOS10新特性及开发者主要注意点

    看了WWDC2016直播,我们发现变得谨慎而开放的苹果在新一版四大平台系统中展示了很多变化,当然重中之重还是伟大的iOS.通过试用iOS10beta版,除了长大了的更强大的Siri主要感受到iMess ...

  8. WDC2106 iOS10新特性及开发者要注意什么

    昨晚苹果在旧金山召开了WWDC,看了WWDC2016直播,我们发现变得谨慎而开放的苹果在新一版四大平台系统中展示了很多变化,当然重中之重还是伟大的iOS.通过试用iOS10beta版,除了长大了的更强 ...

  9. 黑马毕向东Java课程笔记(day14-1——14-11):集合类(集合框架)——集合类分类与特点+List集合接口及其子类

    1.集合类特点   为什么出现集合类? 面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方式.   数组和集合类同是容器,有何不同 ...

最新文章

  1. java读取hdfs文件夹_HDFS 读取、写入、遍历文件夹获取文件全路径、append
  2. java大量的print影响性能吗_printStackTrace()造成的性能瓶颈
  3. 让电脑死机的java代码_小编为你win7系统Java活动脚本出错导致电脑死机的还原方法...
  4. vue语法 `${ }` (模版字符串)
  5. ping 不通容器 宿主_使用容器的正确方式,Docker在雪球的技术实践
  6. boost::math模块计算因子和二项式系数的测试程序
  7. 在Windows上使用VSCode远程链接到Linux上开发并调试C++程序
  8. python之迭代器,生成器
  9. Visual Studio项目引用出现感叹号怎么办?
  10. 对象的释放Dispose和Close对比
  11. 5G手机还没普及 LG电子就已着手研发6G
  12. Jenkins持续集成环境常见问题分析及解决
  13. JSP自定义标签_属性接收复杂类型处理方式
  14. 《Asp.Net 2.0 揭秘记(十四)
  15. json转Map泛型Map<String,T>,json转集合Map泛型List<Map<String,T>>工具类
  16. java中如何实例化一个接口_「实例化」java之接口实例化 - seo实验室
  17. @@@Blog总目录@@@
  18. 物联网应用网站数据库设计
  19. 算法时间复杂度符号分析——O、o、Ω、ω、Θ
  20. c语言编程出彩色告白,C语言告白代码,一闪一闪亮晶晶~

热门文章

  1. 腾讯云CFS挂载问题
  2. 【Python 实操】labelImg标注的xml格式转换为yolo的txt文件
  3. canpcb阻抗_CAN网络 其特性阻抗及终端阻抗
  4. 区块链技术与其在旅游行业的应用
  5. sim卡没坏但苹果手机无服务_手机突然显示无SIM卡?这样做就能恢复~
  6. 现在AI发展到什么阶段了
  7. python人脸识别、语音合成、智能签到系统
  8. latex文件里面一个章节放的图表太多编译出现oo many unprocessed floats的解决方案
  9. struct cred
  10. Mac 搭建本地SVN,并使用Cornerstone管理svn