![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
graph ML&&DL
图基础,图深度学习
canaryW
武大计科硕士,阿里云工程师,研究兴趣包括图神经网络、分布式计算
展开
-
Heterogeneous Graph Attention Network阅读笔记
Xiao Wang, Houye Ji, Chuan Shi, Bai Wang, Yanfang Ye, Peng Cui, and Philip S Yu. 2019. Heterogeneous Graph Attention Network. In The World Wide Web Conference (WWW '19). Association for Computing Machinery, New York, NY, USA, 2022–2032. DOI:https://doi.or.原创 2021-08-17 18:52:48 · 300 阅读 · 0 评论 -
PyTorch Geometric自定义模型
这块的内容介绍相当的少,官网给出的doc也描述的没有非常清晰,以至于我刚开始学的时候非常云里雾里。后来慢慢明白了之后,才慢慢看懂官网的doc。首先给出官网的doc:这一块我们要注意几个点:方块代表的是聚合邻居信息的操作,比方说sum,mean,max,γ代表的是结合上一跳邻居信息和节点信息的更新操作,φ代表的是接受邻居信息的操作。了解了这些知识,再看PyG的注解就容易了,我们需要实现的是这几个函数,就可以自定义GNN的一层:总结下来就这几点:MessagePassing定义邻居信息的聚合器,原创 2021-10-01 17:29:42 · 153 阅读 · 0 评论 -
torch归一化
做GNN的人会常常需要将矩阵进行行归一化,之前一直是自己手动实现归一化,现在发现一个很好用的API:torch.nn.functional.normalize()看看官方文档:实例:>>> xtensor([[ 1, 2, 34], [ 4, 5, 6]])>>> F.normalize(x.float(),p=1,dim=1)tensor([[0.0270, 0.0541, 0.9189], [0.2667, 0.3原创 2021-10-19 16:59:33 · 6635 阅读 · 0 评论 -
pytorch dropout || model.train() || model.eval()
今天学习pytorch,发现模型中间加了一层dropout层:x = F.dropout(x, training=self.training)大家知道,dropout层的作用就是将前面一层神经元的元素以一定概率置为0,减少模型对于某些特征的依赖,提高模型的泛化性。这个training=self.training是啥意思呢。要知道我们的模型都是继承自nn.Module类,这个类在训练的时候会使得self.training为true,此时我们就正常使用dropout,而在测试的时候,self.traini原创 2021-10-01 13:26:28 · 623 阅读 · 0 评论 -
SemRec读后感:Semantic Path based Personalized Recommendation on Weighted Heterogeneous
这篇论文首先提出了一种在加权异构图上进行推荐的模型。其思路也比较朴素:给定一个异构图,一个user−itemuser-itemuser−item评分矩阵,一组元路径,任务是预测某个用户uuu对某个物品iii的评分。首先对于一条元路径,计算在这个前提下uuu对iii的评分,然后将这组元路径下的评分组合起来得到评分。对于一条元路径,计算u对i的评分的步骤如下:根据元路径计算出uuu和其它用户的相似度。使用相似度和其它用户对于i的评分来得到此uuu对这个iii的评分。对于一条元路径lll,我们已经原创 2021-08-19 14:55:36 · 381 阅读 · 0 评论 -
torch.nonzero
这个API传入一个Tensor参数,返回这个Tensor中所有不为0的下标。>>> x=torch.tensor([[0,0,1],[1.,0,0],[1,1,1]])tensor([[0., 0., 1.], [1., 0., 0.], [1., 1., 1.]]) >>> torch.nonzero(x)tensor([[0, 2], [1, 0], [2, 0],原创 2021-10-20 16:06:12 · 392 阅读 · 0 评论 -
#1 metapath2vec
metapath 是最早一批提出使用源路径来进行异构图标识学习的,其思想就是对于图中的节点,先使用源路径采样其邻居,然后优化节点的嵌入是的生成邻居的概率最大。首先是符号描述:我们首先描述一下同构图当中node2vec的思想,因为其与我们的metapath2vec相当地相似:在同构图当中进行节点嵌入的优化目标为:其中N(v)代表我们采样出的近邻节点,这也相当好理解,就是优化节点的嵌入,使得生成这个图的概率最大。matepath2vec那么同样的,我们首先很容易得到这样一个思想:在异构图.原创 2021-09-20 11:11:47 · 599 阅读 · 0 评论 -
pytorch条件选择行和列
在使用pytorch中,我们有时会需要按照某些条件去选择行和列(甚至是任意一维),这时候可以这么选择:a=torch.tensor(……) # a是一个n维的tensorb=a[:,:,…,condition,…:,:] # 在某维上指定条件比方说:>>> a=torch.tensor([[1,2,3],[4,5,6],[7,8,9]])>>> condition=[True,False,True]>>> a[condition,:]原创 2021-10-16 20:54:20 · 3713 阅读 · 0 评论 -
knowledge graph embedding---Trans全家桶
知识图谱(knowledge graph)是一种具有多种节点类型和多种连接关系的网络,因为其可以表示现实世界中丰富的关系而得到重视,从知识图谱中挖掘出有用的信息称为研究的一个热点。但是目前绝大多数数据挖掘的方法处理的输入都是向量空间,无法在图上进行数据挖掘,因此,将图的节点与关系使用向量的形式表示——这就是embedding的含义。图经过embedding之后,可以使用很成熟的数据挖掘方法进行处理。把图空间映射到向量空间的这个过程叫做图的表示学习。下图就是将网络中的节点嵌入到一个二维的向量中,从而使用经典机原创 2021-08-15 12:06:59 · 519 阅读 · 0 评论 -
DGL-KE使用
DGL-KE是亚马逊开发的基于DGL 的知识图片嵌入库,提供了TransE,TransR等一系列嵌入方法,可以使用命令行的方式快速得到知识图谱中实体和关系的嵌入。我遇到一个需求,需要将知识图谱中的实体和关系嵌入到低维向量,我首先想到的是使用清华的开源知识图谱嵌入库open-ke,但是当我在Ubuntu上面安装好时,我发现其只能支持在GPU上进行嵌入计算,但是我的虚拟机上没有条件安装CUDA,因此我将目光转向DGL-KE。DGL-KE入门教程:首先在Ubuntu上安装:sudo pip3 inst.原创 2021-08-25 16:31:46 · 1186 阅读 · 0 评论 -
pytorch稀疏矩阵
因为我是做GNN的,在图中存储邻接矩阵时如果使用矩阵是相当浪费的,因为矩阵中绝大多数元素都是0,这时我们可以使用稀疏矩阵来存储数据:1. coo存储格式在上图中,因为绝大多数元素都是0,因此我们只需要三个向量就能存储全部信息:非零元素的行下标,非0元素的列下标,非0元素的值。2. torch sparse此处提供的API为:torch.sparse_coo_tensor(index,value,size)函数接收三个参数,返回一个紧密矩阵参数:index:shape为[2,n],代表着原创 2021-10-16 11:10:48 · 3827 阅读 · 3 评论 -
top n推荐的数据集划分和评价指标
最近在做top n推荐,但是无论怎么做都达不到其它论文里那么高的hit radio,于是我仔细地看了这篇论文—《Neural Collaborative Filtering》,发现其在实验部分有许多trick,使得实验数据看起来非常漂亮。数据集划分–留一法我们要想评价数据集训练效果,就要让整个数据集划分为训练集和测试集,对于推荐系统而言,训练集越多,语义月丰富,推荐效果趋向于越好。举个极端的例子,如果训练集很小,那么就会遇到冷启动的问题,因此,这篇论文当中对于每一个用户,只选取最近的item交互记录作原创 2021-09-02 13:06:36 · 733 阅读 · 0 评论 -
手撸GCN
今天周六,不是很想看论文,于是自己动手把几种GNN手撸一遍,GCN的代码如下:1. 得到数据这里我使用的是经典的Cora数据集,用于进行节点分类,我是直接使用的PyG中提供的数据集,节点特征、节点标签、训练集测试集都可以直接调用:from torch_geometric.datasets import Planetoidimport torch# 使用PyG提供的数据集,懒得自己写解析规则# 这一步如果下载不下来亲测开个VPN就行了dataset = Planetoid(root='../d原创 2021-10-16 15:06:57 · 281 阅读 · 0 评论 -
Hierarchical Graph Pooling with Structure Learning
阅读于:2022-01-14这篇文章是做graph pooling的,整篇文章做的相当不错,读完感觉酣畅淋漓这篇文章的主旨非常巧妙,我们知道hierarchical graph pooling需要每层消减节点数量,最终得到整个graph的表示,那么就需要解决两个问题:1. 如何进行节点消减?2. 如何在节点消减之后的图进行拓扑信息(临界矩阵)重构?为了应对这两个问题,这篇文章分别提出了非常新颖的途径:graph pooling我们对图中的每个节点计算其是否可以由邻节点表示,如果这个节点可以由原创 2022-01-14 15:15:30 · 947 阅读 · 0 评论 -
pyg在大图上面进行GNN
今天想在reddit数据集上跑实验,发现pyg默认的sage_conv是不支持邻居采样、batch训练的,需要使用pyg提供的NeighborLoaderpyg中的NeighborLoader原创 2022-02-20 12:08:37 · 1044 阅读 · 0 评论 -
torch-geometric安装
今天看一个源码使用了pyg,于是直接pip install torch-geometric,安装之后却总是提示找不到torch_sparse包,这是因为pyg有几个依赖包没有正确安装,你如果要一个个去安装,需要自己去对应这些包的版本,还是比较麻烦的,正确的做法是去pyg官网生成安装的命令,可以一次性安装好pyg。...原创 2022-01-17 11:59:40 · 679 阅读 · 0 评论