PyG中的mini-batches

本文主要参考了 PyG英文文档

神经网络通常会采用分批的形式来训练。PyG通过创建稀疏块对角矩阵(由edge_index来定义)的形式来实现小批量图的并行化。而节点属性与训练目标则会在节点维度进行拼接。这种设计使得我们可以将不同规模的图放在同一个batch中。
A = [ A 1 ⋱ A n ] , X = [ X 1 ⋮ X n ] Y = [ Y 1 ⋮ Y n ] A=\begin{bmatrix} A_1 & & \\ & \ddots & \\ & & A_n \end{bmatrix},\quad X=\begin{bmatrix} X_1\\ \vdots \\ X_n\end{bmatrix} Y=\begin{bmatrix} Y_1\\ \vdots \\ Y_n\end{bmatrix} A=⎣⎡​A1​​⋱​An​​⎦⎤​,X=⎣⎢⎡​X1​⋮Xn​​⎦⎥⎤​Y=⎣⎢⎡​Y1​⋮Yn​​⎦⎥⎤​

PyG有其自己的torch_geometric.loader.DataLoader,这让我们可以很好的完成上述分批操作:

from torch_geometric.datasets import TUDataset
from torch_geometric.loader import DataLoaderdataset = TUDataset(root='/tmp/ENZYMES', name='ENZYMES', use_node_attr=True)
loader = DataLoader(dataset, batch_size=32, shuffle=True)for batch in loader:batch>>> DataBatch(batch=[1082], edge_index=[2, 4066], x=[1082, 21], y=[32])batch.num_graphs>>> 32

torch_geometric.data.Batch类继承自torch_geometric.data.Data,多出了一个batch属性。
batch属性为一个用于标记每一个来自于哪张图的列向量。
b a t c h = [ 0 ⋯ 0 1 n − 2 n − 1 ⋯ n − 1 ] {\rm batch}=\begin{bmatrix}0&\cdots&0&1&n-2&n-1&\cdots&n-1\end{bmatrix} batch=[0​⋯​0​1​n−2​n−1​⋯​n−1​]

我们可以利用batch属性来对每张图独立的实现一些操作。

from torch_scatter import scatter_mean
from torch_geometric.datasets import TUDataset
from torch_geometric.loader import DataLoaderdataset = TUDataset(root='/tmp/ENZYMES', name='ENZZYMES', use_node_attr=True)
loader = DataLoader(dataset batch_size=32, shuffle=True)for data in loader:data>>> DataBatch(batch=[1082], edge_index=[2, 4066], x=[1082, 21], y=[32]data.num_graphs>>> 32x = scatter_mean(data.x, data.batch, dim=0)x.size()>>> torch.Size([32,21])

值得注意的是,在官方文档中并没有提及如何将自己的Data实例转换成DataLoader,经搜索后发现了下面的方法

from torch_geometric.data.Data
from torch_geometric.dataloader.DataLoader# data_list = [data1, data2, data3, ...]
loader = DataLoader(data_list, batch_size=32, shuffle=True)

直接把存有data的列表传进DataLoader就可以了,不需要自己创建dataset。

更多关于PyG中的batch操作参考这里。torch-scatter的参考文档在这里。

动手学PyG(三):PyG中的mini-batches相关推荐

  1. 简单介绍三个C语言图形库C语言其实最擅长的是写纯数据处理的程序 . 非得用C语言写个界面程序那将会变得很困难 . 我刚开始学C语言就是从hello world 开始的 , 后来慢慢开始学从三个数中找

    C语言其实最擅长的是写纯数据处理的程序 . 非得用C语言写个界面程序那将会变得很困难 . 我刚开始学C语言就是从hello world 开始的 , 后来慢慢开始学从三个数中找出最大值 , 和对数组进行 ...

  2. 《动手学深度学习》中文第二版预览版发布

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者丨李沐@知乎 来源丨https://zhuanlan.zhihu ...

  3. 《动手学深度学习》PyTorch版本

    Dive-Into-Deep-Learning-PyTorch-PDF 简介   本项目对中文版<动手学深度学习>中的代码进行整理,并参考一些优秀的GitHub项目给出基于PyTorch的 ...

  4. 【深度学习】李沐《动手学深度学习》的PyTorch实现已完成

    这个项目是中文版<动手学深度学习>中的代码进行整理,用Pytorch实现,是目前全网最全的Pytorch版本. 项目作者:吴振宇博士 简介   Dive-Into-Deep-Learnin ...

  5. 动手学深度学习(十四)——权重衰退

    文章目录 1. 如何缓解过拟合? 2. 如何衡量模型的复杂度? 3. 通过限制参数的选择范围来控制模型容量(复杂度) 4. 正则化如何让权重衰退? 5. 可视化地看看正则化是如何利用权重衰退来达到缓解 ...

  6. 关于动手学深度学习扩展包d2l的安装

    关于动手学深度学习扩展包d2l的安装 方式一 方式二 方式一 下载离线安装包直接放置 d2l_python是动手学深度学习PyTorch中的包,所以他的安装使用离线安装. 链接: [https://g ...

  7. 资源 | 李沐等人开源中文书《动手学深度学习》预览版上线

    来源:机器之心 本文约2000字,建议阅读10分钟. 本文为大家介绍了一本交互式深度学习书籍. 近日,由 Aston Zhang.李沐等人所著图书<动手学深度学习>放出了在线预览版,以供读 ...

  8. 动手学深度学习(三十九)——门控循环单元GRU

    文章目录 门控循环单元(GRU) 一.门控隐藏状态 1.1 重置门和更新门 1.2候选隐藏状态 1.3 隐藏状态 二.从零实现GRU 2.1 初始化模型参数 2.2 定义模型 2.3 训练与预测 2. ...

  9. 动手学强化学习(三):动态规划算法 (Dynamic Programming)

    动手学强化学习(三):动态规划算法 (Dynamic Programming) 1. 简介 2. 悬崖漫步环境 3. 策略迭代算法 3.1 策略评估 3.2 策略提升 3.3 策略迭代算法 4.价值迭 ...

  10. 【动手学深度学习PyTorch版】19 网络中的网络 NiN

    上一篇请移步[动手学深度学习PyTorch版]18 使用块的网络 VGG_水w的博客-CSDN博客 目录 一.网络中的网络 NiN 1.1 NiN ◼ 全连接层的问题 ◼ 大量的参数会带来很多问题 ◼ ...

最新文章

  1. 五花八门的Shell 的相关概念和配置方法
  2. linux大文件拷贝,Linux如何提高大文件的拷贝效率
  3. 成功解决mnist.py:110: dense_to_one_hot (from tensorflow.contrib.learn.python.learn.datasets.mnist) is de
  4. linux 视频转gif,GitHub - alinuxsa/VideoToGIF: video to gif 视频转gif制作表情包插件(可以添加文字)...
  5. 【Win32汇编】数组求和函数
  6. [VS2005]一个简单的CodeSnippet —— 生成类的构造函数。
  7. su命令\sudo命令\限制root远程登录
  8. oracle数据库建表、修改字段名称类型、增加字段、ID自动增长写法
  9. read 文件一个字节实际会发生多大的磁盘IO?
  10. ExtJS应用架构设计(二)
  11. python编译 pyd 工具_python如何编译py文件生成pyc、pyo、pyd以及如何和C语言结合使用...
  12. 【Eclipse使用教程】Java导包快捷键
  13. 《翻译与本地化CAT软件实用教程》目录
  14. git 本地拉取远程分支、合并分支某次提交、删除远程分支提交日志
  15. 人工智能(7)---一文读懂人脸识别技术:商业应用、产品落地、核心技术、市场规模
  16. c# – 强制硬件加速渲染
  17. msf生成windows后门程序
  18. R语言rank函数详细解析
  19. 学 Rust 要几天?「GitHub 热点速览 v.22.51」
  20. 使用python识别图像中的文字

热门文章

  1. onSubmit与onClick的区别
  2. Java线程状态及其转换
  3. GBase 8s 数据库空间(dbspace)
  4. NetFlow学习总结
  5. 《算法竞赛入门经典(第2版)》——学习记录
  6. 单片机——点阵2(Proteus和KeilC51)
  7. LSSVM分类和回归
  8. Shiro登录的使用以及原理(一)
  9. anchor机制讲解
  10. BAT不懂工业互联网,树根互联如是说