HDC2021技术分论坛:HarmonyOS内核技术大公开

OpenHarmony(鸿蒙南向开发)——标准系统内核(Linux)【Enhanced SWAP特性】 ESwap(Enhanced Swap)提供了自定义新增存储分区作为内存交换分区的能力,并创建了一个常驻进程zswapd将 ZRAM 压缩后的匿名页加密换出到ESwap存储分区,从而能完全的空出一块可用内存,以此来达到维持Memavailable水线的目标。同时,配合这个回收机制,在整个内存框架上进行改进,优化匿名页和文件页的回收效率,并且使两者的回收比例更加合理以避免过度回收导致的refault问题造成卡顿现象。 阅读详情

作者:jikecheng,miaoxie,HarmonyOS内核技术专家

HarmonyOS整体框架分为四个层级,如图1所示。从上到下,依次为:第一层是应用层,主要涵盖系统应用、Launcher、设置,以及三方应用。第二层是框架层,提供基础UI框架、用户程序框架以及能力模块框架。第三层是系统服务层,让HarmonyOS具有分布式流转负载的能力。大家看到的高速多设备协同能力就是由该层级提供。

而承载整个操作系统,同时发挥芯片算力的基石就沉淀在第四层——内核层。宏观来说,内核的主要工作包含芯片资源管理、软件任务调度,以及衔接用户空间与系统调用能力。

​图1 HarmonyOS整体框架

本期,我们要重点给大家讲一讲HarmonyOS的内核层。

目录

一、HarmonyOS内核构成

二、高能效CPU资源调度

三、Hyperhold内存管理引擎

四、高效的文件系统

五、未来演进方向


一、HarmonyOS内核构成


为了支撑HarmonyOS在多设备、多场景下的性能表现,内核主要由三部分组成,如下图所示:

图2 内核的组成

  • HarmonyOS内核组件:具有智慧化资源管理能力的内核组件,包括CPU/GPU资源管理,内存管理,IO调度管理以及高效的文件系统等。
  • 标准的Linux内核:兼容了LTS Linux主线版本,做好外围生态的对接。
  • 硬件平台BSP:面向各种不同芯片与硬件平台(包含1+8+N的多种设备)的BSP(board support package,板级支撑包)基础能力。

本期要为大家介绍的就是HarmonyOS内核组件的三项核心技术:高能效CPU资源调度、Hyperhold内存管理引擎和高效的文件系统。下面为大家一一揭晓~

二、高能效CPU资源调度


业界多数的操作系统都是基于标准的Linux内核开发的。传统的Linux内核,早期用于服务器和PC设备,与我们现在用于手机、平板等的交互式内核相比,它们的设计理念和资源管理方式有所不同。以CPU资源为例,传统的Linux内核存在以下典型问题:

1. 同优先级的业务过多,每次调度都不一定选择到关键进程。

传统的Linux内核偏向于在多用户的场景下公平地分配资源。比较明显的特征是,多个用户并发访问,并发使用公共资源。由于同优先级的业务比较多,每次任务调度不一定能够选择到关键进程。举个例子,当设备后台存在多个应用或者服务任务时,系统中和用户交互最敏感的渲染任务没法即时得到调度资源,导致设备会高概率出现使用不流畅或者点击无响应的现象,也就是咱们平时常说的随机卡顿。

2. 选择最优能效的CPU资源时间过长,CPU资源选择过度。

传统的Linux内核选择算力的流程,是一个慢速爬坡的过程。任务调度必须经过选择CPU核簇、负载均衡、选择频点等一系列流程。其漫长的过程,极易导致任务调度错过调度窗口,出现算力供给不足的现象。

为了解决以上问题,HarmonyOS内核提供了全栈式的调度框架,如下图所示:

图3 HarmonyOS调度管理框架

HarmonyOS调度管理框架有以下特点:

● 任务按优先级调度

对现有系统任务进行严格级别划分,在线标记与用户的操作体验直接相关的关键进程和关联任务,优先调度关键任务。

● 依据CPU负载情况选择最优任务分配

我们会动态检测不同CPU的负载,保证当前CPU有足够的算力提供。

● 选择最优频点实现高能效

我们提供了频点与性能、功耗之间的帕累托最优模型。每次任务,我们都能够快速选择系统最优的频点组合方式,实现最优能效。

经过试验,HarmonyOS的全栈式调度框架可以帮助用户获得在多场景(尤其是游戏场景)下持续且稳定的高帧率体验。

三、Hyperhold内存管理引擎


对于内存管理,由于开源生态的不限制,导致应用开发的内存使用野蛮生长。设备长时间使用后,可回收内存越来越低。产生这个问题的原因有两个:

1. 传统内存数据冷热管理,无法感知业务特性

尽管Linux内核提供了很多的内存回收机制,然而每种内存回收都会有相应的系统代价。比如,回收文件页面后,如果系统需要二次加载这部分数据,需要从底层器件Flash里面把数据读回来,这会引起Flash随机IO读的现象。对IO操作来说,Flash器件速度和当前读取任务是随机读还是顺序读有着很强的相关性,随机读容易导致系统随机卡顿。再比如,回收匿名页面后,如果系统需要二次加载这部分数据,会触发ZRAM解压,消耗CPU。

另外,由于应用的内存负载越来越重,当系统冷热数据识别不恰当,会导致系统的CPU负载长期处于高负载状态,最终影响前台应用的基础性能。

2. 传统共享式内存分配,无法感知数据重要性

从内存分配角度看,现在的操作系统基本采用统一接口的分配方式,使得手机里面多个进程或多个业务会共用一块内存区域。数据回收时,会频繁出现数据搬移,以及内存震荡的现象。这个现象会加重内核管理内存的开销。

为了解决传统Linux内核的内存问题,HarmonyOS提供了Hyperhold内存管理引擎。Hyperhold内存管理引擎打通了上层系统到内核的调用栈,让内核完整感知到应用的整个生命周期,并结合应用生命周期以及周期内的数据访问特征,对每一块内存数据做合理的内存管理。同时,为了降低内核管理内存的开销,我们提出了自研的压缩体系,包括多线程压缩、自研的压缩算法。为了进一步扩大可用空间,我们在Flash器件上开出了一块可交换区,结合自研的聚合换出和内存标记技术,充分利用Flash器件的性能。

图4 Hyperhold内存管理引擎

经过试验, Hyperhold内存管理引擎可以让应用在后台的驻留能力提升50%以上,用户可以明显感知到后台应用的保活率有大幅提升。

四、高效的文件系统


存储处于整个缓存体系下的最慢路径,容易成为系统性能瓶颈。不仅如此,由于存储器件碎片化的问题,存储还容易出现越用越慢的难题。其次,随着系统的发展,系统占用存储越来越多。而在多设备流转的场景下,分布式文件系统的高效转存能力显得尤为重要。

为应对上述问题,HarmonyOS提供了高效的自研文件系统体系。从第一代的eF2FS到最新的HMDFS,文件系统逐步解决了碎片化问题、容量问题与多设备流转问题。

图5 HarmonyOS文件系统

下面我们从第一代的eF2FS到最新的HMDFS,依次介绍HarmonyOS文件系统的技术特点。

1. 第1代数据盘eF2FS:智能感知空间管理,改善越用越慢

面对存储越用越慢的业界难题,我们通过数据类型感知的多流算法和空间感知的分配算法,减少碎片产生。同时,通过高效、业务感知的两层智能垃圾空间回收,实现智能感知空间管理。

下面我们通过一个动图,更好地了解HarmonyOS的空间管理机制。


2. 系统盘EROFS:变长压缩,支持压缩与性能双赢 
 

针对系统占用存储越来越多的问题,业界其他操作系统也采取过改进措施,比如squashfs采用“定长输入,变长输出”的压缩策略,但会存在读放大的问题。而我们的EROFS(Extendable Read-Only File System,超级文件系统)采用“变长输入,定长输出”的压缩策略,尽可能地将不等长的文件块压缩成一个等长的存储块进行存储。这样,我们访问任何文件块,只需读取一个存储块,减少了无效读取。除此之外,我们在解压性能和IO流程上也做了优化。

图6 系统盘EROFS的变长压缩

通过以上关键技术,系统盘EROFS的性能得到大幅提升:

  • 随机读性能平均提升20%。
  • 系统初始空间相比Ext4节省2GB,相当于用户可以多存1000张照片或500首歌曲。
  • 升级包大小下降约5%-10%,升级时间缩短约20%。


3. 跨设备HMDFS:“批流”结合的分布式文件系统

HarmonyOS同一套系统能力、适配多种终端形态的分布式理念,就要求我们有一套数据流转的底座——分布式文件系统HMDFS。

图7 HMDFS

应对多设备流转,HMDFS提供了多种文件系统能力,包括:

  • 文件类型聚合
  • 高效的缓存管理
  • 批处理接口
  • 分布式的权限管控
  • 高效传输
  • 数据一致性管理


通过上述一系列技术的研发与集成,最终实现了现有的跨设备高效文件系统,为用户提供流畅的分布式体验。

五、未来演进方向


上面就是我们本期要介绍的HarmonyOS内核核心技术内容了。未来还有很多方向值得我们继续探索,下图列出了HarmonyOS内核的未来演进方向。

图8 未来演进方向

相信经过我们不断的探索,我们能打造出更好的内核,为大家提供更流畅、体验更好的HarmonyOS!

鸿蒙开发进阶(OpenHarmony)Enhanced SWAP特性规范 ​ ESwap(Enhanced Swap)提供了自定义新增存储分区作为内存交换分区的能力,并创建了一个常驻进程zswapd将ZRAM压缩后的匿名页加密换出到ESwap存储分区,从而能完全的空出一块可用内存,以此来达到维持Memavailable水线的目标。同时,配合这个回收机制,在整个内存框架上进行改进,优化匿名页和文件页的回收效率,并且使两者的回收比例更加合理以避免过度回收导致的refault问题造成卡顿现象。 ​ 阅读详情

相关推荐

鸿蒙Harmony驱动开发:hdc与真机调试

​ 要想开发客户端,真机调试是必须的。要想真机调试,首先得让PC连上设备。对比Android的ADB,华为搞了个hdc(HarmonyOS Device Connector)。 ​

DMZDAMS的博客 3353

HarmonyOS分布式文件系统开发指导

例如:多设备数据流转的场景,设备组网互联之后,设备A上的应用可访问设备B同应用分布式路径下的文件,当期望应用文件被其他设备访问时,只需将文件移动到分布式文件路径即可。但由于设备离线的感知具有延迟,可能会造成部分消息4s超时,因此开发者需要考虑接口的网络超时或一些文件虽然可以看到,但实际设备可能已离线的场景。远端多个设备冲突,以接入本设备ID为顺序,显示设备ID小的同名文件,其他文件被依次重命名。冲突 ,远端文件被重命名,看到的同名文件是本地同名文件,远端文件被重命名。

HarmonyOSDev的博客 1143

鸿蒙系统简介

鸿蒙系统简介

ddsrgaoyi的博客 2590

文件基础服务-分布式文件系统

分布式文件系统(hmdfs,HarmonyOS Distributed File System)提供跨设备的文件访问能力,适用于如下场景:两台设备组网,用户可以利用一台设备上的编辑软件编辑另外一台设备上的文档。平板保存的音乐,车载系统直接可见并可播放。户外拍摄的照片,回家打开平板直接访问原设备拍摄的照片。hmdfs在分布式软总线动态组网的基础上,为网络上各个设备结点提供一个全局一致的访问视图,支持开发者通过基础文件系统的接口进行读写访问,具有高性能、低延时等优点。

kami806783412的博客 2314

大数据Hadoop:HDFS分布式文件系统详解

Hadoop是一个开源的大数据处理框架,而Hadoop分布式文件系统(Hadoop Distributed File System,简称HDFS)是Hadoop的核心组件之一。NameNode负责跟踪数据块的位置信息,并通过心跳机制和周期性的数据块报告来维护DataNode的状态。NameNode是HDFS的主节点,负责管理文件系统的命名空间、文件元数据以及数据块的位置信息。DataNode是HDFS的从节点,用于存储实际的数据块。通过主从架构和数据块的复制方式,HDFS实现了高可用性和容错性。

CodeHeroicX的博客 358

《HarmonyOS实战——前端开发华为鸿蒙系统应用 OpenHarmony JS》

导读:一款“面向未来”、面向全场景(移动办公、运动健康、社交通信、媒体娱乐等)的分布式操作系统 。现已开源,名为 OpenHarmony。2019 年 8 月 9 日,华为在 HDC 开发...

孙叫兽的博客 1万+

华为鸿蒙系统HarmonyOS学习之九:鸿蒙HarmonyOS发展史与未来

华为鸿蒙系统HarmonyOS学习之九:鸿蒙的HarmonyOS发展史与未来

jyl_sh的专栏 1万+

PX4开发环境搭建(Ubuntu1804+QGC+Qt Creator )

文章目录前言一、安装环境二、PX4环境搭建1. 在虚拟机中安装Ubuntu2. 安装PX4环境(1)下载PX4源码:(2) 安装工具链(3) jMAVSim仿真(4) 编译验证三、安装QGC四、安装Qt Creator 前言 在这之前作者完全没接触过PX4,安装过程遇到了很多坑,而且每安装下载一个东西都要等好久,出现问题又要重新开始,前后折腾了四天才弄好,希望此文对大家有所帮助。 一、安装环境 ...

Beyonderwei的博客 9023

华为鸿蒙系统学习笔记1-介绍

华为鸿蒙系统(HarmonyOS)是基于微内核的全场景分布式OS,可按需扩展,实现更广泛的系统安全,主要用于智能物联网,特点是低时延,甚至可到毫秒级乃至亚毫秒级,由华为技术有限公司开发。 华为自研操作系统鸿蒙OS打通了手机、电脑、平板、电视、汽车、智能穿戴等产品,并兼容全部的安卓应用和Web应用的操作系统。 鸿蒙OS发布现场,余承东在现场发布了它的英文名——Harmony OS:鸿蒙用中文的意...

鹿鸣天涯 1万+

从零到一:RagFlow源码架构深度解析与二次开发实战指南

本文深入解析RagFlow源码架构,提供从环境搭建到二次开发的全流程实战指南。作为企业级AI搜索框架,RagFlow通过模块化设计和多模态处理能力,支持自定义智能体开发与文搜文档功能,帮助开发者高效构建智能搜索系统。

w1x2y3的博客 268

提升RAG效果:为何 JSON 格式远胜 Markdown?

在构建强大的 RAG (检索增强生成) 系统时,文档解析是至关重要的第一步。它直接影响着后续的检索效率和生成质量。在众多文档格式中,JSON (JavaScript Object Notation) 格式正逐渐展现出其相对于传统 Markdown 格式的巨大优势。本文将深入探讨 JSON 在 RAG 系统文档解析中的卓越之处,并结合具体案例,让你理解为何 JSON 才是构建下一代智能应用的更优选择。RAG 系统的核心目标是让模型能够利用外部知识库,生成更精准、更贴合实际的答案。

simoncool23的博客 2718

华为鸿蒙系统版本发展史

鸿蒙OS凭借多终端开发IDE,多语言统一编译,分布式架构Kit提供屏幕布局控件以及交互的自动适配,支持控件拖拽,面向预览的可视化编程,从而使开发者可以基于同一工程高效构建多端自动运行App,实现真正的一次开发,多端部署,在跨设备之间实现共享生态。微内核设计的基本思想是简化内核功能,在内核之外的用户态尽可能多地实现系统服务,同时加入相互之间的安全保护。2025年5月8日,华为公司在深圳举办鸿蒙电脑技术与生态沟通会,标志着搭载鸿蒙操作系统的“鸿蒙电脑”正式亮相,国产操作系统在个人电脑(PC)领域实现重要突破。

鹿鸣天涯 8122

点到面点云配准(Point To Plane)算法知识详解和详细推导,C++代码实现

点到面 ICP (Iterative Closest Point) 是在 3D 点云配准中常见的一种变体,通过最小化点到对应面(由法向量定义的局部平面)的距离来提高收敛速度和精度。

qq_36812406的博客 1811

华为鸿蒙系统2.0是什么?Android的升级版?

这次鸿蒙系统2.0的发布给国人带来极大的振奋,虽然有一部分人不断唱衰,觉得是大家被爱国情怀所左右,但大部分人的激动其实原因很简单,人人都知道华为被制裁不是公司级别的竞争,而是国家和国家实力的斡旋。 如果没有这接二连三的制裁,华为的系统自研或许还会晚好些年,要不怎么说压力使人进步呢。华为一直是一个风口浪尖上的公司,有点意思的是在系统没发布时每个人都在猜测系统的名字,以至于后来官方干脆使用传播甚广的鸿蒙作为系统的名字。 都在聊鸿蒙,那鸿蒙是什么? 官方介绍“鸿蒙系统(HongmengOS)是一款.

华科硕士,大厂打工中。编程问题咨询,请私我 2万+

Python 爬虫实战:爬取 B 站 UP 主的全部视频数据

本文详细介绍了基于Python开发B站UP主视频数据爬虫的技术方案。通过分析B站API接口,使用requests库发送HTTP请求并处理JSON数据,结合pandas进行结构化存储。文章重点解决了接口鉴权、分页爬取、反爬策略等核心难点,实现获取视频标题、播放量、点赞数等关键指标。同时强调数据爬取需遵守平台规范,仅限技术研究使用。该方案为B站视频内容分析提供了可靠的数据采集基础,具有实际应用价值。

2503_91057718的博客 2492

Joule 终于会说 ABAP 了:从 ADT 提效到 ABAP AI SDK + ISLM 自建企业级 AI 场景的落地路线

生成结构化摘要(故障现象、初步原因、处理动作、备件消耗)自动给出建议分类(电气、机械、软件、网络)把摘要回写到工单抬头,方便后续统计与知识沉淀如果你用 CAP 来做这类服务,通常会在 Node.js 层封装一个对 AI Hub 的调用,再通过 OData 或 Event 把结果写回 SAP。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 343

华为鸿蒙OS精品资料汇总,持续更新中

鸿蒙OS学习资料整理,持续更新中鸿蒙OS简介鸿蒙OS重点资料分类整理 鸿蒙OS简介 华为在2020.09.10正式发布了HarmonyOS 2.0,引发了IT界学习鸿蒙OS的热潮。本文是对互联网上鸿蒙资料的整理,本人也正在持续学习和更新中。 根据官方的定义,HarmonyOS是一款“面向未来”、面向全场景(移动办公、运动健康、社交通信、媒体娱乐等)的分布式操作系统。在传统的单设备系统能力的基础上,HarmonyOS提出了基于同一套系统能力、适配多种终端形态的分布式理念,能够支持多种终端设备的能力。 鸿蒙OS

qq_31765191的博客 1万+

【第1章>第5节】SOM自组织映射网络的理论学习与MATLAB仿真

自组织映射网络(Self-Organizing Map,SOM)是一种无监督学习的人工神经网络,由芬兰学者Teuvo Kohonen于1981年提出,也被称为Kohonen网络。它的主要功能是将高维输入数据映射到低维(通常是二维)的离散网格上,同时保持输入数据的拓扑结构,即相邻的输入数据在映射后的网格上也相邻。

FPGA/MATLAB学习教程/源码/项目合作开发 403

【推荐】HDC2021华为开发者大会技术分论坛内部课件合集

HDC2021华为开发者大会技术分论坛内部课件合集

unber的博客 705

【技术科普】破解政务跨系统数据壁垒!亘川一网统管平台多源数据同步技术解析

本文解析亘川一网统管平台多源数据同步技术,针对政务跨系统数据壁垒难题,介绍组件的数据采集、校验、审计留痕等核心能力,结合营商环境项目落地案例,对比传统开发模式差异,讲解开源组件的实践价值,为政务项目开发者提供落地参考。

weixin_67440240的博客 635

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

华为升级鸿蒙后东西还在吗,华为鸿蒙系统的重头戏还在后头

2019年华为一场开发者大会(HDC2019),鸿蒙系统(HarmonyOS)脱颖而出,虽然鸿蒙OS现在只用于荣耀电视上,但鸿蒙系统的底层技术采用了微内核分布技术,使得系统运行过程中,数据调用处理时延更低,在同样的电视配置下,搭载华为鸿蒙系统的电视比安卓系统电视反应更快。但商业就是商业,没有太多人情可言,安卓系统进入市场时间较早,采用了开源的战略,迅速占领全球市场。这也是华为鸿蒙系统未来普及过程中...

weixin_30877689的博客 1万+

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

华为手机鸿蒙系统官方下载入口,华为鸿蒙系统官方下载入口

华为鸿蒙系统官方下载入口是华为自主开发的最新操作系统。华为鸿蒙系统官方下载门户优化完善,比安卓系统功能更多,安全性更强。有兴趣的朋友赶紧下载体验一下。华为鸿蒙系统官方下载入口介绍2019年8月9日,华为在HDC.2019开发者大会上正式发布鸿蒙系统。2020年9月10日,华为在HDC如期发布鸿蒙系统2.0。共同开发者大会并为应用开发者发布大屏幕、手表、汽车的Beta版。今年12月将发布手机Beta...

weixin_33093437的博客 6087

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

华为鸿蒙系统学习笔记7-开源(GitHub Awesome-HarmonyOS)

前言 从8月9号鸿蒙HarmonyOS正式发布到今天已经十天了,一个非官方的 GitHub 项目已连日霸榜GitHub。 从2G、3G 的塞班,以及昙花一现的黑莓、阿里 YunOS、KaiOS,到 4G 时代的霸主 Android、iOS,操作系统一直是中国电子产品制造未曾突破的领地。 在华为开发者大会 2019 上,华为消费者业务 CEO 余承东:“鸿蒙系统是全世界第一个面向全场景微内核的...

鹿鸣天涯 1万+

汇聚开发者星星之火,华为鸿蒙系统有希望成为国产之光?

作者|雷架来源 |爱笑的架构师(ID:DancingOnYourCode)头图 | 优快云下载自东方IC鸿蒙系统2.0的发布给国人带来极大的振奋,虽然有一部分人不断唱衰,觉得...

程序人生的博客 4780

harmonyOS(鸿蒙系统)碎片学习(1)

harmonyOS碎片学习!

m0_53240771的博客 1431

华为鸿蒙系统手机怎么下载,华为鸿蒙系统下载-华为鸿蒙系统手机版 v2.0下载-955游戏网...

华为鸿蒙系统手机版简介:HarmonyOS(鸿蒙系统)是一款“面向未来”、面向全场景的分布式操作系统 ,开源项目为OpenHarmony。2019年8月9日,华为在HDC开发者大会上正式发布鸿蒙系统。2020年9月10日,华为在HDC开发者大会上正式发布鸿蒙2.0,并面向应用开发者发布Beta版本。华为鸿蒙系统手机版体会:1在终端操作系统中首次采用分布式体系结构,实现跨终端的无缝协作体验Harmo...

weixin_39608479的博客 885
上一篇: HDC2021技术分论坛:OpenHarmony驱动框架解读和开发实践
下一篇: HDC2021技术分论坛:DevEco Testing,新增分布式测试功能
「已注销」
博客等级 码龄5年 1045粉丝 297原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

「已注销」

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值