PyTorch/PyTorch Geometric 使用 MemoryDataset 加快数据读取速度

PyTorch/PyTorch Geometric 使用 MemoryDataset 加快数据读取速度

PyTorch Geometric Library (简称 PyG) 是一个基于 PyTorch 的图神经网络库,地址是:https://github.com/rusty1s/pytorch_geometric。它包含了很多 GNN 相关论文中的方法实现和常用数据集,并且提供了简单易用的接口来生成图,因此对于复现论文来说也是相当方便。用法大多数和 PyTorch 很相近。

在我之前的一个实验中,我发现 PyTorch Geometric 的运行速度很慢,为了提升速度,尝试了许多常用的数据预加载等方法均无效。后来才发现 PyTorch Geometric 提供了 InMemoryDataset 来提前把所有数据一次性加载到内存中。

阅读更多
Python/too many open files 的正确解决方法

Python/too many open files 的正确解决方法

一般的解决方法

基本思路是,将DataFrame拆成若干组分,最后通过pandas.concat合并起结果

在 Linux 环境下进行文件相关的处理时,可能会出现 OSError: [Errno 24] Too many open files 的错误。

原因是 linux 中每个进程都会限制打开的文件数量。

使用 ulimit -n 可以查看每个进程最大的文件数量,默认是 1024,可以通过修改这个参数来放宽文件数量的限制:ulimit -n 4096,这个方法只对当前的 shell 有用,退出再重新登录就会恢复为默认值。

也可以修改配置文件 /etc/security/limits.conf,在文件最后加入如下两行即可:

1
2
* soft nofile 4096   
* hard nofile 4096

* 表示用户,如果需要指定某个用户,例如 test

1
2
test soft nofile 4096   
test hard nofile 4096

也可以简写为一行:

1
test - nofile 4096

但上面说的方法都是治标不治本,因为根本原因是你的代码打开了太多的文件并且没有及时关闭。

正确的解决方法是

正确的解决方法

可以通过如下命令查看你进程打开的文件名,例如 进程 id 为 24404:

1
lsof -p 24404

查看打开而没有关闭的文件,然后再仔细检查代码里打开文件的代码,并添加关闭文件的代码即可。

通过如下命令可以查看进程打开的文件数量:

1
lsof -p 24404 | wc -l
论文/TPAMI 2021 -基于 event stream 的步态识别

论文/TPAMI 2021 -基于 event stream 的步态识别

这是我们发表在 TPAMI 2021 上的一篇论文,论文题目:Event-Stream Representation for Human Gaits Identification Using Deep Neural Networks。这篇论文主要是基于 event stream 的步态识别。


本文基于 event stream 的两种不同表示形式,即 image-like representation 和 graph representation,提出了一种新的基于 event stream 的步态识别方法,并分别利用基于 image-like representation 的 CNN ,和基于 graph representation 的 GCN 对 event stream 的步态进行识别。这两种方法分别称为 EV-Gait-IMG 和 EV-Gait-3DGraph,分别取得了 87.3% 和 94.9% 的准确率。在两个基于 event stream 的步态数据集上进行了实验:一个来自我们采集的大型步态识别数据集,另一个把 RGB 步态识别数据集 CASIA-B 转换为 event stream 数据集,称为 EV-CASIA-B。

开源地址:https://github.com/zhangxiann/TPAMI_Gait_Identification

阅读更多
数据结构/线段树详解与实现

数据结构/线段树详解与实现

此篇文章用于记录《玩转数据结构》课程的学习笔记

什么是线段树

线段树也被称为区间树,英文名为Segment Tree或者Interval tree,是一种高级的数据结构。这种数据结构更多出现在竞赛中,在常见的本科数据结构教材里没有介绍这种数据结构。但是,在面试中却有可能碰到和线段树相关的问题。那么为什么会产生线段树这种数据结构,线段树到底是为了解决什么样的一种问题呢?

其实这里的线段可以理解为区间,线段树就是为了解决区间问题的。

有一个很经典的线段树问题是:区间染色。

阅读更多
树莓派安装 Python3.7

树莓派安装 Python3.7

树莓派 3B+ 只有 Python 2.7 和 Python 3.5。

我需要在树莓派上使用图神经网络的库 torch-geometric,这个库需要 Python 3.6 以上的版本。

下面说说如何在树莓派 3B+ 上安装 Python3.7。

阅读更多
Spring 面试题

Spring 面试题

Spring 家族

  • Spring Core:
    • Spring MVC:工厂模式和代理模式,用于解耦应用组件
    • Spring Boot:模板代码
    • Spring Clound:微服务
阅读更多
redis/redis 面试题

redis/redis 面试题

redis 主要用来实现缓存功能。

缓存的主流应用架构如下:


1. 客户端请求数据,如果数据在缓存层里面,那么直接返回。 2. 如果数据不在缓存层里面,那么就到数据库里查询,这个过程叫做穿透查询。并把数据回种到缓存层。 3. 此外,这种架构还能实现熔断机制:如果我们发现数据库挂了,那么就可以将请求拦在缓存层,无论数据是否在缓存层中,都直接返回。

阅读更多
Python/Python 文本处理的编码

Python/Python 文本处理的编码

在 Python 3 中读写文件时,我们需要注意读取文件和写入文件时的数据格式,是 str 类型,还是 byte 类型。

在我看来,str 类型相当于 Java 中的字符流,是有一个编码的;而 byte 相当于 Java 中的字节流,是没有编码的。

先搞清楚几个概念:

阅读更多
NLP/图解 GPT2

NLP/图解 GPT2

这篇文章翻译自 https://jalammar.github.io/illustrated-gpt2/。多图详细解释当今最为强大的人工智能 GPT-2(截至 2019 年 8 月 12 日)。

今年,我们看到了机器学习在许多场景的广泛应用。OpenAI GPT-2 表现出了令人印象深刻的能力,它能够写出连贯而充满激情的文章,这超出了我们当前对语言模型的预期效果。GPT-2 不是一个特别新颖的架构,而是一种与 Transformer 解码器非常类似的架构。不过 GPT-2 是一个巨大的、基于 Transformer 的语言模型,它是在一个巨大的数据集上训练的。在这篇文章,我们会分析它的结构,以及这种结构产生的作用。我们会深入了解 Self Attention 层的细节。然后我们会再了解一下这种只有 Decoder 的 Transformer 在语言建模之外的应用。

阅读更多
批量下载 coursera 视频

批量下载 coursera 视频

coursera 是一个著名的在线学习平台。

我在这个平台上学习了很多课程,包括 Andrew 的 DeepLearning 系列、TensorFlow 系列,和其他的一些 深度学习课程。

然而这个网站需要翻墙才能够访问。因此我希望把视频都下载到本地。

虽然 coursera 本身提供了视频下载选项,但是只能一个一个视频手动下载,不方便管理。

这篇文章介绍一个能够批量下载 coursera 视频的工具:coursera-dl,地址是:https://github.com/coursera-dl/coursera-dl

阅读更多