通过这种方式,在每个batch的训练中,我们实际上将原图a)转化成了一个子图b),因此当原图很大无法塞进内存的时候,我们可以通过调小batch_size解决这样的问题。 根据逐层更新公式可知,每一个block之间的计算是完全独立的,因此NodeFlow提供了函数block_compute以提供底层embedding向高层的传递和计算工作。 Neighbor Sampling 现...
NodeFlow是一种层次结构的图,节点被组织在层之内(比如上面例子中2层的GCN节点分布在Layer0, Layer1 和 Layer2中),只有在相邻的层之间才存在边,两个相邻的层称为块(block)。NodeFlow是反向建立的,首先确立一个batch内需要更新的节点集合(即Layer2中的节点),然后这个节点的1阶...
h_neigh = graph.dstdata['neigh'] elif self._aggre_type == 'gcn': check_eq_shape(feat) graph.srcdata['h'] = feat_src graph.dstdata['h'] = feat_dst graph.update_all(fn.copy_u('h', 'm'), fn.sum('m', 'neigh')) # 除以入度 degs = graph.in_degrees().to(feat_dst) h_...
该函数的细节如下所示。 1defexpand_as_pair(input_, g=None):2ifisinstance(input_, tuple):3#二分图的情况4returninput_5elifgisnotNoneandg.is_block:6#子图块的情况7ifisinstance(input_, Mapping):8input_dst ={9k: F.narrow_row(v, 0, g.number_of_dst_nodes(k))10fork, vininput_.items(...
如我们所愿,上述定义的Block确实是一个bipartite。block的起点集合中有5是因为DGL会把生成block的子图中的终点放在子图起点集合的最前面并作为block的起点集合。 参考资料 1.定制用户自己的邻居采样器:6.4 定制用户自己的邻居采样器 2.is_unibipartite说明文档:dgl.DGLGraph.is_unibipartite - DGL 0.6.1 documentation...
这里要引入DGL实现采样得到的Block的概念,通俗理解 Block其实就是采样得到的子图,而这些子图里的边也有对应这开始节点和结束节点以及边类型等和 全Graph同等 的一些属性。 我们可以这样理解:DGL实现的Block可以把看作一个数组,数组里的每一个元素是图上一层邻居的采样,Block内部节点是 从远到近的顺序排列内部的Block...
torch.int64>>>g32_2 = g64.int()# convert to int32>>>g32_2.idtype torch.int32 1.3 DGL中节点特征和边的特征 DGL中可以给节点和边添加特征,节点特征可以访问ndata,边特征可以访问edata。 01.>>>importdgl02.>>>importtorchasth03.>>> g = dgl.graph(([0,0,1,5], [1,2,2,0]))# 6...
elif g is not None and g.is_block: # 子图块的情况 if isinstance(input_, Mapping): input_dst = { k: F.narrow_row(v, 0, g.number_of_dst_nodes(k)) for k, v in input_.items()} else: input_dst = F.narrow_row(input_, 0, g.number_of_dst_nodes()) ...
sample``fanout``neighbors.frontier=dgl.sampling.sample_neighbors(g,seeds,fanout,replace=True)# Then we compact the frontier into a bipartite graphformessage passing.block=dgl.to_block(frontier,seeds)# Obtain the seed nodesfornext layer.seeds=block.srcdata[dgl.NID]blocks.insert(0,block)return...
因为采样是由内向外采样的,而聚合是由外向内聚合的。这里要引入DGL实现采样得到的Block的概念,通俗理解 Block其实就是采样得到的子图,而这些子图里的边也有对应这开始节点和结束节点以及边类型等和 全Graph同等 的一些属性 。 我们可以这样理解 :DGL实现的Block可以把看作一个数组,数组里的每一个元素是图上一层邻居...