热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

图对比学习GMIcodestudy

talk将对近年来的SSL-GNN做出一个整体分析,基于作者的开源代码1.GMIGMI的损失不像DGI下降的那么快,结果也一般。同时缺点很明显&#




talk

将对近年来的SSL-GNN做出一个 整体分析,基于作者的开源代码


1. GMI

GMI的损失不像DGI下降的那么快,结果也一般。 同时缺点很明显:GPU增加,时间变慢,epoch增加,精度没增加,这里双重DGI损失,没有采用 双判别器,采用 负采样+soft_plus
在这里插入图片描述


1.1 Cora dataset

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


1.2 Citeseer

在这里插入图片描述
在这里插入图片描述


1.3 Pubmed — dim=512, GPU OOM

在这里插入图片描述


— dim =256, 才可以运行, 但gpu 需要 18G,很大了。 重构邻接矩阵所导致的问题

在这里插入图片描述
训练时间很长,epoch还是很大,结果也不尽人意
在这里插入图片描述
在这里插入图片描述
这里我额外做了两个实验,分别 对文章 所提出的额外的两个损失进行了消融,
首先 不考虑重构
在这里插入图片描述
GPU减小
在这里插入图片描述
其次,再次不考虑 h 和 其邻居(本文最大创新),这样就变成了和DGI损失类似,GPU当256时候在11G之下,和DGI作者当时在paper中报导的类似。 但是收敛特别慢,结果也很差。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


突然发现 原论文的 code 对于citeseer和pubmed要求是一层!!! 修改后

Pubmed 的GPU -usage还是很大。 那就看效果吧。。。
在这里插入图片描述
还是一样~,没有达到论文acc
在这里插入图片描述


Notes:

原论文里面 声称自己 citeseer 和 pubmed 的 维度都是 512, 且作者只是在 reddit 和 ppi 时候 采用了 graphsage进行 采样。且 GPU 是Tesla P40— 24G。 这篇方法 无疑是 有问题的, 后续的很多文章 都是在 computers等amazon的数据集上都是OOM,也有见过pubmed 报OOM。

在这里插入图片描述
自己方法本来就有问题,还要踩一脚DGI,况且DGI 只是改变encoder 并不是什么复杂的事,GMI根本无法扩展。像这么胆大的 作者简直了, 还有勇气开源,,lol,,, 不知道 是不是自己之前的code有什么tricks,但开源的确实有很大问题, 貌似 西交这个 作者 把这个扩展成了期刊。 如果有人可以复现~ 还请告知 , 谢谢~


2. Only spotlights in code

代码大都是和DGI一样的,但是计算损失不一样,并且采用了负采样(实际上不是 我开始想象的那样 采用5个负样本,而是 5次 shuffle 进行平均, 损失 不是采用 交叉熵,而是 DIM 的变分 sp_plus)~~


采样: 实际上这个负采样 就是 dgi里面的 shuffle if条件使得 所有 节点都必须改变位置

这里 根据 sample_times 进行采样, 代码里面和原文 保持一致,采样5个负样本,不对,这里是 通过随机randint 产生的samole_list是 包含五组,通过下标(randnum)。每一组都是 2708个index。 这里和dgi的方式本质是一致的,同时通过判断,确认 打乱的数组 节点下标一定和之前不一样。(比dgi通过 np.random.permutation 打乱后 有可能 当前节点index还是一样)
在这里插入图片描述
这里计算损失确实 和原文一致,采用了JS散度计算,目标函数和DIM中的JS损失 的一样
在这里插入图片描述
感兴趣的同学 可以去看 DIM 的原文,很经典的 互信息无监督 cv表征学习的文章, 其中有太多 散度等知识,之前看过,每次都是晕晕的 DIM 分析

在这里插入图片描述
代码中的 这个 mi_loss_jsd 就是计算出 js的MI, 由于 要最大化 因此 目标函数 = -1* 论文中的11(MI) ,因此 这里code是 两项相加
这里负样本得分传进来是 5组 两次 mean 求得最终损失
DIM 损失 JSD-MI 计算
在这里插入图片描述
输入是 正样本对 的得分 + 负样本对 的得分 res_mi_pos+res_mi_neg 计算节点h和s res_local_pos+res_local_neg 计算 节点h和原始x
在这里插入图片描述
判别器修改:
h_c h_pl 是正样本对 12708256 127081433. sc_1是正样本对得分 这里 从 h_pl(节点中)中通过下标选出 一组 负样本 h_mi 127081433, 再次计算 负样本和 正样本的得分。返回的 sc_1 正样本。 sc_2是一个包含5个 得分的 随机采样负样本和正样本的得分,相当于是把 dgi 的 负样本得分 计算了五次,这样肯定会增大时间
在这里插入图片描述







推荐阅读
  • OpenMap教程4 – 图层概述
    本文介绍了OpenMap教程4中关于地图图层的内容,包括将ShapeLayer添加到MapBean中的方法,OpenMap支持的图层类型以及使用BufferedLayer创建图像的MapBean。此外,还介绍了Layer背景标志的作用和OMGraphicHandlerLayer的基础层类。 ... [详细]
  • Givenasinglylinkedlist,returnarandomnode'svaluefromthelinkedlist.Eachnodemusthavethe s ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • Android自定义控件绘图篇之Paint函数大汇总
    本文介绍了Android自定义控件绘图篇中的Paint函数大汇总,包括重置画笔、设置颜色、设置透明度、设置样式、设置宽度、设置抗锯齿等功能。通过学习这些函数,可以更好地掌握Paint的用法。 ... [详细]
  • 上图是InnoDB存储引擎的结构。1、缓冲池InnoDB存储引擎是基于磁盘存储的,并将其中的记录按照页的方式进行管理。因此可以看作是基于磁盘的数据库系统。在数据库系统中,由于CPU速度 ... [详细]
  • STL迭代器的种类及其功能介绍
    本文介绍了标准模板库(STL)定义的五种迭代器的种类和功能。通过图表展示了这几种迭代器之间的关系,并详细描述了各个迭代器的功能和使用方法。其中,输入迭代器用于从容器中读取元素,输出迭代器用于向容器中写入元素,正向迭代器是输入迭代器和输出迭代器的组合。本文的目的是帮助读者更好地理解STL迭代器的使用方法和特点。 ... [详细]
  • #define_CRT_SECURE_NO_WARNINGS#includelist.h#includevoidSListInit(PNode*pHead ... [详细]
  • Python教学练习二Python1-12练习二一、判断季节用户输入月份,判断这个月是哪个季节?3,4,5月----春 ... [详细]
author-avatar
手机用户2602921303_852
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有