pytorch) Create Your Own GNN DataSets

2021. 4. 13. 23:54관심있는 주제/GNN

728x90

기존 데이터를 활용하여, gnn 데이터로 바꾸는 것 해보기

간단하게 만드는 것을 확인해봄. 아직 완전히 각각의 구성요소에 대한 설명은 확인해봐야 함.

import torch
from torch_geometric.data import InMemoryDataset, download_url
from torch_geometric.data import Data
class TestDataset(InMemoryDataset):
    def __init__(self, data_list):
        super(TestDataset, self).__init__('/tmp/TestDataset')
        self.data, self.slices = self.collate(data_list)


x = torch.Tensor([[1], [1], [1]])
edge_index = torch.tensor([[0, 1, 1, 2], [1, 0, 2, 1]])
face = torch.tensor([[0], [1], [2]])
i = 1
s = '1'

data1 = Data(x=x, edge_index=edge_index, face=face, test_int=i, test_str=s)
data1.num_nodes = 10

data2 = Data(x=x, edge_index=edge_index, face=face, test_int=i, test_str=s)
data2.num_nodes = 5

dataset = TestDataset([data1, data2]*120)

from torch_geometric.data import Data, DataLoader

loader = DataLoader(dataset, batch_size=4)

sample = next(iter(loader))

sample.x.shape

# torch.Size([12, 1])

 

파이 토치 이 패키지에서 많은 것을 제공해주고 있지만, 자기가 원하는 데이터 셋을 만들기 위해서는 구현된 다양한 데이터의 소스 코드를 봐야 할 거고, 해당 문서에서는 스스로 데이터를 구성하는 것에 대해 간단히 소개한다고 한다.

 

데이터셋을 위해서 2가지의 추상화된 클래스를 제공한다. 

 torch_geometric.data.Dataset and torch_geometric.data.InMemoryDataset.
torch_geometric.data.InMemoryDataset torch_geometric.data.Dataset 로부터 상속되며, 전체 데이터 세트가 cpu 메모리에 맞는 경우 사용해야 한다. (확인 사항 : cpu 메모리에 맞는 경우는 어떤 경우인지??)

 

torchvision 규칙에 따라 각 데이터 세트는 데이터 세트가 저장되어야 하는 위치를 나타내는 루트 폴더를 전달받는다.
루트 폴더를 두 개의 폴더로 분할했다고 한다.
데이터 세트가 다운로드되는 raw_dir과 처리 된 데이터 세트가 저장되는 processing_dir입니다.

 

추가로 각각의 데이터셋은 transform 과 pre_transform 그리고 pre_filter(기본적으로는 None)를 전달할 수 있다.

transform

  • 엑세스하기 전에 데이터 객체를 동적으로 변환(transform)하므로 데이터 확장에 가장 적합하다고 한다

pre_transform

  • 데이터 객체를 디스크에 저장하기 전에 변환(transform)을 적용한다. 
  • 따라서 한 번만 수행해야 하는 과도한 사전 계산에 가장 적합하다고 함.

pre_filter

  • 저장하기전에 데이터 객체를 수동적으로 필터링할 수 있다. 
  • 사용 사례에는 특정 클래스의 데이터 객체의 제한이 포함될 수 있다고 한다.

Creating “In Memory Datasets”

torch_geometric.data.InMemoryDataset을 생성하기 위해서는 기본적인 4가지 방법을 시행해야 한다.

 

 

 

 

 

 

 


Reference

www.080910t.com/wp-content/uploads/2019/06/Hands-on-Graph-Neural-Networks-with-PyTorch-PyTorch-Geometric1.pdf

 

pytorch-geometric.readthedocs.io/en/latest/notes/create_dataset.html

 

Creating Your Own Datasets — pytorch_geometric 1.7.0 documentation

No! Just as in regular PyTorch, you do not have to use datasets, e.g., when you want to create synthetic data on the fly without saving them explicitly to disk. In this case, simply pass a regular python list holding torch_geometric.data.Data objects and p

pytorch-geometric.readthedocs.io

www.programcreek.com/python/example/126448/torch_geometric.data.InMemoryDataset

 

Python Examples of torch_geometric.data.InMemoryDataset

The following are 7 code examples for showing how to use torch_geometric.data.InMemoryDataset(). These examples are extracted from open source projects. You can vote up the ones you like or vote down the ones you don't like, and go to the original project

www.programcreek.com

 

728x90