摘要: Pytorch:单卡多进程并行训练 在深度学习的项目中,我们进行单机多进程编程时一般不直接使用multiprocessing模块,而是使用其替代品torch.multiprocessing模块。它支持完全相同的操作,但对其进行了扩展。Python的multiprocessing模块可使用fork、spawn、forkserver三种方法来创建进程。但有一点需要注意的是,CUDA运行时不支持使用fork,我们可以使用spawn或forkserver方法来创建子进程,以在子进程中使用CUDA。 阅读全文
posted @ 2023-01-24 22:30 orion-orion 阅读(102) 评论(0) 推荐(0) 编辑
摘要: SICP:复数的直角和极坐标的表示(Python实现) 数据抽象屏障是控制复杂性的强有力工具,然而这种类型的数据抽象还不够强大有力。从一个另一个角度看,对于一个数据对象可能存在多种有用的表示方式,且我们希望所设计的系统能够处理多种表示形式。比如,复数就可以表示为两种几乎等价的形式:直角坐标形式(实部和虚部)和极坐标形式(模和幅角)。有时采用直角坐标更方便,有时采用幅角更方便。我们希望设计的过程能够对具有任意表示形式的复数工作。 阅读全文
posted @ 2023-01-23 21:11 orion-orion 阅读(100) 评论(0) 推荐(1) 编辑
摘要: SICP:符号求导、集合表示和Huffman树(Python实现) 到目前为止,我们已经使用过的所有复合数据,最终都是从数值出发构造起来的(比如我们在上一篇博客所介绍的链表和树就基于数来进行层次化构造)。在这一节里,我们要扩充所用语言的表达能力,引进将任意符号作为数据的功能。本节内容包括符号求导、如何设计集合的表示和Huffman编码树。 阅读全文
posted @ 2023-01-04 20:55 orion-orion 阅读(89) 评论(0) 推荐(1) 编辑
摘要: 数值计算:前向和反向自动微分(Python实现) 自动微分技术(称为“automatic differentiation, autodiff”)是介于符号微分和数值微分的一种技术,它是在计算效率和计算精度之间的一种折衷。自动微分不受任何离散化算法误差的约束,它充分利用了微分的链式法则和其他关于导数的性质来准确地计算它们。我们可以选择定义一种新的数据类型来存储[u,u′]和[v,v′]这类数对。我们可以在这些数对上定义一种代数运算,这些代数运算编码了一些经典的操作。 阅读全文
posted @ 2022-12-28 16:03 orion-orion 阅读(197) 评论(0) 推荐(1) 编辑
摘要: Python:多进程并行编程与进程池 Python的并行编程可以采用multiprocessing或mpi4py模块来完成。multiprocessing是Python标准库中的模块,实现了共享内存机制,也就是说,可以让运行在不同处理器核心的进程能读取共享内存。在基于共享内存通信的多进程编程中,常常通过加锁或类似机制来实现互斥。) 阅读全文
posted @ 2022-12-10 12:17 orion-orion 阅读(93) 评论(0) 推荐(0) 编辑
摘要: Python:对程序做性能分析及计时统计 如果只是想简单地对整个程序做计算统计,通常使用UNIX下的time命令就足够了。由于我用的是Mac系统,和Linux系统的输出可能有不同,不过关键都是这三个时间:user: 运行用户态代码所花费的时间,也即CPU实际用于执行该进程的时间,其他进程和进程阻塞的时间不计入此数字;system: 在内核中执行系统调用(如I/O调用)所花费的CPU时间。total(Linux下应该是real):即挂钟时间(wall-clock time),也称响应时间(response time)、消逝时间(elapsed time),是进程运行开始到结束所有经过的时间,包括了进程使用的时间片和进程阻塞的时间(例如等待I/O完成)。 阅读全文
posted @ 2022-11-27 17:28 orion-orion 阅读(216) 评论(0) 推荐(0) 编辑
摘要: Python:global、local与nonlocal变量 声明在函数内的变量拥有一个local scope(局部作用域,即在函数内),我们将这类变量称为local(局部)变量。声明在函数之外的变量,也即它们都在gobal scope(全局作用域)中,我们将它们global(全局)变量。nonlocal变量常用在局部嵌套函数中将外层函数中的自由变量绑定到内层函数作用域。 阅读全文
posted @ 2022-11-27 01:01 orion-orion 阅读(39) 评论(0) 推荐(0) 编辑
摘要: Pytorch:使用Tensorboard记录训练状态 我们知道TensorBoard是Tensorflow中的一个强大的可视化工具,它可以让我们非常方便地记录训练loss波动情况。如果我们是其它深度学习框架用户(如Pytorch),而想使用TensorBoard工具,可以安装TensorBoard的封装版本TensorBoardX。最后,需要提到的是,因为Tensorboard太常用了,所以在目前最新的Pytorch版本中已经直接集成进来了。所以,现在使用Tensorboard只需要直接导入torch.utils.tensorboard即可。 阅读全文
posted @ 2022-11-26 20:26 orion-orion 阅读(67) 评论(0) 推荐(0) 编辑
摘要: 图数据挖掘:幂律分布和无标度网络 我们发现,现实世界许多网络的节点度分布与幂函数乘正比。事实上,航空网络的度分布常常满足幂律分布;而高速公路网络的度分布则常常满足泊松分布(指数族分布的一种),其均值为平均度。幂律分布就是一种典型的重尾分布(就像我们前面所展示的节点度高度倾斜)。但需要注意的是,正态分布和指数分布不是重尾分布。 阅读全文
posted @ 2022-11-05 22:52 orion-orion 阅读(487) 评论(0) 推荐(0) 编辑
摘要: 图数据挖掘:基于概率的流行病模型 这篇博客让我们来介绍基于概率的传播模型,这种模型基于对数据的观测来构建,不过不能对因果性进行建模。基于随机树的传染病模型是分支过程(branching processes)的一种变种。在这种模型中,一个病人可能接触d个其他人,对他们中的每一个都有概率q>0将其传染,接下来我们来看当d和q取何值时,流行病最终会消失(die out) 阅读全文
posted @ 2022-11-04 22:32 orion-orion 阅读(387) 评论(0) 推荐(1) 编辑
http://www.vxiaotou.com