首页
学习
活动
专区
工具
TVP
发布

Dechin的专栏

专栏作者
182
文章
202865
阅读量
24
订阅数
手搓自动微分
自动微分技术,在各大深度学习框架里面得到了广泛的应用。但是其实究其原理,就是一个简单的链式法则。要实现一个自动微分框架是非常容易的事情,难的是高阶的自动微分和端到端的自动微分。这篇文章主要介绍一阶自动微分的基础Python实现,以及一些简单的测试案例。
DechinPhy
2024-04-19
300
直方图与核密度估计
直方图是一种经常被用于统计的图形表达形式,简单来说它的功能就是用一系列的样本数据,去分析样本的分布规律。而直方图跟核密度估计(Kernel Density Estimation,KDE)方法的主要差别在于,直方图得到的是一个离散化的统计分布,而KDE方法得到的是一个连续的概率分布函数。如果将得到的分布重新用于采样,两者都可以结合蒙特卡洛方法实现这样的功能,但是KDE的优点在于它得到的结果是可微分的,那么就可以应用于有偏估计的分子动力学模拟中,如元动力学(Meta Dynamics)方法。这里主要用Python实现一个简单的KDE函数的功能,也顺带介绍一下Numpy和Matplotlib中关于直方图的使用方法。
DechinPhy
2024-04-18
710
Tkinter常用功能示例(一)
Tkinter是一个Python自带的GUI框架,虽然现在主流的还是用pyqt的多一些,但是Tkinter在环境配置上可以节省很多工作,可以用来做一些小项目。如果是大型项目,用pyqt或者QT确实会更加专业一些。本文主要介绍一些简单的Tkinter的示例,比如文本框定义、标签定义和TreeView定义等。
DechinPhy
2024-04-17
630
MindSpore运行报错RuntimeError: Unsupported device target GPU解决方案
在运行MindSpore程序时,设置device_target为GPU,结果运行时报错:
DechinPhy
2024-04-16
1240
MindSpore编译构建后Vmap模块的RuntimeError问题
这篇文章来源于MindSpore仓库中的一个Issue,简单描述问题就是,如果你用MindSpore开发了一个python软件供别人使用,那么很有可能涉及到编译构建的问题。但是如果直接使用编译好的whl包去运行的话,就有可能出现一个跟Jit即时编译有关的报错,这里Jit在其他的一些模块中也会被使用到,比如Vmap函数和Grad函数等。
DechinPhy
2024-04-12
480
单精度浮点数误差与消除方法
一个比较容易理解的概念,我们在做计算的过程中,很多时候都要做截断。不同精度的混合计算之间也会有截断,就比如一个float32单精度浮点数,符号占1位,指数占8位,尾数占23位。而一个float64双精度浮点数,符号占1位,指数占11位,尾数占52位。通常情况下,float32的有效数字约7位(按照
DechinPhy
2024-04-11
950
MindSpore自动微分小技巧
基于链式法则的自动微分技术,是大多数深度学习框架中所支持的核心功能,旨在更加快速的进行梯度计算,并且可以绕开符号微分的表达式爆炸问题和手动微分的困难推导问题。本文主要基于MindSpore框架,记录一下几种自动微分的使用技巧。MindSpore版本信息:
DechinPhy
2024-04-10
820
IPython刷新函数模块
IPython是一个非常灵活好用的python终端工具,而且比Python自带的终端工具还多了命令行高亮和自动索引的功能,也是常用的Jupyter Notebook的基础工具。在使用IPython的过程中可以使用它的一些独有的功能——直接运行Shell命令行,和魔术命令。本文介绍的是其中一种魔术命令——重新加载函数模块。
DechinPhy
2024-03-26
560
MindSponge分子动力学模拟——自建力场(2024.03)
在MindSponge教程合集中我们已经介绍了很多使用MindSponge进行分子动力学模拟的方法,这里主要介绍在MindSponge中自定义一个力场。在传统的MD软件中,如果你希望去开发一个自己的力场,或者是添加一些分子动力学模拟方法如增强采样等,会面临不少编程上的困难。而这些困难对于使用Python来编程的MindSponge来说,就天然的降低了门槛。以力场为例子,我们可以在EnergyCell的基础上,去开发一个自定义的ForceField。
DechinPhy
2024-03-23
900
MindSpore报错处理:TypeError: For 'set_context', the parameter device_id can not be set repeatedly, origi
这里提示的是重复定义device_id的错误。但是实际上我通过vscode的文件检索功能,发现在整个程序引用中,并没有哪里调用到了这个device_id设置的位置。
DechinPhy
2024-03-23
910
MindSpore自定义算子中的张量维度问题
在前面的几篇博客中,我们介绍了MindSpore框架下使用CUDA来定义本地算子的基本方法,以及配合反向传播函数的使用,这里主要探讨一下MindSpore框架对于CUDA本地算子的输入输出的规范化形式。
DechinPhy
2024-03-13
550
Python定位函数定义地址
事情是这样的,在一次使用MindSpore编程的过程中,遇到一个报错"TypeError: get_parameters() got an unexpected keyword argument 'expand'"。首先我定位到了这个报错的函数,然后找到相关函数的定义:"def get_parameters(self, expand=True):",我们发现这里是有带expand参数的。更奇怪的是,当使用MindSpore的静态图模式时会报错,而如果想切换到动态图模式去定位这个问题时,程序又能够正常运行。
DechinPhy
2024-03-12
1080
将MindSpore运行结果输出到log文件
我们在Linux系统下使用一些深度学习框架(如MindSpore)运行脚本的时候,经常会用一些打印输出来判断当前执行的步骤,或者是使用打印输出来定位算法问题。但是在Linux系统下程序输出其实被分成了正确输出和错误输出,如果只是在屏幕上打印的话,会将两种输出同时打印出来。但是如果要将打印的结果输出到某个文件里面的话,这时候正确输出和错误输出就是需要分开指定了。
DechinPhy
2024-03-12
790
CUDA指针数组Kernel函数
在前面的一篇文章中,我们介绍了在C++中使用指针数组的方式实现的一个不规则的二维数组。那么如果我们希望可以在CUDA中也能够使用到这种类似形式的不规则的数组,有没有办法可以直接实现呢?可能过程会稍微有一点麻烦,因为我们需要在Host和Device之间来回的转换,需要使用到很多CUDA内置的cudaMalloc和cudaMemcpy函数,以下做一个完整的介绍。
DechinPhy
2024-03-08
900
C++中的不规则二维数组
最近刚学习C++的一些编程技巧,对于一些相对比较陌生的问题,只能采取一些简单粗暴的方案来实现。就比如说,我们可以在Python中定义一个[[0,0,0],[1,2],[1,1,1],[3]]这样的不规则的二维数组(list)。那么如果我们想在C++中实现一个类似的数据结构,应该怎么去设计呢?更具体一点的问题,当我们给C++输入一个固定长度的数组,比如Shape为(4,3),然后再给出一个Shape为(4,)的有效索引数组,保存的是第二个维度中数据的有效长度(这里有个要求是输入的有效位数处于固定长度数组的末尾,因为我们一般去更新数组时也是从末尾处push_back进去)。最后用一个数据结构保存这个不规则的二维数组,并且可以正常索引和打印。
DechinPhy
2024-03-07
820
从Python语言的角度看C++的指针
从一个Python Coder的角度来说,其实很羡慕C++里面指针类型的用法,即时指针这种用法有可能会给程序带来众多的不稳定因素(据C++老Coder所说)。本文主要站在一个C++初学者的角度来学习一下指针的用法,当然,最好是带着一定的Python基础再去学习C++的逻辑,会更容易一些。
DechinPhy
2024-03-06
870
MindSponge分子动力学模拟——使用MDAnalysis工具进行后分析(2024.02)
分子动力学模拟(Molecule Dynamics Simulation,MD),本质上是一门采样技术。通过配置力场参数、拓扑结构和积分器,对一个给定的体系不断的采样,最终得到一系列的轨迹。那么得到分子动力学模拟的轨迹之后,如何使用后分析工具进行轨迹分析,也是一项很重要的工作。目前来说,基于Python的开源工具MDAnalysis(简称mda)是一个比较常用的MD后分析工具。本文主要介绍基于MindSponge分子动力学模拟框架生成了相应的轨迹之后,如何使用MDAnalysis工具进行分析。
DechinPhy
2024-03-01
1290
Python3中的“指针”
在python中定义一个列表时,我们一定要注意其中的可变对象的原理。虽然python的语法中没有指针,但是实际上定义一个列表变量时,是把变量名指到了一个可变对象上。如果此时我们定义另外一个变量也指到同一个可变对象的话,就会造成一个“联动”的现象。也就是改变其中的一个值时,另一个值也会随之而改变。本文使用的Python版本为Python 3.7.13
DechinPhy
2024-02-28
730
MindSponge分子动力学模拟——定义Collective Variables(2024.02)
在前面的几篇博客中,我们介绍了MindSponge分子动力学模拟框架的基本安装和使用和MindSponge执行分子动力学模拟任务的方法。这里我们介绍一个在增强采样领域非常常用的工具:Collective Variable(CV),或者我们也可以直接称呼其为一个物理量。因为像化学反应或者是蛋白质折叠等问题中,经常会存在一个“路径(Path)”,使得反应沿着这个路径来进行。其中最简单的一种形式,就是成键断键。换句话说,我们可以通过调控这根键的键长,进而去调控这其中的化学反应,这也是分子力学层面的增强采样的一个基本思想。而随着增强采样技术的发展,越来越多的形式的CV被应用在不同的领域和问题当中。本文将会介绍,如何在基于深度学习框架MindSpore的分子动力学模拟软件MindSponge中,去定义一个CV。
DechinPhy
2024-02-20
1220
关于分子力场中键能项和角能项的思考
所谓的分子力场,就是用一些计算量较小的函数,来拟合并替代一部分传统第一性原理计算的结果。这个结果,包含了势能和作用力,再用朗之万动力学进行演化,这才使得我们可以在计算机上模拟一个分子动力学的过程。否则在第一性原理计算的框架下,要想获得动力学统计的信息,是非常困难的。
DechinPhy
2024-02-03
1370
点击加载更多
社区活动
腾讯技术创作狂欢月
“码”上创作 21 天,分 10000 元奖品池!
Python精品学习库
代码在线跑,知识轻松学
博客搬家 | 分享价值百万资源包
自行/邀约他人一键搬运博客,速成社区影响力并领取好礼
技术创作特训营·精选知识专栏
往期视频·千货材料·成员作品 最新动态
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档