动手学PyG(三):PyG中的mini-batches
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⋯01n−2n−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相关推荐
- 简单介绍三个C语言图形库C语言其实最擅长的是写纯数据处理的程序 . 非得用C语言写个界面程序那将会变得很困难 . 我刚开始学C语言就是从hello world 开始的 , 后来慢慢开始学从三个数中找
C语言其实最擅长的是写纯数据处理的程序 . 非得用C语言写个界面程序那将会变得很困难 . 我刚开始学C语言就是从hello world 开始的 , 后来慢慢开始学从三个数中找出最大值 , 和对数组进行 ...
- 《动手学深度学习》中文第二版预览版发布
点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者丨李沐@知乎 来源丨https://zhuanlan.zhihu ...
- 《动手学深度学习》PyTorch版本
Dive-Into-Deep-Learning-PyTorch-PDF 简介 本项目对中文版<动手学深度学习>中的代码进行整理,并参考一些优秀的GitHub项目给出基于PyTorch的 ...
- 【深度学习】李沐《动手学深度学习》的PyTorch实现已完成
这个项目是中文版<动手学深度学习>中的代码进行整理,用Pytorch实现,是目前全网最全的Pytorch版本. 项目作者:吴振宇博士 简介 Dive-Into-Deep-Learnin ...
- 动手学深度学习(十四)——权重衰退
文章目录 1. 如何缓解过拟合? 2. 如何衡量模型的复杂度? 3. 通过限制参数的选择范围来控制模型容量(复杂度) 4. 正则化如何让权重衰退? 5. 可视化地看看正则化是如何利用权重衰退来达到缓解 ...
- 关于动手学深度学习扩展包d2l的安装
关于动手学深度学习扩展包d2l的安装 方式一 方式二 方式一 下载离线安装包直接放置 d2l_python是动手学深度学习PyTorch中的包,所以他的安装使用离线安装. 链接: [https://g ...
- 资源 | 李沐等人开源中文书《动手学深度学习》预览版上线
来源:机器之心 本文约2000字,建议阅读10分钟. 本文为大家介绍了一本交互式深度学习书籍. 近日,由 Aston Zhang.李沐等人所著图书<动手学深度学习>放出了在线预览版,以供读 ...
- 动手学深度学习(三十九)——门控循环单元GRU
文章目录 门控循环单元(GRU) 一.门控隐藏状态 1.1 重置门和更新门 1.2候选隐藏状态 1.3 隐藏状态 二.从零实现GRU 2.1 初始化模型参数 2.2 定义模型 2.3 训练与预测 2. ...
- 动手学强化学习(三):动态规划算法 (Dynamic Programming)
动手学强化学习(三):动态规划算法 (Dynamic Programming) 1. 简介 2. 悬崖漫步环境 3. 策略迭代算法 3.1 策略评估 3.2 策略提升 3.3 策略迭代算法 4.价值迭 ...
- 【动手学深度学习PyTorch版】19 网络中的网络 NiN
上一篇请移步[动手学深度学习PyTorch版]18 使用块的网络 VGG_水w的博客-CSDN博客 目录 一.网络中的网络 NiN 1.1 NiN ◼ 全连接层的问题 ◼ 大量的参数会带来很多问题 ◼ ...
最新文章
- 五花八门的Shell 的相关概念和配置方法
- linux大文件拷贝,Linux如何提高大文件的拷贝效率
- 成功解决mnist.py:110: dense_to_one_hot (from tensorflow.contrib.learn.python.learn.datasets.mnist) is de
- linux 视频转gif,GitHub - alinuxsa/VideoToGIF: video to gif 视频转gif制作表情包插件(可以添加文字)...
- 【Win32汇编】数组求和函数
- [VS2005]一个简单的CodeSnippet —— 生成类的构造函数。
- su命令\sudo命令\限制root远程登录
- oracle数据库建表、修改字段名称类型、增加字段、ID自动增长写法
- read 文件一个字节实际会发生多大的磁盘IO?
- ExtJS应用架构设计(二)
- python编译 pyd 工具_python如何编译py文件生成pyc、pyo、pyd以及如何和C语言结合使用...
- 【Eclipse使用教程】Java导包快捷键
- 《翻译与本地化CAT软件实用教程》目录
- git 本地拉取远程分支、合并分支某次提交、删除远程分支提交日志
- 人工智能(7)---一文读懂人脸识别技术:商业应用、产品落地、核心技术、市场规模
- c# – 强制硬件加速渲染
- msf生成windows后门程序
- R语言rank函数详细解析
- 学 Rust 要几天?「GitHub 热点速览 v.22.51」
- 使用python识别图像中的文字