• [其他问题] 【使用MindSpore开发训练模型识别手写数字】完成实验任务,进度不会变
    【操作步骤&问题现象】使用MindSpore开发训练模型识别手写数字实验完成了,任务的进度却不动啊?是我操作有问题还是怎么回事?【截图信息】这个是第五步查看个版本模型保存文件。实验有要求loss值达到0.3以下,验证精度accuracy达到0.95以上这是第二次的结果进度没反应就修改参数重新训练了一次任务进度停在80%也不动,是我少操作步骤了还是怎么的,损失和准确率都达到要求了呀?
  • [技术干货] 华为云IoT训练营:AIoT关键技术和AIoT在自动售货机的应用
    内容简介:通过动手实操,让高校开发者体验如何基于IoT借助物联网开发板快速模拟实现自动售货机购物订单数据上报,并结合AIoT构建销量预测模型,以及进行大屏展示。内容大纲:1. 解读物联网技术发展历程、趋势及当前应用场景2. 讲述自动售货机工作原理及物联网技术在其中的应用3. 华为物联网技术及基于AIoT区域销量预测与可视化呈现方案介绍听众收益:1. 通过结合开发板与华为云IoT设备接入服务,模拟实现售货机购物与订单数据上报功能2. 通过设置数据转发规则,实现模拟订单数据的生成与流转3. 基于大量的上报的订单数据,结合AI模型训练,实现自动售货机区域销量预测本次实验涉及到的实验资源如下:其中5、6项请在本帖下载2、3、4项资源请前往以下链接下载:https://bbs.huaweicloud.com/blogs/174611相关课程请前往:《深度学习:IoT场景下的AI应用与开发》(完成学生认证即可免费学习以上课程,课程内含本次训练营所有资源)
  • [其他] 盘古大模型
    转自机器之心:近段时间,中文大规模预训练语言模型圈有些热闹。 26 亿参数量的「悟道 · 文源」, 270 亿参数量的 PLUG,以及昨天华为云发布的千亿级别「盘古」NLP 大模型,预训练语言模型已经成长到仅加载就需要 TB 级的内存或显存。 我们可以直观地想到,「盘古」效果理应更好,但计算量需求也更大,训练起来更困难。 然而「盘古」实际上是这样一次探索:开源框架 MindSpore,昇腾基础软硬件平台,加上超大规模中文预训练模型,意味着基础设施已然完善了。 这项工作由华为以及北京大学相关技术团队联手完成,在昇腾基础软硬件平台,以及 MindSpore 框架自动并行等黑科技的帮助下,训练出当前最大的中文预训练模型。 那么量级不断拔高的盘古大模型是如何训练出来的? 。。。。。。 这么厉害,用起来的效果应该也很惊艳吧,期待看到应用的效果~
  • [近期热门] 国内首个支持千亿参数大模型训练AI计算框架MindSpore 1.2发布
    4月26日,华为开发者大会2021(Cloud)期间(简称HDC. Cloud 2021),国内首个支持千亿参数大模型训练的AI计算框架MindSpore 1.2正式发布。最新1.2版本带来了AI框架领域 “全自动并行、全场景AI、可解释推荐模型” 三大创新,让开发者尽享AI开发。全自动并行 MindSpore是业界首个基于网络拓扑和集群资源自动感知的全自动并行框架,且基于全自动并行能力已开发业界首个2000亿参数的中文预训练模型。 在静态图模式下,MindSpore融合了流水线并行、模型并行和数据并行三种并行技术,开发者只需编写单机算法代码,添加少量并行标签,即可实现训练过程的自动切分,使得并行算法性能调优时间从月级降为小时级,同时训练性能相比业界标杆提升40%。 在动态图模式下,MindSpore独特的函数式微分设计,能从一阶微分轻易地扩展到高阶微分,并进行整图性能优化,大幅提升动态图性能;结合创新的通讯算子融合和多流并行机制,较其它AI框架,MindSpore动态图性能提升60%。 全场景AI MindSpore实现了在云、边、端不同场景下硬件设备的快速应用、高效运行与有效协同。通过全场景AI的能力,Huawei Watch GT的抬腕识别率提升了80%,时延小于5ms,模型小于1KB,大幅提升了用户体验。 在云端:通过自适应模型切分和服务内分布式并行调度技术,可支持超大模型在多张加速卡上的推理部署,且推理性能较目前业界领先的serving服务方式提升30% 在边缘侧:通过自适应模型压缩技术,将CV类(Computer Vision 计算机视觉)模型压缩2/3,推理时间缩短50%,用户侧实测精度损失<1%,能有效解决边缘侧算力瓶颈;在端侧:模型即代码,将模型编译到代码里,实现了极小的ROM(Read-Only Memory储存内存)占用。同时,通过算子数据重排技术提升端侧Cache命中率,可降低推理时延,解决在超轻量IOT设备进行部署时受设备类型、内存等所限制的难题。可解释推荐模型 MindSpore内置业界首个语义级可解释推荐模型TB-Net,基于原创知识图谱双向传导技术,从知识图谱的海量关系路径中,精准识别影响用户行为的核心特征和关键路径,提供个性化推荐和语义级的解释,可解释性评估指标相比业界模型提升63%。 自2020年3月开源以来,MindSpore社区拥有逾17万名开发者,软件下载量超过24万,在超过10个行业规模使用。此外,在码云(Gitee)上MindSpore的代码活跃度、影响力、社区活跃度、团队构建、流行趋势综合排名第一。目前,MindSpore已是发展最快的AI开源社区。 原文地址:https://mp.weixin.qq.com/s/956MwjCGI3VRmuo8RASpGw
  • [技术干货] 为什么Python是机器学习的理想选择?
    Python 人工智能项目在各种形式和规模的公司中变得非常流行。以下是 Python 语言非常适合 ML 开发的原因。作者:佚名来源:马哥Linux运维Python 人工智能项目在各种形式和规模的公司中变得非常流行。以下是 Python 语言非常适合 ML 开发的原因。如今,大多数公司都在使用 Python 进行 AI 和机器学习。随着预测分析和模式识别变得比以往任何时候都更流行,Python 开发服务是大规模企业和初创公司的优先事项。Python 开发人员的需求量也随之变大——主要是因为使用该语言可以实现相应功能。AI 编程语言需要强大、可扩展和可读性。而 Python 代码在这三方面都能实现。虽然有其他技术栈可用于基于 AI 的项目,但 Python 已被证明是最好的编程语言。它为人工智能和机器学习(ML)提供了优秀的库和框架,以及计算能力、统计计算和科学计算等。在本文中,我们将了解 Python 编程语言的几个方面,使其成为机器学习工程师的完美选择。我们将探讨以下内容: 为什么使用 Python 软件进行机器学习和 AI 用于 AI 的最佳 Python 库 结论让我们来了解一下为什么开发人员喜欢这种编程语言,而不是 R、Go、Scala 和其他为 AI 项目设计的语言。为什么使用 Python 进行机器学习和 AI?调查显示,Python 现在是继 C 和 Java 之后的又一门顶级的编程语言。它允许开发人员为 Python AI项目构建强大的后端系统。将 Python 编程语言对机器学习和 AI 开发有多种好处。让我们来详细了解一下它们。快速开发 Python 社区欣赏这种编程语言的快速原型设计能力。开发者可以减少在学习复杂的堆栈上浪费的时间。他们可以快速开始 AI 开发,并迅速进入构建人工智能算法和程序的阶段。 由于 Python 代码与英文相似,所以它易于阅读和编写。开发人员不必花费大量时间来编写复杂的代码。除此之外,在 Python 中还有一些用于 AI 和机器学习(ML)的优秀库和框架,可以帮助简化这个过程。我们将在文章后面详细了解它们。灵活的语言 让开发者能够最大限度的灵活性进行 AI 应用开发,是 Python 程序员对这门语言的钦佩之处。用于 机器学习的 Python 允许你选择 OOPS 或基于脚本的编程,并且可以在不完全重新编译 Python 代码的情况下快速查看结果。 有四种不同风格的 Python 软件可以选择——命令式、面向对象、函数式和程序式,所有这些都可以根据你的 AI 项目减少出错的可能性。可读性 对于大多数开发者来说,可读性是一个改变游戏规则的因素。机器学习开发的 Python 语法就像英语一样。你不必长期陷入于理解这门语言。 如果有开发人员在项目中途加入,他们也可以轻松理解发生了什么。在 Python 中引起混乱、错误和冲突的几率也较低,能够迅速开发任何机器学习程序。可视化选项 数据是机器学习、人工智能和深度学习算法最重要的部分。处理数据需要大量的可视化,以确定模式并理解所有变量和因素。为此,Python 软件包是最好的。 开发人员可以构建直方图、图表和图,以便更好地理解数据将如何相互作用和共同工作。还有一些 API 可以让你勾勒出清晰的数据报告,从而使可视化过程变得更加简单。除此之外,还有一个令人惊叹的 Python 社区可以在整个开发过程中提供支持、一致性和简单性。Python 编程语言现在正成为机器学习开发的常见语言,在这个过程中也有一些库促使了这成为可能。让我们来看看一些针对 AI 开发优秀的 Python 库。Python 用于 AI 和 ML 的 6 大库和框架Python 编程语言最棒的地方是有大量的机器学习开发的库。以下是 6 大 Python 库,它们通过可读性和强大的算法使人工智能无缝衔接。NumPy如果没有 NumPy,数据科学将是不完整的。它是一个可以进行科学计算的 Python 软件包。NumPy 是一个神奇的多维数组对象库。它们协同工作,降低了程序的计算复杂性。SciPySciPy 是 Python 人工智能项目的另一个热门库,也是涉及数学和工程领域中, Python 程序员科学和重度计算的首选。它提供了数值优化和集成的例程,对于初学者来说非常友好。Scikit-Learn这个库建立在 NumPy 和 SciPy 之上,主要用于监督和无监督学习。它是一个用于数据挖掘和数据分析的完美工具。PandasPandas 是开源的 Python 软件包,使程序员能够对数据进行操作和分析。它具有高效的数据探索和可视化功能,并提供高级数据结构和多种工具,可用于密切处理多个数据集。KerasKeras 是一个运行在 TensorFlow 上的 API。Keras的重点是让开发者快速实验人工智能。这个库的用户体验比 TensorFlow 好得多——因为它是用 Python 开发的,所以比其他工具更容易理解。Matplotlib所有库中最强大的是 Matplotlib。它提供了数据可视化和探索的功能,以及图表、直方图和散点图等,以定制 Python AI 项目。Matplotlib 有助于在更短的时间内快速操作数据进行可视化展示。这些是 Python和机器学习的6大库。除此以外,还有TensorFlow、NLTK、PyBrain、Caffe等库,这些库会导致AI应用的适当性能。结论通过上文我们看到了 Python 对机器学习的好处,以及为什么它对 AI 很重要。我们还看了简化 Python AI 开发过程的顶级 Python 库和工具。从本质上讲,Python 是人工智能的一种特殊编程语言。它具有同时处理海量数据请求的能力和可扩展性。将来还会看到更多 Python 和机器学习的整合。【责任编辑:庞桂玉 TEL:(010)68476606】
  • [公告] “产业+创业”赋能双通道,华为云微光训练成都站开营
    摘要4月26日至27日,华为云初创扶持计划微光训练营成都站暨华为开发者大会(2021)成都产业云分会场盛大召开。成都政府相关领导、华为高层、创业精英、初创企业、开发者们等嘉宾齐聚一堂,共同见证了华为云对“聚微光、创未来”愿景的筹划……4月26日至27日,华为云初创扶持计划微光训练营成都站暨华为开发者大会(2021)成都产业云分会场盛大召开。成都政府相关领导、华为高层、创业精英、初创企业、开发者们等嘉宾齐聚一堂,共同见证了华为云对“聚微光、创未来”愿景的筹划,与会嘉宾还深入探讨了数字经济时代下发展机遇新内涵,以及如何通过华为云与成都产业云创新中心提供的“产业+创业”赋能双通道,带动产业链数字化转型,并加速初创企业技术转型及商业成功,助力开启创业梦想。大会两天精彩议程受到150位与会者一致认可。专家纵谈 论道数字经济时代新机遇成都高新区党工委委员、管委会副主任  饶程大会邀请了成都市人民政府副秘书长刘兴军,成都高新区党工委委员、管委会副主任饶程和华为云Marketing与生态总裁陈亮共同主持华为云微光训练营开营仪式,成都市科技局、成都市新经济委等市级部门参加活动。饶程在开营致辞时表示,受邀嘉宾与各位初创企业代表共同见证微光训练营正式开营,就是要以此为契机,把握数字经济产业发展的历史潮流,持续赋能数字经济初创企业,助力企业加快数字化转型。“成都将毫不动摇地继续鼓励、支持、引导初创企业发展壮大,大力推动制度创新、政策创新、技术创新、产品创新和产业创新,助力数字经济加快发展。”华为云Marketing与生态总裁  陈亮陈亮在致辞环节谈到,“聚是一团火,散是满天星,对初创人才培养的星星之火可以燎原。”他介绍到,华为成都软件开发云创新中心通过为高新区搭建云平台,已累计对接成都市内2000余家软件类、人工智能、大数据等企业,成功帮助520余家企业和行业协会落地云上“黑土地”。华为成都软开云创新中心是全国120个的产业云创新中心的缩影。产业云联合了300多家技术类生态合作伙伴,为超过1.7万家企业提供数字化转型服务。在大会联合创新标杆企业授牌环节,成都高新区新经济发展局副局长刘强、               华为云川藏区域总经理王昆为联合创新标杆企业授牌。来自成都恒视通科技有限公司、成都地图慧科技有限公司、四川菊乐食品股份有限公司、成都恒图科技有限责任公司、四川生学教育科技有限公司、四川虹魔方网络科技有限公司六家获奖代表上台领奖,成都地图慧科技有限公司总经理陈昌校代表获奖企业上台发言。企业代表上台领取联合创新标杆企业奖成都高新区新经济发展局大数据与网络安全处负责人杨容辉表示,希望更多优秀的初创企业可以加入到高新区建设中来。据他介绍,成都高新区是全国首批国家级高新区、西部首个国家自主创新示范区和四川自贸试验区核心区所在地。2020年,成都高新区实现地区生产总值2400亿元,新经济总产值达4000亿元,累计聚集新经济企业超过9万家,汇聚了5G、AI、大数据、数字文创、区块链等新兴科技领域企业。在政府、行业组织、企业主体、市场、专业机构多方参与下,高新区希望通过完善的金融服务和完备的政策体系,吸引更多优秀企业加入其中,共同建立起一个更具活力、更加开放、更富效率的产业生态环境。成都高新区新经济局大数据与网络安全处负责人杨容辉华为云创新孵化生态总监申芸在演讲时介绍,2021年的扶持计划有三大亮点:一是协同政府双创产业扶持资源,助力资源落地;二是技术共生,商业共赢,培育初创SaaS成长;三是华为云+HMS联合扶持互联网初创企业。同时,本次华为云初创扶持计划也将以云服务作为出海公司业务增长的基础设施,拉通华为全球生态资源及优质的海内外创投资本,助力企业出海拓新。她透露,华为云推出了5大核心权益助力初创企业腾飞,这其中包括长达1年的云资源全免和满减扶持扶持力度,最高可达100万元;举办微光训练营及专场投资对接会,为企业提供更多融资机会;联动华为终端,为初创企业移动APP提供流量扶持;联合知名高校创新中心,打造赛道人才集训地及人才资源池;提供HDC/HC/华为云全球初创企业大赛等活动参与机会,多种华为云市场活动曝光机会。“创业者可以在云、AI、5G、边缘这些关键技术集中融合的基础上,创造革命性的新价值,引发新裂变。华为云将从创意灵感到商业成功每个环节提供服务,助力每个梦想实现。” 同时,Huawei Spark Founders Summit系列峰会也在本次成都站中正式对外发布。参与本次微光训练营的优秀企业也将受邀参与此次峰会。华为云创新孵化生态总监  申芸华为云中国区副总裁李鹏程带来了“落地产数融合,加速城市产业集群数字化进程”的精彩演讲。他表示,数字化已经指明了产业发展新方向,产数融合的本质是全面创新数字化转型。在他看来,一方面,华为30年数字化转型时间助力产业升级,将能力开放给业界;另一方面,华为云产业云为产数融合提供核心驱动力,加速城市产业集群转型。“ ‘技术’+‘商业’双轮驱动为合作企业提供全场景服务,产业云为城市产业集群创造新价值。”华为云中国区副总裁李鹏程不能错过的神助攻:华为比初创企业想得更远,提供的更多华为云为什么会更聚焦于初创企业呢?事实上,当下数字经济的蓬勃发展劲头势不可挡,这样的社会环境对创业者无疑非常有利,甚至可以说是最好的创业时代。一方面,数字技术提高了创业质量和创业活力,层出不穷的高科技帮助创业者推陈出新,尤其在传统行业数字化转型的背景下,数字技术令初创企业开拓出大量市场新空间;另一方面,在华为云这样的多元生态扶持下,降本增效更容易获得,生态合作机会更多。显然,数字经济大大提高了初创企业和成长型企业的存活率。既然初创企业面临着如此难得的历史机遇,那么为什么更推荐与华为云合作呢?这不得不提到华为云一直以来“持续做厚生态黑土地”的发展战略,因为对于初创企业而言,瞄准机遇存活下来仅仅只是“入场券”,成长壮大才是根本。而华为云能够为初创企业和开发者们提供的,不仅有5G、物联网、云、AI这些数字经济核心技术扶持,还有华为深耕行业30余年积累的服务经验,深谙新技术如何与医疗、交通、能源、教育、金融等千行百业融合出新应用。更重要的是,华为云提供的是一个更广阔的生态平台,初创公司的优质应用创新在华为云的生态中,不只有推向全国的机会,甚至可以登上更大的世界舞台。简而言之,华为云为了帮助和加速科技初创企业成长,提供的是华为云积攒的技术能力和开放的云生态体系,初创企业不能能够获得免费的云资源及专业技术培训和营销权益,还可以在华为云的帮助下,拉通华为全球生态资源及优质的海内外创投资本,出海拓新。国内可以做到华为云如此大力度扶持的厂商凤毛麟角,所以华为云初创扶持计划微光训练营成都站备受初创企业关注,并在业内引发热议也不难理解了。从“输血”到“造血”华为这位“神助攻”可并非只停留在表面,“产业+创业”双赋能的实战精神在两天紧凑议程中体现得淋漓尽致。在大会现场,主办方邀请到了业界精英,从初创团队建设、商业模式设计、商战案例讲解、融资秘籍、路演技巧等环节,全方位解密创业成长心得。中央企业科技成果转化和创新创业咨询专家黄向城带来了“商业模式的设计与实战分享”,给现场的初创企业极大的启迪。他先是分享了如何打造初创企业的科创属性,又通过大量的事件案例详细阐述了商业模式的设计逻辑、组成内容、盈利模式、成功特点,深受与会者欢迎。四川大学创新创业工作领导小组办公室专职副主任吴迪的精彩演讲则聚焦于“初创项目融资的BP通关”。在演讲中她从如何提炼项目选题、瞄准项目痛点、用户对项目产品的需求度、团队建设、知识产权,甚至如何为项目取名等多个细节入手,详细介绍了融资通关秘籍,引起现场与会者的共鸣。成都精位科技联合创始人周宏亮则在现场分享了企业策划案和路演技巧。他先是讲述了商业策划书在篇幅、设计风格、文字字体颜色等方面的技巧,接着又分享了一些路演的雷区禁忌,竞争对手分析、市场定位等经验,干货满满。2021年是“十四五”规划的开局之年。成都作为国内大循环战略腹地和国内国际双循环门户枢纽,大力发展新一代数字技术和初创企业,对进一步提升科技创新水平、培育经济新动能具有重大意义。通过培育并扶植出大量优质的数字经济初创企业,不仅能开创出更具创新性的企业集群,而且还能更好地把握数字经济产业发展的历史潮流,融入新发展格局,增强城市竞争力。让我们拭目以待,共同“聚微光 创未来”。来源:华为云
  • [调试调优] 使用pycharm实现mindspore第一个训练案例:实现简单现行函数拟合
    代码:from mindspore import context context .set_context(mode = context.GRAPH_MODE,device_target = 'GPU') import numpy as np def get_data(num,w=2.0,b=3.0): for _ in range(num): x = np.random.uniform(-10.0,10.0) noise = np.random.normal(0, 1) y = x * w + b + noise yield np.array([x]).astype(np.float32),np.array([y]).astype(np.float32) import matplotlib import matplotlib.pyplot as plt eval_data = list(get_data(50)) x_target_label = np.array([-10,10,0.1]) y_target_label = x_target_label * 2 +3 x_eval_label,y_eval_label = zip(*eval_data) plt.scatter(x_eval_label,y_eval_label,color= 'red',s=5) plt.plot(x_target_label,y_target_label,color = 'green') plt.title('eval data') plt.show()报错如下:5184dfa59d8a:python -u /opt/project/main.py WARNING: 'ControlDepend' is deprecated from version 1.1 and will be removed in a future version, use 'Depend' instead. [WARNING] ME(1:140287611883648,MainProcess):2021-04-26-14:02:02.370.725 [mindspore/ops/operations/array_ops.py:2302] WARN_DEPRECATED: The usage of Pack is deprecated. Please use Stack. Error: failed to send plot to http://127.0.0.1:63342 Traceback (most recent call last): File "/usr/local/python-3.7.5/lib/python3.7/urllib/request.py", line 1317, in do_open encode_chunked=req.has_header('Transfer-encoding')) File "/usr/local/python-3.7.5/lib/python3.7/http/client.py", line 1252, in request self._send_request(method, url, body, headers, encode_chunked) File "/usr/local/python-3.7.5/lib/python3.7/http/client.py", line 1298, in _send_request self.endheaders(body, encode_chunked=encode_chunked) File "/usr/local/python-3.7.5/lib/python3.7/http/client.py", line 1247, in endheaders self._send_output(message_body, encode_chunked=encode_chunked) File "/usr/local/python-3.7.5/lib/python3.7/http/client.py", line 1026, in _send_output self.send(msg) File "/usr/local/python-3.7.5/lib/python3.7/http/client.py", line 966, in send self.connect() File "/usr/local/python-3.7.5/lib/python3.7/http/client.py", line 938, in connect (self.host,self.port), self.timeout, self.source_address) File "/usr/local/python-3.7.5/lib/python3.7/socket.py", line 727, in create_connection raise err File "/usr/local/python-3.7.5/lib/python3.7/socket.py", line 716, in create_connection sock.connect(sa) ConnectionRefusedError: [Errno 111] Connection refused During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/opt/.pycharm_helpers/pycharm_display/datalore/display/display_.py", line 60, in _send_display_message urlopen(url, buffer) File "/usr/local/python-3.7.5/lib/python3.7/urllib/request.py", line 222, in urlopen return opener.open(url, data, timeout) File "/usr/local/python-3.7.5/lib/python3.7/urllib/request.py", line 525, in open response = self._open(req, data) File "/usr/local/python-3.7.5/lib/python3.7/urllib/request.py", line 543, in _open '_open', req) File "/usr/local/python-3.7.5/lib/python3.7/urllib/request.py", line 503, in _call_chain result = func(*args) File "/usr/local/python-3.7.5/lib/python3.7/urllib/request.py", line 1345, in http_open return self.do_open(http.client.HTTPConnection, req) File "/usr/local/python-3.7.5/lib/python3.7/urllib/request.py", line 1319, in do_open raise URLError(err) urllib.error.URLError: <urlopen error [Errno 111] Connection refused> Process finished with exit code 0
  • [新手课堂] K近邻法
    K近邻法KNN算法流程K近邻法思想非常简单:给定测试样本?基于某种距离度量找出训练集中与其最靠近的k 个训练样本,然后基于这k 个" 邻居"的信息来进行预测. 通常, 在分类任务中可使用"投票法" 即选择这k 个样本中出现最多的类别标记作为预测结果;在回归任务中时使用"平均法" ,即将这k 个样本的实值输出标记的平均值作为预测结果;还可基于距离远近进行加权平均或加权投票,距离越近的样本权重越大这里直接给出其算法流程:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-z3343tyb-1619193747858)(imgs/knn.png)]KNN没有显式的训练过程,它是"懒惰学习" (lazy learning) 的著名代表,此类学习技术在训练阶段仅仅是把样本保存起来,训练时间开销为零,待收到测试样本后再进行处理;相应的,那些在训练阶段就对样本进行学习处理的方法,称为"急切学习" (eager learning)KD-treeKD-tree介绍KNN最简单的实现方法是线性扫描,这时需要计算输入实例与每一个训练实例的距离,当训练集很大或者问题是高维问题时,计算非常耗时。为了提高KNN搜索的效率,可以考虑用特殊的结构存储训练数据,以减少计算距离的次数,具体方法很多,下面介绍其中的KD-tree方法。KD-tree是一种对k维空间中的实例点进行存储以便对其进行快速检索的树形数据结构,KD-tree是二叉树,表示对k维空间的一个划分。构造KD-tree相当于不断地用垂直于坐标轴的超平面将k维空间划分,构成一系列的k维超矩形区域,KD-tree的每一个结点对应于一个k维超矩形区域KD-tree可以看作是二叉搜索树(BST)在高维的推广,1D-tree其实就是BSTKD-tree的构造流程KD-tree的构造流程如下:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OCs43xSH-1619193747861)(D:\Documents\my_github_repo\learn-machine-learning\imgs\kdtree.png)]上图展示的流程是李航《统计学习方法》中给出的,其中选择切分的坐标轴是按顺序依次循环的方式选取的,只是一种简单的执行方式,但不一定能得到一个好的平衡KD-tree(类似平衡二叉搜索树的平衡的含义:尽可能让每个结点的左子树和右子树划分得到的数据量相当,这样就能使得树有较低的深度,从而使得搜索k个距离最近的点时能有较低的复杂度),所以实际往往选择切分点时并不是按顺序循环,而是每次选方差最大的维度作为切分维度(这样能够较好的从切分点处分开,且分开后两边的数据量相当,还能保证自下而上搜索k个距离最近的点时,越到上方越不可能再合并考查另一端结点,见下面的KD-tree搜索算法),可以更好地二分,保持最大程度的区分度,达到平衡KD-tree,好处是最后找k近邻时复杂度更低KD-tree搜索算法构建好了KD-tree,就可以在KD-tree上执行搜索了,这里我们的目的是找一个测试实例在原始训练数据集中的k个距离最近的点,下面给出找最邻近的算法,找k邻接的算法是类似的(可以用一个最大堆来实现,最大堆里面先一直添加数据集中的点到该测试实例的距离,直到达到k个,此时最大堆的堆顶元素就是距离最大的第k个元素,以后新来的点到测试实例的距离若小于堆顶元素,则将最大堆的堆顶元素弹出,加入新的点到测试实例的距离,并调整元素位置以维持最大堆的条件,如果新来的点到测试实例的距离大于等于堆顶元素,则不需要执行操作,同样一直遍历到根节点结束)[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wxoX5hbl-1619193747865)(imgs/kdtree_search.png)]KD-tree构造和搜索算法的Python实现import heapqclass KdTreeNode:    def __init__(self, data=None, split=0, median=None, left=None, right=None, parent=None):        self.data = data        self.split = split        self.median = median        self.left = left        self.right = right        self.parent = parentclass KdTree:    def __init__(self, all_data, dimension, min_split=1):        self.min_split = min_split        self.dimension = dimension        self.size = len(all_data)        self.root = self.__build_kdtree(all_data)    def __build_kdtree(self, all_data):        if len(all_data) == 0: return None        if len(all_data) <= self.min_split: return self.KdTreeNode(all_data, 0, all_data[0], None, None)        split = self.__get_max_variance_dimension(all_data)        left_data, median, right_data = self.__split(all_data, split)        node = self.KdTreeNode([], split, median,                               self.__build_kdtree(left_data),                               self.__build_kdtree(right_data))        if node.left is not None: node.left.parent = node        if node.right is not None: node.right.parent = node        return node    def __get_max_variance_dimension(self, all_data):        num_of_data = len(all_data)        means = [0.0] * self.dimension        variances = [0.0] * self.dimension        for data in all_data:            for i in range(self.dimension):                means[i] += data[i]        means = [mean / num_of_data for mean in means]        for data in all_data:            for i in range(self.dimension):                variances[i] += (data[i] - means[i]) ** 2        return max((variance, i) for i, variance in enumerate(variances))[1]    def __split(self, all_data, dim):        length = len(all_data)        def min_k(data, begin, end, k):            # partition            pivot = data[begin][:]            left = begin            right = end            while left < right:                while left < right and data[right][dim] >= pivot[dim]:                    right -= 1                data[left] = data[right]                while left < right and data[left][dim] <= pivot[dim]:                    left += 1                data[right] = data[left]            data[left] = pivot            if left - begin + 1 == k:                return            elif left - begin + 1 < k:                return min_k(data, left + 1, end, k - (left - begin + 1))            else:                return min_k(data, begin, left - 1, k)        mid = round(length / 2)        min_k(all_data, 0, length - 1, mid)        return all_data[0:mid], all_data[mid - 1], all_data[mid:]    def data_distance(self, data_1, data_2):        dis = 0.0        for i in range(self.dimension):            dis += (data_1[i] - data_2[i]) ** 2        return dis ** (1 / 2)        def search_k_nearest(self, data, k=1):        result = []        min_radius = float('inf')        if self.root is None:            return result        def helper(root):            nonlocal result            nonlocal min_radius            if self.size == 0:                return            # leaf node            if root.left is None and root.right is None:                for src_data in root.data:                    dis = self.data_distance(data, src_data)                    if dis <= min_radius:                        if len(result) == k:                            heapq.heappop(result)                        heapq.heappush(result, (-dis, src_data))                        if len(result) == k:                            min_radius = -result[0][0]  # update threshold            else:                if data[root.split] <= root.median[root.split]:                    helper(root.left)                    if data[root.split] - root.median[root.split] >= -min_radius:                        helper(root.right)  # cycle cross rectangle                else:                    helper(root.right)                    if data[root.split] - root.median[root.split] <= min_radius:                        helper(root.left)        helper(self.root)        result.sort(key=(lambda x: -x[0]))        result = [(data, -dis) for dis, data in result]        return result
  • [其他] CVPR 2021 | 让机器想象未见的世界!反事实的零次和开集识别
    本文主要介绍我们组被CVPR 2021接受的论文Counterfactual Zero-Shot and Open-Set Visual Recognition。在这里感谢一下 @王谭的通力合作。论文:https://arxiv.org/abs/2103.00887代码:https://github.com/yue-zhongqi/gcm-cf现有的零次学习和开集识别中,见过和未见过类别间识别率的严重失衡,我们发现这种失衡是因为对未见过类别样本失真的想象。我们提出了一种反事实框架,通过基于样本特征的反事实生成保真,在各个评估数据集下取得了稳定的提升。主要优势:我们提出的GCM-CF是一个见过/未见过类别的二元分类器,二元分类后可以适用任何监督学习(在见过类别上)和零次学习算法(在未见过类别上);所提出的反事实生成框架适用于各种生成模型,例如基于VAE、GAN或是Flow的;提供了一种易于实现的两组概念间解耦的算法接下来我会具体的来介绍我们针对的任务,提出的框架,和对应的算法。文章导视:第一节:零次学习和开集识别第二节:反事实生成框架第三节:提出的GCM-CF算法第四节:实验第一节:零次学习和开集识别很多人都认识羚羊和貘这两种动物(如上图所示),那么一个鼻子像貘的羚羊长得什么样呢?可能大家能想象出来一个类似于图右的动物(它叫高鼻羚羊)。在上面的过程中,我们就是在做零次学习(Zero-Shot Learning, ZSL):虽然我们没见过高鼻羚羊,但是通过现有的关于羚羊和貘的知识,我们就能想象出来这个未见类别的样子,相当于认识了这个动物。事实上,这种将已有知识泛化到未见事物上的能力,正是人能够快速学习的一个重要原因。我们再来看一个路牌的例子,我们很容易就认出左边的两个路牌是熟悉的、见过的,而右边的则是一个很奇怪的没见过的路牌。人类很容易就能完成这样的开集识别(Open-Set Recognition, OSR),因为我们不仅对于见过样本的熟悉,也有对未知世界的认知能力,使得我们知道见过和未见之间的边界。在机器学习当中,这两个任务的定义如上图所示。零次学习训练集提供类别集合 s上面的图片,除了每张图片的类别标签,每个类别还额外有一个属性特征(attribute)来描述这个类的特点(比如有翅膀,圆脸等等),测试的时候有两种设定:在Conventional ZSL下全部是未见类别 u中的图片,并且测试的时候也会给定u 类别的dense label,而在Generalized ZSL中测试集会有 s和 u中的图片。开集识别的训练集则和普通的监督学习没有差别,只是在测试的时候会有训练未见过类别的样本,分类器除了正确识别见过的类,还要将未见过的类标成“未知”。现有的ZSL和OSR的主要方法是基于生成的,比如ZSL中用未见类别的属性特征生成图片,然后在image space进行比较。然而生成模型会自然的偏向见过的训练集,使得对于未见类别的想象失真了(这其实是因为属性特征的entanglement,这里我不详细展开,大家可以参考一下论文)。比如训练的时候见过大象的长鼻子,而去想象没见过的貘的长鼻子的时候,就会想象成大象的鼻子。下边的图展现了这种失真:红色是训练集里面的样本,蓝色是ground-truth的未见过类别的样本,绿色是现有方法对未见过类别的想象,这些想象已经脱离了样本空间,既不像见过的类,也不像没见过的类(绿色的点偏离了蓝色和红色的点)。这就解释了为什么见过和未见过类别的识别率会失衡了:用绿色和红色样本学习的分类器(黑色虚线)牺牲了未见过类的recall来提高见过类的recall。第二节 反事实生成框架那么如何在想像的时候保真?我们来思考一下人是怎么想像的:在想像一个古代生物的样子时候,我们会基于它的化石骨架(图左);在想象动画世界的一个场景的时候,我们会参考现实世界(图右)。这些想象其实本质是一种反事实推理(counterfactual inference),给定这样的化石(fact),如果它还活着(counterfact),会是什么样子呢?给定现实世界的某个场景,如果这个场景到了动画世界,它是什么样子呢?我们的想象,通过建立在fact的基石上,就变得合情合理而非**行空。反事实生成和现有生成模型的最大区别就是基于了特定的样本特征(fact)来进行生成,而非高斯噪声。具体过程如上图所示,对于一个图片 ,我们通过encoder 拿到这个图片的样本特征  (比如front-view,walking等),基于这个样本特征 (fact)和不同的类别特征 (counterfact),我们可以生成不同类别的反事实图片 (front-view,walking的猫,羊和鸡等等)。直觉上我们知道,因为反事实生成的猫、羊和鸡的图片和 x不像, 那么 x肯定不属于这三个类别。这种直觉其实是有理论支持的---叫做反事实一致性(Counterfactual Consistency Rule),通俗的解释就是counterfact和fact重合时,得到的结果就是factual的结果,比如fact是昨天吃冰淇凌拉肚子,那么反事实问题“如果我昨天吃冰淇凌会怎么样呢?”的答案就是拉肚子。如何通过consistency rule解决ZSL和OSR呢第三节 GCM-CF算法我们的GCM-CF算法流程由上图概括,它本质上是一个基于consistency rule的二元分类器,去判断某个样本是属于见过还是没见过的类。训练的时候我们学习一个GCM(训练过程等下会具体讲)。测试的时候,对于每个样本  ,我们用上一节介绍的步骤进行反事实生成:用这个样本自己的  ,拼上不同的类别特征  ,然后用  生成 x。这样生成的样本可以证明是“保真”(Counterfactual Faithful)的,也就是在样本空间里面,那么我们就能够用样本空间当中的量度去比较 x和生成的  x,从而用consistency rule判断 x是属于见过的还是没见过的类。具体到任务中,在ZSL里面,我们用未见过类别的attribute生成反事实样本,然后用训练集的样本(见过的类)和生成的样本(未见过的类)训练一个线性分类器,对输入样本 进行分类后,我们取见过类和未见过类概率的top-K的平均值。如果未见过类上的平均值较小,我们就认为样本不像未见过的类(not consistent),把这个样本标注成属于见过的类,并使用在见过类的样本上面监督学习的分类器来分类(这其实是基于consistency rule的换质位推理,具体见论文);反之如果consistent,就标注为为见过的类,然后用任何Conventional ZSL的算法对其分类。在OSR里面,因为没有未见类别的信息,我们用见过类的one-hot label(图中  )作为 生成反事实样本,如果 x和生成的样本在欧式距离下都很远(not consistent),就认为 x 属于未见过的类,并标为“未知”,反之则用监督学习的分类器即可。
  • [应用实践] MindInsight在ModelArts上使用教程
           MindInsight作为一个可视化工具,可以直观的看到模型调试过程中的各种信息,官网安装和使用教程可见链接安装教程https://gitee.com/mindspore/mindinsight/blob/r1.2/README_CN.md使用教程https://www.mindspore.cn/tutorial/training/zh-CN/r1.2/advanced_use/visualization_tutorials.html教程中主要介绍了在本地服务器安装和使用教程,在ModelArts上的使用教程却没有说明,这里给大家介绍一下。1.首先依旧是要按照官网使用说明,在代码中使用SummaryCollector接口收集网络中的数据需要注意的是,由于在ModelArts上,训练的结果首先都是要存在云环境的cache中,只有最后训练结束才会统一调用下面这个接口才能把cache中的输出copy到OBS桶中,这和checkpoint需要copy出来的原理一样。否则在ModelArts上训练结束后,OBS就没有任何输出。2.在云上环境创建可视化作业3.在创建的过程中,按照要求填写一下信息,其中训练输出位置就选择你在obs桶中summary dir的路径4.等该作业运行起来后,就可以点击作业名,查看自己的训练看板这里鼓励大家可以多去试一试,体验一下这个工具,提高自己的开发和调参的效率
  • [其他] LV-ViT:训练视觉Transformer
    paper: https://arxiv.org/abs/2104.10858Code: https://github.com/zihangJiang/TokenLabeling本文是新加坡国立大学&字节跳动的研究员在Transformer方面的最新研究成果。本文目标不在于提出一种新颖的Transofrmer架构,而是探索了用于提升ViT性能的各种训练技巧。通过一系列实验对比、改进与组合,本文所提方案取得了SOTA方案,超越了EfficientNet、T2TViT、DeiT、Swin Transformer、CaiT等方案。以26M参数量的ViT为例,所提方案在ImageNet上可以取得84.4%的top1精度;当参数量扩展到56M/150M时,模型性能可以进一步提升到85.4%/86.2%,且无需额外数据。Abstract本文为ImageNet分类任务中的Vision Transformer(ViT)提供了一个强基线方案。尽管ViT在ImageNet任务中取得了非常好的结果,但它们的性能距离强效CNN仍存在差距。本文目标不在于提出一种新颖的Transofrmer架构,而是探索了用于提升ViT性能的各种训练技巧。本文结果表明:通过简单调节ViT的架构并引入token labeling,本文所提方案既可以取得比CNN与其他Transformer更佳的性能(同等参数量与计算量)。以26M参数量的ViT为例,所提方案在ImageNet上可以取得84.4%的top1精度;当参数量扩展到56M/150M时,模型性能可以进一步提升到85.4%/86.2%,且无需额外数据。
  • [其他问题] 高校教学问题:Mindspore训练的模型,在Atlas 200DK上推理应用错误
    各位专家好!我在电子科大参与共建课程,非常希望在课程中做到 全流程 的华为AI实践,即在910或ModelArts上用MindSpore训练的AIR模型,转换为OM模型部署到310上实现推理应用。经过了一周多的探索,仍未实现,目前只剩下2周就结课了,希望寻求帮助。我目前的做法如下:1)在910上,训练 https://gitee.com/mindspore/mindspore.git 中的 vgg16,数据集为cifar10,转为om模型:atc --input_shape="input:1,3,224,224" --framework=1 --model=./vgg16.air --output=./vgg16 --input_format=NCHW --soc_version=Ascend3102)在310上,使用 https://gitee.com/ascend/samples.git 中的  vgg16_cat_dog_picture pyCAL示例,遇到推理错误,日志显示模型参数不对。如果采用TF的模型转换是可以正常运行的( atc --output_type=FP32 --input_shape="input_1:1,224,224,3"  --input_format=NHWC --output="vgg16_cat_dog" --soc_version=Ascend310 --insert_op_conf=insert_op.cfg --framework=3 --model="./vgg16_cat_dog.pb" )3)问题处在从AIR到OM转换的参数问题,还是推理前的输入图片预处理过程不匹配呢,不知该如何修改,或者相关的权威开发文档资源;4)另外,我还非常希望以LeNet为例实现 全流程实践,一直也未能实现。LeNet的Air模型转换为OM,在310上实现推理应用,实现给定的单张图片的分类。TF中处比较简洁,但我基于黑白图像上色的示例也未能成功。全流程 的华为AI实践我认为更能激发学生的实践兴趣,希望有从简单到复杂的相关案例,非常感谢!
  • [技术干货] MFCC声学特征
    01MFCC简介MFCC是Mel-Frequency Cepstral Coefficients的缩写,顾名思义MFCC特征提取包含两个关键步骤:转化到梅尔频率,然后进行倒谱分析Mel频率倒谱系数的缩写。Mel频率是基于人耳听觉特性提出来的,它与Hz频率成非线性对应关系。Mel频率倒谱系数(MFCC)则是利用它们之间的这种关系,计算得到的Hz频谱特征02MFCC提取流程MFCC参数的提取包括以下几个步骤:预滤波:CODEC前端带宽为300-3400Hz的抗混叠滤波器。A/D变换:8kHz的采样频率,12bit的线性量化精度。预加重:通过一个一阶有限激励响应高通滤波器,使信号的频谱变得平坦,不易受到有限字长效应的影响。分帧:根据语音的短时平稳特性,语音可以以帧为单位进行处理,实验中选取的语音帧长为32ms,帧叠为16ms。加窗:采用哈明窗对一帧语音加窗,以减小吉布斯效应的影响。快速傅立叶变换(Fast Fourier Transformation, FFT):将时域信号变换成为信号的功率谱。三角窗滤波:用一组Mel频标上线性分布的三角窗滤波器(共24个三角窗滤波器),对信号的功率谱滤波,每一个三角窗滤波器覆盖的范围都近似于人耳的一个临界带宽,以此来模拟人耳的掩蔽效应。求对数:三角窗滤波器组的输出求取对数,可以得到近似于同态变换的结果。离散余弦变换(Discrete Cosine Transformation, DCT):去除各维信号之间的相关性,将信号映射到低维空间。谱加权:由于倒谱的低阶参数易受说话人特性、信道特性等的影响,而高阶参数的分辨能力比较低,所以需要进行谱加权,抑制其低阶和高阶参数。倒谱均值减(Cepstrum Mean Subtraction, CMS):CMS可以有效地减小语音输入信道对特征参数的影响。差分参数:大量实验表明,在语音特征中加入表征语音动态特性的差分参数,能够提高系统的识别性能。在本系统中,我们也用到了MFCC参数的一阶差分参数和二阶差分参数。短时能量:语音的短时能量也是重要的特征参数,本系统中我们采用了语音的短时归一化对数能量及其一阶差分、二阶差分参数。MFCC提取一般流程 模式匹配 和语言处理 通过语音特征分析以后接下来就是模式匹配和语言处理声学模型是识别系统的底层模型,并且是语音识别系统中最关键的一部分。声学模型的目的是提供一种有效的方法计算语音的特征矢量序列和每个发音模板之间的距离。声学模型的设计和语言发音特点密切相关。声学模型单元大小(字发音模型、半音节模型或音素模型)对语音训练数据量大小、系统识别率,以及灵活性有较大的影响。必须根据不同语言的特点、识别系统词汇量的大小决定识别单元的大小。语言模型对中、大词汇量的语音识别系统特别重要。当分类发生错误时可以根据语言学模型、语法结构、语义学进行判断纠正,特别是一些同音字则必须通过上下文结构才能确定词义。语言学理论包括语义结构、语法规则、语言的数学描述模型等有关方面。目前比较成功的语言模型通常是采用统计语法的语言模型与基于规则语法结构命令语言模型。语法结构可以限定不同词之间的相互连接关系,减少了识别系统的搜索空间,这有利于提高系统的识别。语音识别过程实际上是一种认识过程。就像人们听语音时,并不把语音和语言的语法结构、语义结构分开来,因为当语音发音模糊时人们可以用这些知识来指导对语言的理解过程,但是对机器来说,识别系统也要利用这些方面的知识,只是如何有效地描述这些语法和语义还有困难:小词汇量语音识别系统。通常包括几十个词的语音识别系统。中等词汇量的语音识别系统。通常包括几百个词至上千个词的识别系统。大词汇量语音识别系统。通常包括几千至几万个词的语音识别系统。这些不同的限制也确定了语音识别系统的困难度。模式匹配部是语音识别系统的关键组成部分,它一般采用“基于模式匹配方式的语音识别技术”或者采用“基于统计模型方式的语音识别技术”。前者主要是指“动态时间规整(DTW法”,后者主要是指“隐马尔可夫(HMM)法”。隐马尔可夫模型(HMM)是语音信号处理中的一种统计模型,是由Markov链演变来的,所以它是基于参数模型的统计识别方法。由于其模式库是通过反复训练形成的与训练输出信号吻合概率最大的最佳模型参数而不是预先储存好的模式样本,且其识别过程中运用待识别语音序列与HMM参数之间的似然概率达到最大值所对应的最佳状态序列作为识别输出,因此是较理想的语音识别模型。动态时间归整)算法:在孤立词语音识别中,最为简单有效的方法是采用DTW(Dynamic Time Warping,动态时间归整)算法,该算法基于动态规划(DP)的思想,解决了发音长短不一的模板匹配问题,是语音识别中出现较早、较为经典的一种算法,用于孤立词识别。HMM算法在训练阶段需要提供大量的语音数据,通过反复计算才能得到模型参数,而DTW算法的训练中几乎不需要额外的计算。所以在孤立词语音识别中,DTW算法仍然得到广泛的应用。小结:语音识别在移动终端上的应用最为火热,语音对话机器人、智能音箱、语音助手、互动工具等层出不穷,许多互联网公司纷纷投入人力、物力和财力展开此方面的研究和应用。语音识别技术也将进入工业、家电、通信、汽车电子、医疗、家庭服务、消费电子产品等各个领域。尤其是在智能家居系统中语音识别将成为人工智能在家庭重要的入口,同时,未来随着手持设备的小型化,智能穿戴化也将成为语音识别技术的重要应用领域。 
  • [其他] DL:LSTM如何实现长短期记忆
    循环神经网络(RNN) 循环神经网络(Recurrent Neural Network,RNN)是一类具有短期记忆能力的神经网络。在循环神经网络中,神经元不但可以接受其它神经元的信息,也可以接受自身的信息,形成具有环路的网络结构。 梯度爆炸和梯度消失 如果从数学的角度来理解,一般结构的循环神经网络中,网络的状态之间是非线性的关系,并且参数 w 在每个时间步共享,这是导致梯度爆炸和梯度消失的根本原因。 无论是梯度消失,还是梯度爆炸,都是技术实践上的bug,而不是理论上的 BUG首先需要明确的是,RNN 中的梯度消失/梯度爆炸和普通的 MLP 或者深层 CNN 中梯度消失/梯度爆炸的含义不一样。MLP/CNN 中不同的层有不同的参数,各是各的梯度;而 RNN 中同样的权重在各个时间步共享,最终的梯度 g=各个时间步的梯度 gt的和。RNN 中总的梯度是不会消失的。即便梯度越传越弱,那也只是远距离的梯度消失,由于近距离的梯度不会消失,所有梯度之和便不会消失。RNN 所谓梯度消失的真正含义是,梯度被近距离梯度主导,导致模型难以学到远距离的依赖关系。梯度爆炸从技术上相比梯度消失更好解决,因此,很少有人大篇幅去论证这个问题。梯度爆炸最常用的解决方案是梯度截断:逐元素的截断参数梯度和截断梯度的范数。第二种方案可以确保截断后的梯度仍然是在正确的梯度方向上。但是实践表明:两种方式的效果相近。因为逐元素的梯度截断时,梯度更新的方向不仅不再是真实梯度方向,甚至也不是 mini-batch 的梯度方向。但是它仍然是一个使得目标值下降的方向。长程依赖问题 虽然简单循环网络理论上可以建立长时间间隔的状态之间的依赖关系,但是由于梯度爆炸或消失问题,实际上只能学习到短期的依赖关系。这样,如果时刻 t的输出yt依赖于时刻k的输入 xk,当间隔t-k比较大时,简单神经网络很难建模这种长距离的依赖关系,称为长程依赖问题(Long-Term Dependencies Problem)。 LSTM 为了改善循环神经网络的长程依赖问题,一种非常好的解决方案是引入门控机制来控制信息的累积速度,包括有选择地加入新的信息和有选择地遗忘之前累积的信息。 长短期记忆(Long Short-Term Memory,LSTM)网络[Gers 等人; Hochreiter 等人,2000; 1997] 是循环神经网络的一个变体,可以有效地解决简单循环神经网络的梯度爆炸或消失问题。 与传统的 RNN 相比,LSTM 依然是基于循环机制,只不过对内部的结果进行了更加精细的设计。LSTM 中梯度的传播有很多条路径,关键在于穿过记忆单元的状态 的路径,其上面只有一些少量的线**互(逐元素乘法和加法),梯度流最稳定,信息在上面流动保持不变会变得容易。 但是其他路径上梯度流与普通 RNN 类似,照样会发生相同的权重矩阵反复连乘,所以依然会爆炸或者消失。由于总的远距离梯度 = 各条路径的远距离梯度之和,即便其他远距离路径梯度消失了,只要保证有一条远距离路径(就是上面说的那条路径)梯度不消失,总的远距离梯度就不会消失(正常梯度 + 消失梯度 = 正常梯度)。因此 LSTM 通过改善一条路径上的梯度问题拯救了总体的远距离梯度。
  • [其他] modelarts中的ResNet_v1_50预置算法使用总结
    这个是上AI Gallery的一个新算法,使用说明如下:https://support.huaweicloud.com/bestpractice-modelarts/modelarts_10_0025.html这里做一个使用总结首先是数据准备,然后是订阅算法,再就是训练任务,并导入模型部署上线。说到数据准备,想到物联网华为的叫法是1+N,1是指一个OS,N是指N个组件那这里做AI,也可以说1+N,1是指一个modelarts,N是指N个配合服务,比如obs提供对象存储、aiGallery市场提供素材...数据也是要做版本控制的,这个功能是必要的,因为你很有可能不是一次把数据全部准备好,所以要有版本控制,后面加数据、删数据管理很有条理有版本控制,就要有发布,数据集要发布后才能在后面使用算法到aiGallery市场里订阅然后有数据、有算法后,在这2者的基础上创建训练作业训练结束后的输出是模型,然后就是导入模型并部署为在线服务好了,总结下来好像没有任何一个地方是有难度的,差别只是你熟练还是不熟练...