1. 程式人生 > 其它 >dgl資料集的儲存和載入使用

dgl資料集的儲存和載入使用

技術標籤:dgl

DGL建議使用者實現儲存和載入資料的函式,將處理後的資料快取在本地磁碟中。 這樣在多數情況下可以幫使用者節省大量的資料處理時間。DGL提供了4個函式讓任務變得簡單。

下面的示例顯示瞭如何儲存和讀取圖和資料集資訊的列表。

import os
from dgl import save_graphs, load_graphs
from dgl.data.utils import makedirs, save_info, load_info

def save(self):
    # 儲存圖和標籤
    graph_path = os.path.join(self.save_path, self.mode + '_dgl_graph.bin')
    save_graphs(graph_path, self.graphs, {'labels': self.labels})
    # 在Python字典裡儲存其他資訊
    info_path = os.path.join(self.save_path, self.mode + '_info.pkl')
    save_info(info_path, {'num_classes': self.num_classes})

def load(self):
    # 從目錄 `self.save_path` 裡讀取處理過的資料
    graph_path = os.path.join(self.save_path, self.mode + '_dgl_graph.bin')
    self.graphs, label_dict = load_graphs(graph_path)
    self.labels = label_dict['labels']
    info_path = os.path.join(self.save_path, self.mode + '_info.pkl')
    self.num_classes = load_info(info_path)['num_classes']

def has_cache(self):
    # 檢查在 `self.save_path` 裡是否有處理過的資料檔案
    graph_path = os.path.join(self.save_path, self.mode + '_dgl_graph.bin')
    info_path = os.path.join(self.save_path, self.mode + '_info.pkl')
    return os.path.exists(graph_path) and os.path.exists(info_path)

請注意:有些情況下不適合儲存處理過的資料。例如,在內建資料集GDELTDataset中, 處理過的資料比較大。所以這個時候,在__getitem__(idx)中處理每個資料例項是更高效的方法。

參考

https://docs.dgl.ai/guide_cn/data-savenload.html#guide-cn-data-pipeline-savenload