- 博客(57)
- 资源 (3)
- 收藏
- 关注
原创 Custom C++ and CUDA Extensions - PyTorch
经历了一波 pybind11 和 CUDA 编程 的学习, 接下来看一看 PyTorch 官方给的 C++/CUDA 扩展的教程. 发现极其简单, 就是直接用 setuptools 导出 PyTorch C++ 版代码的 Python 接口就可以了. 所以, 本博客包含以下内容: LibTorch 初步; C++ Extension 例子;
2024-10-02 22:00:12
1199
4
原创 CUDA 编程
前几天浅尝了使用 pybind11 将 C++ 代码打包成 Python 包, 假装我已经能通过 C++ 代码加速程序了. 现在, 搞一搞 CUDA 编程, 进而结合 pybind11 把 CUDA 代码打包成 Python 包. 主要目的是了解一下整体流程与框架.
2024-09-25 15:09:25
4358
原创 Mitsuba 渲染基础
最近看到一些点云相关的工作, 他们在文章中展示的点云结果很好看, 但自己用 matplotlib 画的结果却很丑, 发邮件问作者才知道他用了一个渲染工具 Mitsuba2PointCloudRenderer. 它用到了渲染软件 Mitsuba2.
2024-09-23 15:16:16
1310
原创 pybind11 学习笔记
如何在使用 pybind11 导出 C 程序的 Python 接口的情况下, 构建 Python 包. 有多种方式, 包括 Modules with CMake, Modules with meson-python, Modules with setuptools, Building with cppimport, Building with CMake, …) 创建静态库时,生成的库文件(如 libadd.a)包含了所有必要的符号。
2024-09-18 09:55:21
846
原创 BatchNorm &LayerNorm
很早以前就遇到了 BatchNorm 和 LayerNorm, 当时只是粗略地知道它们是对数据进行了标准化: x = (x−μ)/σ. 这当然很简单, 但实际的数据是比较复杂的. 对于 CV 任务的数据 image 而言, 一个 batch 的数据通常是这样的: [B, C, H, W]; 对于 NLP 任务的数据 sentence 而言, 一个 batch 的数据通常是这样的: [B, T, D]. 那 XXNorm 是怎么算的? 肯定不是一下算整个 batch 的所有数的.
2024-07-10 22:32:07
684
原创 fairseq (Facebook AI Research) 包
最近在看一个用 RNNs 网络做Translation 任务的程序, 关于数据处理部分, 主要用到工具包和fairseq, 前者主要是对文本进行分词处理, 后者则是对已分词的文本进行二进制化和快速加载. 包越方便使用, 就说明包装得越狠, 也就越令人一头雾水, 本文简要记录学习过程.
2024-06-24 16:09:06
998
原创 深入学习 torch.distributions
前几天分几篇博文精细地讲述了《von Mises-Fisher 分布》, 以及相应的 PyTorch 实现《von Mises-Fisher Distribution (代码解析)》, 其中以 Uniform 分布为例简要介绍了 torch.distributions 包的用法. 本以为已经可以了, 但这两天看到论文 The Power Spherical distribution 的代码, 又被其实现分布的方式所吸引.
2024-05-25 10:10:46
1324
翻译 Box–Muller Transform
这几天看了那么多采样, 回过头来, 仍然不知道最基本的 Normal Distribution 怎么采样. 于是查看, 有很多种采样方法, 不过多数还是要, 或者使用 rejection method, 似乎只有Box–Mullermethod 是精确的解析式方法.但 Wikipedia 对其的介绍很简洁, 看不出个所以然来. 即使是, 也讲的一头雾水. 最终看到 B 站视频, 才豁然开朗, 这里记录其推导过程.
2024-05-24 22:30:25
218
原创 PyTorch 中 Distribution 采样对参数的梯度
torch.distribution 模块实现了大多数常见的分布. 对于复杂的分布, 你可以继承基类 Distribution 自己实现. 如果参数设置为 requires_grad=True; 不必纠结梯度是怎样的, 它的计算要根据简单分布的 Sampling 和 Transform 参数两部分得到.
2024-05-21 07:42:55
1035
原创 von Mises-Fisher Distribution (Appendix 2)
von Mises Fisher Distribution 公式推导
2024-04-19 22:35:25
856
原创 von Mises-Fisher Distribution (Appendix 1)
von Mises Fisher Distribution 公式推导
2024-04-10 09:24:10
619
原创 von Mises-Fisher Distribution
von Mises-Fisher 分布的均值、熵、KL 散度以及采样等的 PyTorch 实现.
2024-03-21 16:48:25
2260
2
原创 Modified Bessel Function of the First Kind
最近接触到 von Mises–Fisher distribution, 其概率密度函数归一化常数中含有第一类修正贝塞尔函数. 查阅 Wikipedia, 其公式有定义式和积分式. 其计算比较麻烦, 更不用说求导了, 好在有递推式, 本文对其递推式进行推导。
2024-03-07 20:30:18
1492
原创 PyTorch 中的 apply [autograd.Function]
源码: 是 PyTorch 中用于存储子模块的容器,而 方法可以应用一个函数到 ModuleList 中的每个子模块。具体来说, 方法会递归地将指定的函数应用到 ModuleList 中的每个子模块以及每个子模块的子模块上。这个方法的语法如下:其中 是要应用的函数,它接受一个 参数并且没有返回值。在 apply() 方法被调用后,会遍历 ModuleList 中的每个子模块,并把这个函数应用到每个子模块上。例如,假设有一个 ModuleList 包含了若干线性层(Linear),我们想要初始化所有
2024-03-03 09:27:59
2285
原创 torch.utils.data
问题,就不追究了,反正尽量用 numpy 或 pytorch tensor 吧。的其他参数,就会懵逼。那就看一看官方文档,了解一下。然而,背后到底干了什么,我们不清楚,甚至遇到。访问数据时,由于 Python 对象的。有一个需要注意的地方是内存增长问题,当。上图是数据加载的整体框架图,官网说。访问,后者的数据只能通过迭代器。的数据集的访问顺序由迭代器决定。提供一批下标,取得一批数据后由。并行地加载数据,并通过。
2024-02-17 20:34:50
1209
原创 argparse
在命令窗口运行 Python 程序时,有时需要传入一些参数,就用到了argparse模块,它有非常强的解析命令行参数的能力。原始的命令行参数获取方式sys.argv;argparse的基本用法;背后的运作机制;shell编程;更好的方式;
2024-01-10 17:19:22
919
原创 PIL/Pillow
PIL(Python Imaging Library)是一个用于图像处理的 Python 库。它提供了广泛的功能,包括图像加载、保存、调整大小、裁剪、旋转、滤镜应用等。由于 PIL 的开发停止在 2009 年,因此推荐使用其后续的维护版本 Pillow。Pillow 是一个兼容 PIL 接口的现代图像处理库,提供更多功能和更好的性能。
2023-12-20 11:14:25
1523
原创 torch.gather(...)
有点绕,很多博客画各种图讲各种故事来解释如何从 input 张量中 gather 位置 index 处的值,乱七八糟,我是都没看明白。所以去官网看了文档。
2023-12-18 21:08:29
1212
原创 pytorch 数据预加载
本文介绍一个工具,它包装,接收该类的一个实例loader,启动一个线程t,创建一个队列qt将loader中的数据预加载到队列q中, 以在模型计算时也能启动启动数据加载程序, 节省数据加载时间。"""** 包装 torch.utils.data.DataLoader, 接收该类的一个实例 loader, 启动一个线程 t, 创建一个队列 qt 将 loader 中的数据预加载到队列 q 中, 以在模型计算时也能启动启动数据加载程序, 节省数据加载时间。
2023-12-04 23:37:58
2271
1
原创 Python 上下文管理器
环境时,文件会自动关闭。这东西叫上下文管理器,现在让让我们学习一下这个神奇的家伙。,讲的比较简单易懂,我就是看这篇博文学习上下文管理器的。在 Python 中读写文件,我们都用。,这样不用担心忘记关闭文件流,因为离开。那应该能返回其他东西吧?
2023-11-23 22:50:50
119
原创 Python 包 __init__.py
文件,Python 也会把该目录当作普通包处理,这被称为 “namespace package”,其主要目标是支持更为复杂的包结构。是 Python 中的一个特殊文件,它存在于每个 Python 包中。这个文件在 Python 中是非常重要的,它告诉 Python,该目录应被视为一个 Python 包。是一个特殊的文件,用于标识该目录是一个 Python 包。文件的目录,并将其视为一个有效的包。然而,在旧版本的 Python(3.2及之前)中,请注意,随着 Python 3.3 版本的引入,
2023-11-22 11:04:21
216
原创 python 中的 logging 详解
什么是 logging.StreamHandler()?它为什么将信息输出到控制台?logging.getLogger().addHandler(console) 到底做了什么?想解答这些问题,探索 logging 更丰富的用法,于是我去查看了官方文档教程,在这里对这次学习进行记录整理。本文不追究文档的细节,对基础的知识也默认已知,主要目的是建立对 logging 整体架构和工作方式的认识。
2023-11-16 12:57:44
4383
3
原创 Radon 变换与边缘概率分布
在学习最优传输(Optimal Transport)时,接触到了 Sliced-Wasserstein Distance (SWD),顿时懵逼了,它是啥?在 1-D 情况下,Wasserstein Distance 计算非常简单,不必进行复杂的求解,直接就有闭式解。SWD 满足所有度量公理,三角不等式继承自 WD,正定性和对称性也是产自 WD,这些都比较直观,不多说了。假设上图中的点的密度代表概率密度,红线是投影方向,虚线对应不同的。,即一个个要积分的线,此时线积分结果就是虚线所穿过的点数,即。
2023-10-23 23:26:14
208
原创 One-dimensional Wasserstein Distance
其实不必担心从右边一点点处挖的时候不够挖,你可以假设后面的即使不够,它也从右边的右边挖过了,再不然假设从右端向左扫描,向左推挖,总能符合实际意义】它们的直观解释差别还挺大的,前者是时刻保持两者扫描过的。,若想运输 mass 以使扫描过的测度相同,则需要的 mass 量为。(还可以从右侧想,右侧的测度分文没动,左边又一样,这个差可不就是。依然从其右侧一点点挖,以使扫描过的部分测度一样,挖的量为。先看第一个式子,它是扫描 q 进行积分的,进行积分的,如下图,扫描至。,对应着已扫描过的空间的测度。
2023-10-22 21:37:42
132
原创 对偶线性规划
下表提供了对偶问题的具体构建方法,这应该是一个结论,但我们不知所以然。当然,照着做确实能把一个线性规划问题转换为其对偶问题,但 why?这只是对标准形式的推导,稍微变化就可以对照上表中的各种情况。这可能经过练习熟练后,才适合这么做,否则一头雾水,也容易出错。单凭这么一段文字,很难想象到底发生了什么,只知道。将原线性规划问题变为了另一个线性规划问题。,那么按照构建表,对偶问题应该是。,就得到了表右边对偶问题。(2) 对于不等式条件。【本质上是拉格朗日对偶】(1) 对于等式条件。
2023-09-20 09:15:00
550
原创 积分变换(Integral Transform)
积分变换:通过积分将一个函数从它的原始函数空间映射到另一个函数空间,在新的函数空间中,原始函数的一些性质可能比在原始函数空间中更容易表征和操作。
2023-09-09 23:37:54
3114
原创 OT2: Wasserstein Generative Adversarial Networks
为学习最优传输问题(Optimal Transport),拜读了博客《最优运输(Optimal Transfort):从理论到填补的应用》,博文里简要介绍了三篇经典论文,本系列博文打算精读之,下面是第三篇。认知有限,有不理解之处,也可能有理解不当或错误之处,请读者多多指教。
2023-08-26 15:36:14
225
原创 OT3: Missing Data Imputation using Optimal Transport
为学习最优传输问题(Optimal Transport),拜读了博客《最优运输(Optimal Transfort):从理论到填补的应用》,博文里简要介绍了三篇经典论文,本系列博文打算精读之,下面是第三篇。认知有限,有不理解之处,也可能有理解不当或错误之处,请读者多多指教。
2023-08-26 15:28:25
308
原创 希尔伯特空间(Hilbert space)
先看 Wikipedia 中对 Hilbert Spaces 的 Definition:首先最熟悉的希尔伯特空间是欧式空间,以R3为例,它定义了点积,给定xy∈R3,它们的点积为:点积满足如下性质:即对称性、线性和正定性。这一段讲述什么是内积:像点积这样的运算,它作用在两个向量上,且满足以上三条性质,就叫内积。给向量空间安装一个内积,就成了内积空间。有限维的内积空间是一个 Hilbert Space。
2023-07-25 14:42:48
5697
4
原创 流形介绍(Manifolds: A Gentle Introduction)[续]
度规张量和之前学的度量矩阵其实是一回事;度规张量随 p∈Mp 的平滑性其实是其实是基向量之间内积的平滑性;有了度规张量,才有了内积、范数、长度等概念。
2023-07-19 14:44:01
328
Python logging 日志的模块化使用示例
2023-11-22
IDEA设置Eclipse风格代码主题
2019-04-12
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人