如果想构建自己的数据集,应该继承dgl.data.DGLDataset类,并且实现下面的方法:

  • __getitem__(self,i):得到数据集的第i个数据,
  • __len__(self):数据集的大小
  • process(self):从硬盘加载和处理原始数据

这里使用一个小数据集Zachary’s Karate Club network,包含:

  • menbers.csv文件包含每个成员的属性
  • interactions.csv文件包含两个成员的关系
import urllib.request
import pandas as pd
urllib.request.urlretrieve('https://data.dgl.ai/tutorial/dataset/members.csv', './members.csv')
urllib.request.urlretrieve('https://data.dgl.ai/tutorial/dataset/interactions.csv', './interactions.csv')members = pd.read_csv('./members.csv')
members.head()interactions = pd.read_csv('./interactions.csv')
interactions.head()

我们将成员视作节点,关系视作边,年龄视作节点的属性,加入的club作为节点的标签,边的权重作为变的属性:

import pandas as pd
import dgl
from dgl.data import DGLDataset
import torch
import osclass KarateClubDataset(DGLDataset):def __init__(self):super().__init__(name='karate_club')def process(self):nodes_data = pd.read_csv('./karate/members.csv')edges_data = pd.read_csv('./karate/interactions.csv')node_features = torch.from_numpy(nodes_data['Age'].to_numpy())node_labels = torch.from_numpy(nodes_data['Club'].astype('category').cat.codes.to_numpy())  # 将Club属性变为category类型,往往作为label 并且转为0,1edge_features = torch.from_numpy(edges_data['Weight'].to_numpy())edges_src = torch.from_numpy(edges_data['Src'].to_numpy())edges_dst = torch.from_numpy(edges_data['Dst'].to_numpy())self.graph = dgl.graph((edges_src, edges_dst), num_nodes=nodes_data.shape[0])self.graph.ndata['feat'] = node_featuresself.graph.ndata['label'] = node_labelsself.graph.edata['weight'] = edge_features# If your dataset is a node classification dataset, you will need to assign# masks indicating whether a node belongs to training, validation, and test set.n_nodes = nodes_data.shape[0]n_train = int(n_nodes * 0.6)n_val = int(n_nodes * 0.2)train_mask = torch.zeros(n_nodes, dtype=torch.bool)val_mask = torch.zeros(n_nodes, dtype=torch.bool)test_mask = torch.zeros(n_nodes, dtype=torch.bool)train_mask[:n_train] = Trueval_mask[n_train:n_train + n_val] = Truetest_mask[n_train + n_val:] = Trueself.graph.ndata['train_mask'] = train_maskself.graph.ndata['val_mask'] = val_maskself.graph.ndata['test_mask'] = test_maskdef __getitem__(self, i):return self.graphdef __len__(self):return 1dataset = KarateClubDataset()
graph = dataset[0]print(graph)

DGL教程【五】使用自己的数据集相关推荐

  1. Keras TensorFlow教程:使用自己的数据集进行训练

    大多数Keras教程都尝试使用图像分类数据集(如MNIST(手写识别)或基本对象CIFAR-10(基本对象识别))来开启Keras库的基础知识学习. 这篇文章将对Keras入门教程进行不同的尝试.使用 ...

  2. Swift中文教程(五)--对象和类

    原文:Swift中文教程(五)--对象和类 Class 类 在Swift中可以用class关键字后跟类名创建一个类.在类里,一个属性的声明写法同一个常量或变量的声明写法一样,除非这个属性是在类的上下文 ...

  3. TF之TFSlim:利用经典VGG16模型(InceptionV3)在ImageNet数据集基础上训练自己的五个图像类别数据集的训练过程记录

    TF之TFSlim:利用经典VGG16模型(InceptionV3)在ImageNet数据集基础上训练自己的五个图像类别数据集的训练过程记录 目录 训练控制台显示 输出结果文件 训练控制台显示 输出结 ...

  4. C#微信公众号开发系列教程五(接收事件推送与消息排重)

    C#微信公众号开发系列教程五(接收事件推送与消息排重) 原文:C#微信公众号开发系列教程五(接收事件推送与消息排重) 微信公众号开发系列教程一(调试环境部署) 微信公众号开发系列教程一(调试环境部署续 ...

  5. 公众号第三方平台开发 - 教程五 代公众号发起网页授权源码

    教程导航: 微信开放平台 公众号第三方平台开发 教程一 平台介绍 微信开放平台 公众号第三方平台开发 教程二 创建公众号第三方平台 微信开放平台 公众号第三方平台开发 教程三 一键登录授权给第三方平台 ...

  6. MongoDB 教程五: MongoDB固定集合和性能优化 (索引Indexes, 优化器, 慢查询profile)

    mongodb索引详解(Indexes) 索引介绍 索引在mongodb中被支持,如果没有索引,mongodb必须扫描每一个文档集合选择匹配的查询记录.这样扫描集合效率并不高,因为它需要mongod进 ...

  7. MongoDB 教程五: MongoDB固定集合和性能优化

    MongoDB 固定集合(Capped Collections) MongoDB 固定集合(Capped Collections)是性能出色且有着固定大小的集合,对于大小固定,我们可以想象其就像一个环 ...

  8. 区块链教程(五):合约编写实战实例

    注:本教程为技术教程,不谈论且不涉及炒作任何数字货币 区块连教程(一):前置知识-linux补充 区块链教程(二):基础概念介绍 区块链教程(三):Solidity编程基础 区块链教程(四):搭建私链 ...

  9. Linux求平方脚本,Linux Shell脚本系列教程(五):数学运算

    这篇文章主要介绍了Linux Shell脚本系列教程(五):数学运算,本文讲解了使用let.(())和[]进行算术运算.使用expr进行算术运算.使用bc进行算术运算三种方法,需要的朋友可以参考下 在 ...

  10. 〔王鹰教程五〕和弦的分类记忆法

    [王鹰教程五]和弦的分类记忆法 http://www.wyguitar.com/html/tomqq_class/169.htm [2007-8-11 9:17:02] 吉他上的和弦有几千,我们怎么记 ...

最新文章

  1. PingingLab传世经典系列《CCNA完全配置宝典》-3.4 Trunk进阶配置
  2. 函数调用你知道几种方法
  3. Nginx重写规则指南
  4. Android内存优化之——static使用篇
  5. rgb sw 线主板接口在哪_旋转RGB制作指导
  6. 影响力(罗伯特·西奥迪尼)读书笔记思维导图
  7. Autovue 集成
  8. 九龙证券|主力出逃大热门互联网股近13亿元!尾盘两股获加仓超亿元
  9. 锂电池的充电电压和电流应该是多少
  10. 基金套利是怎么玩的?
  11. Linux 用户无法使用 crontab 命令
  12. Python数学问题5:输入三个整数并由小到大进行输出
  13. [SSL: CERTIFICATE_VERIFY_FAILED]
  14. 搜索引擎技术 ——链接分析
  15. 分享一款电机控制国产32位单片机MM32SPIN360C
  16. 使用PM进行硬盘分区
  17. 操作系统|时间片轮转调度算法(RR)
  18. JavaScript 实例:当当网 首页选项卡切换效果
  19. office2021与365你还在纠结吗?快来看看
  20. 图像分类androidAPP

热门文章

  1. 关闭 Visual Studio 2013 的 Browser Link 功能
  2. sql2008“备份集中的数据库备份与现有的xx数据库不同”解决方法
  3. 二十个你必须知道的SEO概念
  4. SpringBoot基础重难点
  5. 解决查询时报的cannot be cast to com.credithc.enjoy.manager.OrderResp错误
  6. 一个野路子java程序员的自述
  7. 反思对新项目如何快速上手
  8. 反思项目调试整体过程
  9. Bug思路不清晰严谨
  10. python3迭代器和可迭代对象_一文读懂 Python3 可迭代对象、迭代器、生成器区别...