본문 바로가기

728x90

DL & ML/Graph

(15)
[논문] HMSG : Heterogeneous Graph Neural network based on Metapath Subgraph Learning 본 글은 논문을 읽고 공부를 하는 과정에서 이해한 바를 번역 / 설명 해둔 글입니다. 혹시 동일 논문을 읽는 다른 분들께 도움이 되었으면 하여 정리해두나 잘못된 부분이나 부족한 부분이 있을 수 있습니다. 따라서 잘못된 부분 / 궁금한 부분이 있으면 언제든지 댓글 환영합니다.😄 최근 heterogeneous graph를 다루는 방법에 대해서 연구하면서 찾게 된 논문이다. 작년 하반기에 나온 매우 따끈따끈한 논문! 한 번 정리하면서 읽어보려 한다. heterogeneous graph와 homogeneous graph의 차이가 궁금하다면 이 글을 참고하길 바랍니다! HMSG: Heterogeneous Graph Neural Network based on Metapath Subgraph Learning Many..
[DGL] remove_edges로 그래프 내 특정 edge 제거하기 dgl.DGLGraph.remove_edges — DGL 0.8.0 documentation © Copyright 2018, DGL Team. Revision 58346042. docs.dgl.ai DGL 라이브러리를 사용하여 만든 그래프에서 특정 엣지를 제거하고 싶을 때는 remove_edges를 사용하면 된다! heterogeneous graph에서의 예시는 dgl 문서에 쉬운 예제로 잘 설명되어있다. >>> g = dgl.heterograph({ ... ('user', 'plays', 'game'): (torch.tensor([0, 1, 1, 2]), ... torch.tensor([0, 0, 1, 1])), ... ('developer', 'develops', 'game'): (torch.tens..
[DGL] RelGraphConv에서 IndexError: index out of range in self 문제! RelGraphConv layer로 계산을 하는 중 다음과 같은 에러를 만났다. IndexError: index out of range in self 도저히 왜 나는지 이해가 안가서 dgl 라이브러리의 코드를 직접 뜯어서 해당하는 위치에 코드를 확인해보았다. 에러가 나는 부분은 다음 위치였다. File ~/anaconda3/envs/dgl/lib/python3.8/site-packages/dgl/nn/pytorch/conv/relgraphconv.py:245, in RelGraphConv.basis_message_func(self, edges, etypes) --> 245 weight = weight.index_select(0, etypes) 246 msg = th.bmm(h.unsqueeze(1), w..
[DGL] heterogeneous graph를 homogeneous graph로 변환할 때 edata, ndata 함께 전달하기 heterogeneous graph를 homogeneous graph의 형태로 변환하는 과정에서 edata를 함께 전달해야하는 상황이었다! 우선 hetero -> homo의 경우 dgl에서 to_homogeneous 라는 라이브러리를 제공한다. dgl.to_homogeneous — DGL 0.9 documentation ndata (list[str], optional) – The node features to combine across all node types. For each feature feat in ndata, it concatenates G.nodes[T].data[feat] across all node types T. As a result, the feature feat of all node..
[DGL] TypeError : default_collate 에러 (DGL.batch, collate_fn) 데이터셋을 만들고 dataloader로 넘겨주었는데 dataloader에서 값을 받는 중에 만난 에러! 내가 만들고자 한 것은 dgl 라이브러리의 heterogeneous graph 타입의 그래프를 반환해주는 dataset / dataloader 였다. dataset과 dataloader는 PyTorch 타입을 사용했는데 아래와 같은 에러를 만났다. TypeError: default_collate: batch must contain tensors, numpy arrays, numbers, dicts or lists; found 찾아보니 배치로 넘겨줄 때의 output 값은 꼭 tensors, numpy arrays, numbers, dicts, lists 중 하나여야 한다고.. 그래프 데이터를 넘겨주는 ..
[DGL] 기본 message passing layer 만들기 GNN에서는 message passing을 통해 이웃 노드들의 feature를 통합하고, 이를 기반으로 타겟 노드의 새로운 embedding을 생성합니다. 이 과정을 위해 dgl 라이브러리에서는 여러 built-in function을 제공합니다. 먼저, 이웃 노드의 feature를 통합하여 message 형태로 만드는 역할을 message function, message로 새로운 vector를 만드는 역할을 하는 것을 reduce function이라고 합니다. 대부분의 GNN에서 message passing은 반드시 필요합니다. message passing을 통해서 이웃 노드의 feature를 가지고 오고, 가지고 온 feature들을 통해서 그 노드의 새로운 을 결정합니다. DGL에서는 이웃 노드의 f..
[DGL] local_scope란? dgl 라이브러리를 사용한 그래프를 다루는 함수 중에서 with graph.local_scope() 라는 코드가 종종 보입니다! 이 코드는 무슨 역할을 해주는 코드일까요? dgl.DGLGraph.local_scope — DGL 0.7.2 documentation © Copyright 2018, DGL Team. Revision de0eb209. docs.dgl.ai 공식 문서를 참고 해보면 local_scope 내에서 그래프를 변형할 경우 실제 그래프에 반영이 되지 않는다고 합니다! 예시를 통해 한 번 살펴볼까요? 자, 다음과 같은 그래프가 있다고 가정해봅시다! >>> g = dgl.graph((torch.tensor([0, 1, 1]), torch.tensor([0, 0, 2]))) >>> g Grap..
[DGL] ndata, edata, srcdata, dstdata란? homogeneous graph(단순 노드, 엣지가 한가지 의미를 가지고 있는 그래프)에서 각 노드의 feature 정보를 표현하기 위해서는 ndata라는 속성을 이용하면 됩니다. 반대로 각 엣지의 feature 정보를 표현하기 위해서는 edata라는 속성이 있습니다. 예를 들어 인스타그램 팔로우 그래프를 만든다고 가정해봅시다. 아래 예시는 사용자는 총 6명이고, 각각의 팔로우 여부를 의미합니다. (*참고로 dgl에서 노드는 0번부터 연속적으로 생성이 됩니다. 중간에 비어있는 id도 노드가 생성이 됩니다.) >>> src_ids = torch.tensor([0, 2, 3, 2, 1]) >>> dst_ids = torch.tensor([2, 3, 1, 5, 4]) >>> g = dgl.graph((src_..

728x90