연구

deep graph library - pad_packed_tensor

햎피 2022. 8. 31. 22:15
반응형

dgl의 backend 부분에 pad_packed_tensor라는 함수가 있다.

아무래도 백엔드를 다루는 함수이다보니, 함수내부는 파이썬으로 코딩이 안되어있나보다.

사용 방법만 나와있다.

 

이 함수가 하는 역할은

"Pads a packed batch of variable length tensors with given value." 인데,

 어떤 값으로 가변 길이의 텐서 배치를 패딩하는 것이다.

 

다시한번 자세히 설명해보겠다!

 

dgl에서 graphconv를 예로들어보자.

dgl에서 forward함수를 통해 graph가 들어오고, graphconv를 통과시키면 결과 차원은 (배치의 전체 노드갯수 x dimension)으로 나온다.

 

그런데 이렇게 되면 배치 안에 존재하는 compound 한개가 atom을 몇개 가지고있는지 대한 정보를 알 수 없다.

batch_num_nodes()라는 함수를 사용하면, graph 한개 에서의 node 갯수를 알 수 있다.

(graph가 compound 일 경우에, 해당 compound의 atom 갯수를 알 수 있음)

32개의 compound에 각 compound내에 존재하는 atom 의 갯수

그리고 pad_packed_tensor 함수의 입력값으로 graphconv 결과 임베딩(2차원임, 배치의 전체 노드갯수 x dimension이므로), 그래프에 batch_num_nodes()함수를 적용한 것, 패딩하고 싶은 값을 넣어주면, 3차원으로 값이 나온다.

이때 3차원 값은 (배치크기, 그래프에서 가장 많은 노드 갯수, dimension)의 형태로 나온다.

 

 

입력 파라미터로는 input, lengths, value를 받는다.

 

https://github.com/dmlc/dgl/blob/master/python/dgl/backend/backend.py

 

GitHub - dmlc/dgl: Python package built to ease deep learning on graph, on top of existing DL frameworks.

Python package built to ease deep learning on graph, on top of existing DL frameworks. - GitHub - dmlc/dgl: Python package built to ease deep learning on graph, on top of existing DL frameworks.

github.com

def pad_packed_tensor(input, lengths, value, l_min=None):
    r"""Pads a packed batch of variable length tensors with given value.
    Parameters
    ----------
    input : Tensor
        The input tensor with shape :math:`(N, *)`
    lengths : list or tensor
        The array of tensor lengths (of the first dimension) :math:`L`.
        It should satisfy :math:`\sum_{i=1}^{B}L_i = N`,
        where :math:`B` is the length of :math:`L`.
    value : float
        The value to fill in the tensor.
    l_min : int or None, defaults to None.
        The minimum length each tensor need to be padded to, if set to None,
        then there is no minimum length requirement.
    Returns
    -------
    Tensor
        The obtained tensor with shape :math:`(B, \max(\max_i(L_i), l_{min}), *)`
    """
    pass
반응형

'연구' 카테고리의 다른 글

rdkit으로 SMILES를 canonical smiles로 바꾸는 법  (0) 2022.09.14
multiple sequence alignment(MSA)  (0) 2022.09.10
empirical probability란 무엇일까  (0) 2022.09.09
HMMER  (0) 2022.09.06
dgl GraphConv  (0) 2022.08.30