随笔分类 - 深度学习
与MindSpore相关或者与深度学习相关的一系列算法,会统一放到该分类下
摘要:
对于从元素运算到矩阵运算再到张量运算,最后抽象到图运算,这个预算模式的发展历程,在每个阶段都需要有配套的工具来进行支持。比如矩阵时代的numpy,张量时代的mindspore,还有图时代的mindspore-gl。我们未必说哪种运算模式就一定更加先进,但是对于coder来说,“公式即代码”这是一个永恒的话题,而mindspore-gl在这一个工作上确实做的很好。不仅仅是图模式的编程可读性更高,在GPU运算的性能上也有非常大的优化。
阅读全文
对于从元素运算到矩阵运算再到张量运算,最后抽象到图运算,这个预算模式的发展历程,在每个阶段都需要有配套的工具来进行支持。比如矩阵时代的numpy,张量时代的mindspore,还有图时代的mindspore-gl。我们未必说哪种运算模式就一定更加先进,但是对于coder来说,“公式即代码”这是一个永恒的话题,而mindspore-gl在这一个工作上确实做的很好。不仅仅是图模式的编程可读性更高,在GPU运算的性能上也有非常大的优化。
阅读全文
摘要:
张量网络计算,已经在众多的领域中得到了应用,不仅仅是传统的计算化学,当下医药研发领域的分子动力学模拟、计算化学和材料模拟,甚至是未来的量子计算,张量网络技术都在当中发挥重要作用。本文介绍的是MindSpore最新对张量网络计算的支持的第一步:用爱因斯坦求和计算张量网络缩并。
阅读全文
张量网络计算,已经在众多的领域中得到了应用,不仅仅是传统的计算化学,当下医药研发领域的分子动力学模拟、计算化学和材料模拟,甚至是未来的量子计算,张量网络技术都在当中发挥重要作用。本文介绍的是MindSpore最新对张量网络计算的支持的第一步:用爱因斯坦求和计算张量网络缩并。
阅读全文
摘要:
本文介绍了华为推出的深度学习框架MindSpore中最新支持的vmap功能函数,可以用于向量化的计算,本质上的主要作用是替代并加速python中的for循环的操作。最早是在numba和pytroch、jax中对vmap功能进行了支持,其实numpy中的底层计算也用到了向量化的运算,因此速度才如此之快。vmap在python中更多的是与即时编译功能jit一同使用,能够起到简化编程的同时对性能进行极大程度的优化,尤其是python中的for循环的优化。但是对于一些numpy、jax或者MindSpore中已有的算子而言,还是建议直接使用其已经实现的算子,而不是vmap再手写一个。
阅读全文
本文介绍了华为推出的深度学习框架MindSpore中最新支持的vmap功能函数,可以用于向量化的计算,本质上的主要作用是替代并加速python中的for循环的操作。最早是在numba和pytroch、jax中对vmap功能进行了支持,其实numpy中的底层计算也用到了向量化的运算,因此速度才如此之快。vmap在python中更多的是与即时编译功能jit一同使用,能够起到简化编程的同时对性能进行极大程度的优化,尤其是python中的for循环的优化。但是对于一些numpy、jax或者MindSpore中已有的算子而言,还是建议直接使用其已经实现的算子,而不是vmap再手写一个。
阅读全文
摘要:在本文中通过一个实际函数案例的多次尝试,给出了得到预期结果的一种解决方案。虽然MindSpore框架本身提供了Jvp和Vjp等功能,但是实际上和Grad没有太大的区别,只是用Tuple的形式增加了输入的一个维度。如果可以使用纯Tensor的输入,用这种Mask加上Grad或者GradOperation的方案会更加简单一些。同时我也尝试过使用HyperMap(类似于Jax中的vmap)来解决这个问题,只需要写好一条对z求导的函数形式,就可以自动对这个求导过程进行扩维,两者的结果是一致的。但是MindSpore的HyperMap在Graph模式下兼容效果不是很好,建议非必要不尝试。
阅读全文
摘要:可视化可以说在所有的研究领域中都是要仔细斟酌的问题,一个好的可视化工具不仅可以为工作的开展带来极大的便捷,在一些特殊的场景下还可以辅助人们进行一些重要的决策。比如在物理学领域中,最开始寻找相变点的技巧其实也是依赖于实验数据的可视化来实现的。而在深度学习领域,可视化模型、可视化训练过程、可视化参数以及可视化的总结,可以让我们迅速的得到模型好坏的结论,这一点我们在本文中通过研究MindInsight的一些安装与使用技巧来进行实现。
阅读全文
摘要:在不同的训练场景中,我们时常需要使用不同的损失函数来衡量一个模型的计算结果的优劣,本文重点介绍了在MindSpore中如何去自定义一个损失函数。基于MindSpore中的Loss类,我们可以通过继承该类后,再重写construct函数和get_loss函数来实现全面自定义的损失函数形式与内容。
阅读全文
摘要:这篇文章我们主要探讨如何去部署一个基于MindSpore框架的分布式训练环境,在MindSpore环境已经配置好的情况下,我们只需要安装好openmpi和nccl这两个工具就可以实现分布式的训练,在文中我们已经给出了相应的示例。虽然分布式与并行技术的目的是为了提升性能,但不是说对所有的场景都能够起到加速的作用,比如文章中的案例就没有加速的效果。这其实是因为我们的用例场景太简单了,纵观整个训练过程,GPU的使用率不到10%,在这种情况下还要考虑上通信的开销,自然是没有放在同一个卡上去训练来得快。这也给我们一个启发,考虑使用分布式和并行计算的技术时,一定也要先评估好问题本身是否适用于并行化的处理,否则是达不到预期的加速的目的的。
阅读全文
摘要:本文按照数据流的顺序,分别介绍了:使用sqlite3数据库存储数据、从sqlite3数据库中读取数据、使用从sqlite3数据库中的数据构造MindSpore可识别的训练数据集。对于输入的数据量比较大的场景,我们不太可能将全部的数据都加载到内存中,这就要考虑各种可以快速存储和读取的方案,数据库就是一种比较常见的方案。而sqlite3作为一款非常轻量级的数据库,在大部分的Python3中都是内置的,省去了很多编译安装的繁琐。当然性能表现可能不如其他的数据库,但是在我们这边给定的场景下,表现还是非常优秀的!
阅读全文
摘要:这篇文章主要介绍了Softplus、Sigmoid、Softmax和Tanh这4种激活函数,激活函数在机器学习领域中主要起到的是一个决策性质的作用,在分类器中有重要的应用价值。而除了这4种激活函数之外,MindSpore还实现了Softsign的激活函数,但是目前只能在昇腾平台上使用,其他的除了Softplus只能在GPU和昇腾平台运行之外,都是全平台支持的(CPU、GPU、昇腾)。
阅读全文
摘要:在这篇文章中,我们接着前面的博客继续讲MindSpore在训练好机器学习的模型并且保存成文件之后,如何加载并使用测试集加以验证。从测试结果中我们得到的启发是,机器学习的模型的有效性会很大程度上收到训练集的影响,因此最好是能够保障训练集的广泛性。如果测试集的范围大大超出了训练集所能够表示的范围,那么训练的结果误差就会很大。
阅读全文
摘要:本文主要从工程实现的角度测试了一下MindSpore的机器学习模型保存与加载的功能,通过这个功能,我们可以将自己训练好的机器学习模型发布出去供更多的人使用,我们也可以直接使用别人在更好的硬件体系上训练好的模型,或者应用于迁移学习。
阅读全文
摘要:基于前面所介绍的MindSpore框架使用线性神经网络来拟合线性函数的一个方案,这里我们将其推广到多参数、多幂次的函数,甚至是一些初等的函数。但是对于更加复杂的嵌套函数,可能还要思考一下更加普适的解决方案。
阅读全文
摘要:继上一篇文章介绍了MindSpore的CPU版本的Docker容器化部署之后,MindSpore官方团队推出了MindSpore的GPU版本的Docker容器化部署方案,本文针对这一方案进行了安装测试,并且对于其中一些安装的时候可以遇到的问题的细节进行了处理。之所以采用容器化的解决方案,主要是为了做到SDK环境与编程环境的隔离,释放本地环境配置与部署的压力。当然,也使得本地的开发环境更加的“干净”。
阅读全文
摘要:很多机器学习的算法的基础就是函数的拟合,这里我们考虑的是其中一种最简单也最常见的场景:线性函数的拟合,并且我们要通过mindspore来实现这个数据的训练。通过构造均方误差函数,配合前向传播网络与反向传播网络的使用,最终大体成功的拟合了给定的一个线性函数。文末我们还顺带介绍了使用matplotlib的animation来生成动态图的功能,可视化的展现了整个训练的过程。
阅读全文
摘要:本文主要讲解了由华为主导的MindSpore开源AI训练框架的基本特性与容器化的安装方案,顺带也介绍了一下Docker的基本使用方法,最后用两个测试案例:Tensor的基本运算、自动微分计算来验证了MindSpore的基本特性。
阅读全文

浙公网安备 33010602011771号