728x90
반응형
dgl 라이브러리를 사용한 그래프를 다루는 함수 중에서
with graph.local_scope() 라는 코드가 종종 보입니다!
이 코드는 무슨 역할을 해주는 코드일까요?
공식 문서를 참고 해보면 local_scope 내에서 그래프를 변형할 경우 실제 그래프에 반영이 되지 않는다고 합니다!
예시를 통해 한 번 살펴볼까요?
자, 다음과 같은 그래프가 있다고 가정해봅시다!
>>> g = dgl.graph((torch.tensor([0, 1, 1]), torch.tensor([0, 0, 2])))
>>> g
Graph(num_nodes=3, num_edges=3,
ndata_schemes={}
edata_schemes={})
이때, edata['h']를 추가해주는 함수 test를 만들어봅니다.
def test(g) :
g.edata['h'] = torch.ones((g.num_edges()), 3)
test 함수에 g를 넣어보면 따로 반환을 받지 않아도 그래프 g에 edata가 추가된 것을 확인할 수 있습니다!
>>> test(g)
>>> g
Graph(num_nodes=3, num_edges=3,
ndata_schemes={}
edata_schemes={'h': Scheme(shape=(3,), dtype=torch.float32)})
그런데 만약! 원본 그래프를 전혀 건들고 싶지않다면?
이때 local_scope를 사용해주면 됩니다!
다음과 같이 local_scope를 추가한 test 함수에 그래프 g를 넣어보면
def test(g) :
with g.local_scope() :
g.edata['h'] = torch.ones((g.num_edges()), 3)
그래프에 edata가 추가되지 않은 것을 확인할 수 있습니다!
>>> test(g)
>>> g
Graph(num_nodes=3, num_edges=3,
ndata_schemes={}
edata_schemes={})
필요에 따라서 local_scope 기능을 사용해주면 됩니다!!
주로 학습하는 과정 속에서 학습 데이터 그래프의 구성이 변하면 안되므로 local_scope을 함께 사용해주어야 합니다.
728x90
반응형
'DL & ML > Graph' 카테고리의 다른 글
[DGL] TypeError : default_collate 에러 (DGL.batch, collate_fn) (0) | 2022.03.03 |
---|---|
[DGL] 기본 message passing layer 만들기 (0) | 2022.02.04 |
[DGL] ndata, edata, srcdata, dstdata란? (0) | 2022.02.04 |
[DGL] Graph와 Heterogeneous Graph의 차이 (0) | 2022.02.04 |
[그래프와 추천 시스템] 페이지 랭크 계산하기 (0) | 2022.02.02 |