2021. 4. 13. 23:54ㆍ관심있는 주제/GNN
기존 데이터를 활용하여, 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가지 방법을 시행해야 한다.
- torch_geometric.data.InMemoryDataset.raw_file_names():
- 다운로드를 건너뛰기 위해 찾아야 하는 raw_dir의 파일 목록
- torch_geometric.data.InMemoryDataset.processed_file_names():
- 처리 과정을 건너 뛰기 위해 찾아야 하는 process_dir의 파일 목록
- torch_geometric.data.InMemoryDataset.download():
- raw_dir에 원시데이터를 다운로드하는 것
- torch_geometric.data.InMemoryDataset.process():
- 원시데이터를 가공하고 전처리 폴더에 저장하는 것
Reference
pytorch-geometric.readthedocs.io/en/latest/notes/create_dataset.html
www.programcreek.com/python/example/126448/torch_geometric.data.InMemoryDataset
'관심있는 주제 > GNN' 카테고리의 다른 글
GNN-자료 정리 (2) | 2021.07.03 |
---|---|
Paper) Learning to Simulate Complex Physics with Graph Networks (ICML 2020) (2) | 2021.06.22 |
installation) torch_geometric (0) | 2021.04.13 |
GNN - Application 및 샘플 코드 (0) | 2021.04.13 |
GNN - survey paper (trend, application) (1) | 2021.04.05 |