HarmonyOS Next 分布式管理权限控制:安全与隐私

【鸿蒙实战开发】HarmonyOS 应用权限管控流程 有很多小伙伴不知道该从哪里开始学习鸿蒙开发技术?也不知道鸿蒙开发的知识点重点掌握的又有哪些?自学时频繁踩坑,导致浪费大量时间。结果还是一知半解。所以有一份实用的鸿蒙(HarmonyOS NEXT)全栈开发资料用来跟着学习是非常有必要的。获取完整版高清学习资料,请点击→鸿蒙全栈开发学习资料(安全链接,请放心点击) 阅读详情

本文旨在深入探讨华为鸿蒙HarmonyOS Next系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。
在当今数字化时代,安全与隐私如同基石般重要,对于HarmonyOS Next的分布式管理服务而言,更是如此。随着设备之间的协作日益紧密,如何确保数据的安全传输、设备的可信交互,成为了开发者和用户共同关注的焦点。今天,就让我们深入探究HarmonyOS Next分布式管理中的权限控制机制,看看它是如何为我们的分布式应用保驾护航的。

一、分布式设备管理的权限体系概述

HarmonyOS Next构建了一套完善的权限体系,旨在确保分布式管理服务中的每一个操作都在安全、可控的范围内进行。这个体系就像是一个严格的门禁系统,只有经过授权的应用和设备才能访问特定的资源和执行相应的操作。
权限分为多个级别,从普通权限到敏感权限,每个级别对应着不同的操作范围和风险程度。例如,一些基本的设备信息查询可能只需要普通权限,而涉及到设备控制、数据传输等操作则可能需要更高级别的权限。这种分级管理机制有助于在保障功能正常使用的同时,最大程度地降低安全风险。

二、权限控制:精准设置与获取权限

(一)权限设置步骤

  1. 确定所需权限:在开发分布式应用时,首先要明确应用需要哪些权限才能正常运行。例如,如果应用需要发现周边设备,就需要申请设备发现权限(如ohos.permission.DISTRIBUTED_DEVICE_DISCOVERY);如果要进行设备信息查询,可能需要获取设备信息读取权限(ohos.permission.READ_DEVICE_INFO)等。这就好比在建造一座房子之前,先规划好需要哪些建筑材料一样重要。
  2. 在配置文件中声明权限:将所需权限在应用的配置文件(如module.json5)中进行声明。以申请分布式数据同步权限(ohos.permission.DISTRIBUTED_DATASYNC)为例,配置如下:
{
    "module": {
        "requestPermissions": [
            {
                "name": "ohos.permission.DISTRIBUTED_DATASYNC",
                "reason": "$string:distributed_permission",
                "usedScene": {
                    "abilities": ["MainAbility"],
                    "when": "inuse"
                }
            }
        ]
    }
}

这里的reason字段用于向用户解释为什么应用需要这个权限,usedScene则指定了权限使用的场景和相关能力。
3. 动态申请权限(如有需要):对于一些敏感权限,除了在配置文件中声明外,还需要在应用运行时动态向用户申请。这是为了让用户充分了解应用将如何使用这些权限,并给予用户自主选择的权利。例如,当应用首次尝试进行设备绑定操作时,可以使用如下代码动态申请权限:

import { common, abilityAccessCtrl } from '@kit.AbilityKit';
let context = getContext(this) as common.UIAbilityContext;
let atManager = abilityAccessCtrl.createAtManager();
try {
    atManager.requestPermissionsFromUser(context, ['ohos.permission.DISTRIBUTED_DEVICE_BIND']).then((data) => {
        console.log('data: ' + JSON.stringify(data));
    }).catch((err: object) => {
        console.log('err: ' + JSON.stringify(err));
    });
} catch (err) {
    console.log('catch err->' + JSON.stringify(err));
}

(二)权限获取与检测

  1. 获取已授予权限列表:应用可以通过相应的接口获取当前已授予的权限列表,以便在运行时根据权限情况调整功能或提供相应的提示。例如,以下代码可以获取当前应用的所有权限:
import { permissionManager } from '@kit.SecurityKit';
permissionManager.getAllPermissions().then((permissions) => {
    console.log('已授予权限列表:');
    permissions.forEach((permission) => {
        console.log(permission.name);
    });
}).catch((error) => {
    console.error('获取权限列表失败:' + error.message);
});
  1. 检测特定权限是否已授予:在执行某些关键操作之前,需要检测特定权限是否已经授予。比如,在进行设备信息查询之前,先检查是否具有设备信息读取权限:
import { permissionManager } from '@kit.SecurityKit';
permissionManager.hasPermission('ohos.permission.READ_DEVICE_INFO').then((hasPermission) => {
    if (hasPermission) {
        console.log('已授予设备信息读取权限,可以进行设备信息查询。');
        // 执行设备信息查询操作
    } else {
        console.log('未授予设备信息读取权限,请先申请权限。');
        // 引导用户申请权限或采取其他相应措施
    }
}).catch((error) => {
    console.error('检测权限失败:' + error.message);
});

三、安全策略:守护设备间通信安全

(一)数据加密传输

为了防止设备间传输的数据被窃取或篡改,HarmonyOS Next采用了强大的数据加密技术。在设备进行通信时,数据会被加密成密文进行传输,只有拥有相应解密密钥的设备才能将其还原为原始数据。这就好比给数据穿上了一层坚固的铠甲,即使在传输过程中被不法分子拦截,他们也无法理解其中的内容。

(二)设备认证与信任机制

在分布式管理中,设备认证是确保设备可信的重要环节。通过设备认证框架,如pin码、碰、扫、靠等方式,设备之间可以相互验证身份,建立信任关系。只有经过认证的设备才能参与分布式业务,从而有效防止恶意设备的入侵。这就像是在一个安全的社区中,只有经过身份验证的居民才能进入,保障了社区的安全与和谐。

(三)安全审计与日志记录

系统会对设备间的交互操作进行安全审计和日志记录,以便及时发现潜在的安全问题并进行追踪和分析。这些日志记录包含了设备的操作行为、权限使用情况等重要信息,就像一个详细的监控系统,为系统管理员和开发者提供了有力的工具,用于监控系统的安全性和排查故障。

四、权限控制的不同应用场景与权限申请流程

应用场景所需权限权限申请流程
设备发现与绑定ohos.permission.DISTRIBUTED_DEVICE_DISCOVERY、ohos.permission.DISTRIBUTED_DEVICE_BIND1. 在配置文件中声明权限。
2. 动态申请权限(如设备绑定操作时),向用户解释申请原因,等待用户授权。
设备信息查询ohos.permission.READ_DEVICE_INFO1. 在配置文件中声明权限。
2. 在应用运行时,检测权限是否已授予,若未授予则引导用户申请或采取相应措施。
分布式数据同步ohos.permission.DISTRIBUTED_DATASYNC1. 在配置文件中声明权限,详细说明权限用途和使用场景。
2. 应用启动时,系统根据配置文件自动申请权限,用户确认授权后即可使用相关功能。
外设共享与控制ohos.permission.DISTRIBUTED_PERIPHERAL_ACCESS、ohos.permission.DISTRIBUTED_DEVICE_CONTROL1. 在配置文件中声明权限。
2. 根据用户操作场景,适时动态申请权限,如用户首次尝试共享打印机时申请相应权限。

五、示例代码:权限申请与检测完整流程

以下是一个综合的示例代码,展示了从权限申请到检测的完整流程,以设备发现和信息查询为例:

import { distributedDeviceManager, permissionManager } from '@kit.DistributedServiceKit';
import { common, abilityAccessCtrl } from '@kit.AbilityKit';
import { BusinessError } from '@kit.BasicServicesKit';
// 申请设备发现和信息查询权限
function requestPermissions() {
    let context = getContext(this) as common.UIAbilityContext;
    let atManager = abilityAccessCtrl.createAtManager();
    try {
        atManager.requestPermissionsFromUser(context, ['ohos.permission.DISTRIBUTED_DEVICE_DISCOVERY', 'ohos.permission.READ_DEVICE_INFO']).then((data) => {
            console.log('权限申请结果:' + JSON.stringify(data));
            // 权限申请成功后,进行设备发现和信息查询操作
            discoverDevicesAndQueryInfo();
        }).catch((err: object) => {
            console.log('权限申请失败:' + JSON.stringify(err));
        });
    } catch (err) {
        console.log('权限申请过程中出错:' + JSON.stringify(err));
    }
}
// 设备发现和信息查询操作
function discoverDevicesAndQueryInfo() {
    try {
        let dmInstance = distributedDeviceManager.createDeviceManager('ohos.samples.jsHelloWorld');
        // 检测设备发现权限是否已授予
        permissionManager.hasPermission('ohos.permission.DISTRIBUTED_DEVICE_DISCOVERY').then((hasDiscoveryPermission) => {
            if (hasDiscoveryPermission) {
                console.log('已授予设备发现权限,开始发现设备...');
                // 执行设备发现操作
                dmInstance.startDiscovering({}, {}).then(() => {
                    console.log('设备发现成功。');
                    // 检测设备信息读取权限是否已授予
                    permissionManager.hasPermission('ohos.permission.READ_DEVICE_INFO').then((hasReadPermission) => {
                        if (hasReadPermission) {
                            console.log('已授予设备信息读取权限,查询设备信息...');
                            // 查询设备信息
                            let deviceInfoList: Array<distributedDeviceManager.DeviceBasicInfo> = dmInstance.getAvailableDeviceListSync();
                            if (deviceInfoList) {
                                deviceInfoList.forEach(device => {
                                    console.log('设备名称:' + device.deviceName);
                                    console.log('设备类型:' + device.deviceType);
                                    console.log('设备ID:' + device.deviceId);
                                    console.log('是否在线:' + (device.online? '是' : '否'));
                                });
                            }
                        } else {
                            console.log('未授予设备信息读取权限,无法查询设备信息。');
                        }
                    }).catch((error) => {
                        console.error('检测设备信息读取权限失败:' + error.message);
                    });
                }).catch((err: BusinessError) => {
                    console.error('设备发现失败:' + err.message);
                });
            } else {
                console.log('未授予设备发现权限,无法发现设备。');
            }
        }).catch((error) => {
            console.error('检测设备发现权限失败:' + error.message);
        });
    } catch(err) {
        let e: BusinessError = err as BusinessError;
        console.error('创建设备管理实例失败:' + e.message);
    }
}
// 调用权限申请函数
requestPermissions();

在这个示例中,首先定义了requestPermissions函数用于申请设备发现和信息查询权限,成功后调用discoverDevicesAndQueryInfo函数进行设备发现和信息查询操作。在discoverDevicesAndQueryInfo函数中,分别检测了设备发现权限和设备信息读取权限,根据权限情况执行相应的操作,并处理可能出现的错误。

六、常见的权限问题与优化策略

(一)权限被拒绝的处理

问题描述:用户在应用请求权限时选择拒绝,导致应用部分功能无法正常使用。
优化策略:
 - 提供友好的提示信息:当权限被拒绝时,应用应弹出详细的提示框,向用户解释为什么需要该权限以及拒绝权限可能导致的功能受限情况。例如,“您拒绝了设备发现权限,将无法搜索和连接周边设备,是否重新考虑授予权限?”并提供“去设置”按钮,方便用户直接跳转到系统设置页面重新授权。
 - 引导用户手动开启权限:在提示信息中,明确告知用户如何手动开启权限,如“您可以在系统设置 - 应用管理 - [应用名称] - 权限中,手动开启设备发现权限。”

(二)权限申请时机优化

问题描述:如果在应用启动时一次性申请过多权限,可能会引起用户反感,降低用户体验。
优化策略:
 - 按需申请权限:根据应用的功能流程,在用户实际需要使用某个功能时,再申请相应的权限。例如,当用户点击设备发现按钮时,才申请设备发现权限;当用户尝试查询设备信息时,再申请设备信息读取权限。
 - 提前告知权限用途:在用户操作即将触发权限申请之前,提前弹出一个简短的提示框,告知用户接下来的操作需要申请某个权限以及该权限的用途,让用户有心理准备,提高用户授权的可能性。

(三)权限冲突与兼容性问题

问题描述:不同设备或系统版本可能对权限的支持和管理方式存在差异,导致应用在某些设备上出现权限相关的兼容性问题。
优化策略:
 - 进行兼容性测试:在应用发布前,在多种不同型号、不同系统版本的设备上进行全面的权限兼容性测试,及时发现并解决可能出现的问题。
 - 动态适配权限管理:根据设备的系统版本和特性,采用不同的权限申请和管理策略。例如,对于某些旧版本系统可能不支持动态权限申请,需要在应用安装时就明确告知用户所需权限;而对于新版本系统,可以充分利用其更灵活的权限管理机制,提供更好的用户体验。
HarmonyOS Next的分布式管理权限控制机制为分布式应用的安全与隐私提供了坚实的保障。通过合理的权限设置、严格的安全策略以及有效的问题解决策略,我们开发者能够构建出更加安全、可靠的分布式应用,让用户在享受设备协同带来的便捷的同时,无需担忧数据安全和隐私问题。希望本文能够帮助开发者更好地理解和应用这些权限控制技术,为HarmonyOS Next生态系统的繁荣贡献力量。如果大家在开发过程中遇到其他问题或有更好的经验分享,欢迎随时交流哦!让我们一起打造更加安全、智能的分布式应用世界!哈哈,加油吧,各位开发者小伙伴们!

【鸿蒙开发示例代码】HMOS世界 基于分层架构和模块化设计的最佳实践,结合HarmonyOS"一次开发,多端部署"的能力,实现一款承载HarmonyOS最新技术特性,赋能HarmonyOS开发者的应用。探索学习溪村挑战赛活动我的。 阅读详情

相关推荐

实战鸿蒙,实现一款权限请求框架

鸿蒙战略胜利,目前鸿蒙开发是一个急需要人才的缺口,在未来几年势必会有大量的鸿蒙岗位出现,目前所存在的鸿蒙岗位也是给出了相当高的薪资。事实证明,鸿蒙开发确实是一块香饽饽。作为华为自家的操作系统,正在逐步扩张市场份额。想要转行或者入行的朋友可以下手了。在这里,为大家提供一份我整理的鸿蒙开发学习资料,涵盖了UI开发、web、应用模型多个知识点,有需要的朋友可以扫描下方二维码,免费获取更多相关资料。

weixin_48091641的博客 1214

鸿蒙开发入门:应用配置文件概述(二)

这里整理了一份《鸿蒙零基础入门学习指南》,希望能对那些想要学习鸿蒙,但是有没有方向的人提供一点帮助。本文档适用于HarmonyOS应用开发的初学者(由于文档内容过多,因此为了避免影响到大家的阅读体验,在此只以截图展示部分内容,详细完整版的看文末有免费的获取方式!

Android23333的博客 2876

零基础开始学习鸿蒙开发-登录界面获取参数的值,并且发送参数请求后台登录,经过后台校验即可登录成功

Datathis.msg = "成功!this.msg ="请求失败!=user){res.success(user,"成功!");logger.info("登录成功!");

qq_36973384的博客 2692

鸿蒙开发:申请授权权限

还是那句话,在申请权限的时候,应当严格遵循最小权限原则,结合动态申请和清晰的用户引导,避免给用户带来不好体验,同样,遵循,在使用到权限的时候再去申请,切记,过前进行申请。

知足常乐 1805

【鸿蒙系统开发技术案例】-第6课时:HMOS世界

基于分层架构和模块化设计的最佳实践,结合HarmonyOS"一次开发,多端部署"的能力,实现一款承载HarmonyOS最新技术特性,赋能HarmonyOS开发者的应用。

xzs51job的专栏 513

从零到一:构建嵌入式Arm-Linux的Qt MQTT通信框架全指南

本文详细指导如何在嵌入式Arm-Linux平台上从零构建Qt MQTT通信框架,涵盖交叉编译、环境配置、依赖库管理及性能优化。重点针对32位Arm架构,提供完整的工具链配置、编译步骤和实战部署方案,适用于物联网和工业控制等场景。

w8x9y0z1的博客 1000

鸿蒙原生应用开发——分布式数据对象

在可信组网环境下,多个相互组网认证的设备将各自创建的对象加入同一个 sessionId,使得加入的多个数据对象之间可以同步数据,也就是说,当某一数据对象属性发生变更时,其他数据对象会检测到这一变更,同时将自身属性更新。此时,该 sessionId 下的所有数据对象属性相同,这样的数据对象称之为分布式数据对象。此外,分布式数据对象可以被动退出 sessionId,当分布式数据对象退出 sessionId 后,该对象将检测不到其他对象的变更。

HarmonyOSDev的博客 2214

基因的富集分析

通过RNA_seq差异表达分析等获得一组基因,想要进一步了解这些基因可能参与哪些生物学过程,具有哪些功能,一般就会用到基因的富集分析了。现在小麦基因注释信息已经可以获得,目前来看包括两套。一个是TGACv1,另一个就是IWGSC1.0。需要用到一个叫“clusterProfiler”的R包。下面用到的数据集来自TGACv1。1、安装source("https://bioconductor.org/b

xxxxx 1万+

HarmonyOS NEXT 分布式管理权限控制:安全与隐私

通过合理的权限设置、严格的安全策略以及有效的问题解决策略,我们开发者能够构建出更加安全、可靠的分布式应用,让用户在享受设备协同带来的便捷的同时,无需担忧数据安全和隐私问题。这些日志记录包含了设备的操作行为、权限使用情况等重要信息,就像一个详细的监控系统,为系统管理员和开发者提供了有力的工具,用于监控系统的安全性和排查故障。- 提前告知权限用途:在用户操作即将触发权限申请之前,提前弹出一个简短的提示框,告知用户接下来的操作需要申请某个权限以及该权限的用途,让用户有心理准备,提高用户授权的可能性。

xinyuan82的博客 739

GAMES101:MacOS作业环境搭建

查看gcc/clang的位置产看gcc/clang的版本1.1.2 安装cmake。

weixin_38844255的博客 715

告别官方WebRTC的30G编译:我用libdatachannel给USB摄像头做了个轻量级网页监控

本文介绍了一种基于libdatachannel的轻量级WebRTC监控方案,通过USB摄像头实现实时视频推流。相比官方WebRTC库30GB的庞大编译体积,libdatachannel仅需几十MB,大幅简化了开发流程。文章详细讲解了从视频采集、FFmpeg编码到WebRTC传输的全过程,并提供了性能优化和部署方案,帮助开发者快速构建高效的网页监控系统。

weixin_29207533的博客 533

华为开发者大会2024:HarmonyOS NEXT Beta重磅发布

我们这群热爱技术的人,始终相信,开发者是改变世界的力量。HarmonyOS NEXT从源头构建秩序,严格的流程和机制保障了用户安装和运行的应用天生安全,未经安全检测的应用和代码无法上架和安装,确保运行在HarmonyOS NEXT中都是原生纯净,可信赖、可溯源的可靠应用,用户再也不用担心病毒和恶意应用的骚扰。此外,HarmonyOS NEXT重新定义应用获取隐私数据的规则,经过全面的梳理,取消通话记录、短信、电话、读取已安装应用列表等9类不合理的权限,降低用户的管理成本,也从根源上降低隐私泄漏的风险。

qq_44113731的博客 1440

数字通信:信源编码、信道编码、调制、物理信道、解调、信道解码、信源解码

在通信系统中,信息的传输通常需要经过一系列的处理步骤,确保数据可以在信道中高效且可靠地传输。以下是信源编码、信道编码、调制、物理信道、解调、信道解码、信源解码的具体含义及其常见技术的解释。

weixin_44012667的博客 4806

HarmonyOS NEXT Beta重磅发布:有史以来最大一次升级

6月21日,2024年华为开发者大会(HDC)正式开幕,带来全新的HarmonyOS NEXT、盘古大模型5.0、昇腾AI云服务、GaussDB数据库等最新科技创新成果,分享鸿蒙生态开放的新能力,持续为消费者和开发者带来创新体验。

优快云资讯 1123

2026爬虫反爬终极对抗:AST解混淆+算法还原+Python复现全流程实战

本文分享了破解JS加密参数的完整流程,重点介绍AST解混淆和算法还原方法。针对电商网站常见的混淆手段(变量名混淆、控制流平坦化、字符串加密等),作者提出一套高效解决方案:通过AST解析还原可读代码,结合Chrome断点调试定位加密函数,最后用Python精准复现加密逻辑。文章包含具体的代码实现,如字符串数组还原的AST操作示例,并详细说明了从样本采集到验证测试的全流程。该方法已成功应用于10多个网站,将破解时间从一周缩短至一天,为处理JS加密参数提供了可复用的技术方案。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1523

YOLOv11改进 | Neck篇 | 双向特征金字塔网络BiFPN助力YOLOv11有效涨点

本文给大家带来的改进机制是BiFPN双向特征金字塔网络,其是一种特征融合层的结构,也就是我们本文改进YOLOv11模型中的Neck部分,它的主要思想是通过多层级的特征金字塔和双向信息传递来提高精度。本文给大家带来的结构可以让大家自行调节网络结构大小,同时能够达到一定的轻量化效果,为什么发BiFPN呢因为它算是YOLO系列改进中的常青树了,大家可以借鉴它的双向特征思想来创新自己的Neck结构本文的BiFPN通过yaml文件配置可以让大家自行调配其结构。

Snu77的博客 9098

华为HDC大会:HarmonyOS NEXT首次将AI融入系统

HarmonyOS操作系统从2019年8月9日正式发布,历时1778天,历经4代,鸿蒙生态设备数量已超过9亿,已有254万HarmonyOS开发者投入到鸿蒙世界的开发中来,鸿蒙学堂学习人次435万,开发者服务调用次数827亿次/月。此外,HarmonyOS NEXT重新定义应用获取隐私数据的规则,经过全面的梳理,取消通话记录、短信、电话、读取已安装应用列表等9类不合理的权限,降低用户的管理成本。在星盾安全架构下,HarmonyOS NEXT也重新构建了操作系统的安全体系与秩序,带来原生安全的系统和生态。

ggtdfgfdg的博客 502

uniapp:在map地图组件上添加控件,在地图上添加浮层展示自定义按钮或元素,uniApp如何在Map组件地图上添加悬浮在上面的图标/图片(全平台兼容安卓苹果app、H5网页、微信小程序、nvue)

uni-app的map添加控件问题,uniapp实现地图展示控件,uniapp小程序如何在map组件上增加按钮,uni-app,h5移动端网页,微信小程序,支付宝小程序,Android安卓,苹果ios,app,nvue,Uniapp腾讯地图添加控件,uniapp百度地图添加控件,地图上展示控件并可以点击,在地图上展示控件信息,uniapp map地图怎么向地图上增加工具栏,使用cover-view将控件在地图上展示,解决uniapp map上添加浮层无法显示问题,不显示怎么办,css样式不生效,地图等最高层

✅ 精选推荐文章 3230

HarmonyOS PC:分布式协同与端侧AI驱动的办公系统重构

操作系统不再只是设备运行平台,而是任务调度与数据治理的智能中枢。分布式协同技术通过软总线实现跨设备原子化任务流转,摆脱传统以设备为中心的文件传输范式;端侧AI能力深度集成于系统内核,支持语义理解、多模态识别与任务导向生成,无需依赖云端即可完成结构化决策。其微内核架构与分布式密钥管理构建了物理级安全底座,让数据主权真正回归用户。该范式正广泛应用于智能报销、电子签章、工业巡检等强协同、高安全、多终端场景,成为中小企业数字化办公升级的关键基础设施。

weixin_33805992的博客 432

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

深度学习工具包 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")

[HarmonyOS Next示例代码]HMOSWorld示例代码

基于分层架构和模块化设计的最佳实践,结合HarmonyOS"一次开发,多端部署"的能力,实现一款承载HarmonyOS最新技术特性,赋能HarmonyOS开发者的应用。探索学习溪村挑战赛活动我的。

qq_23068089的博客 1775

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

华为 HDC 2024 开发者大会汇总:纯血鸿蒙开发者 Beta 测试、仓颉编程语言

近日,HDC 2024 华为开发者大会在东莞松山湖正式开幕,纯血鸿蒙HarmonyOSNEXT 全场景智能操作系统正式发布,华为同时揭晓了盘古大模型 5.0、全新小艺与昇腾 AI 的最新进展。一・HarmonyOSNEXT 全场景智能操作系统先来聊聊大家最关心的纯血鸿蒙吧,HarmonyOS NEXT 全场景智能操作系统真正实现一个系统、统一生态,整机性能提升 30%,还带来 Harmony...

fastboot 1240

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

相机用完即关:Android 15“仅使用期间允许”权限设置全攻略

Android 15强化相机隐私保护:单次授权机制全解析 Android 15优化了相机权限管理,重点推出"仅使用期间允许"(单次授权)功能。该功能允许用户临时授予APP相机权限,关闭后自动收回,防止后台滥用。设置路径因品牌而异:华为/小米/三星等各有不同入口,可通过搜索快速定位。建议扫码支付等临时场景使用单次授权,社交APP可酌情选择长期授权。常见问题包括权限失效、路径混淆等,可通过更新APP、手动调整权限设置解决。该机制有效提升隐私安全,用户可定期检查权限使用记录,灵活搭配不同授权方

AirDroid_cn的博客 510

权限管理,鸿蒙Next版

在鸿蒙开发中,调用部分 API 时需要申请权限后,才能调用,如:网络请求,获取网络信息等。部分 API 权限调用的时候还会弹窗,如:麦克风、位置、摄像头、相册、传感器(sensor)、日历等。申请应用权限时,需要注意两个关键信息:权限级别授权方式根据授权方式的不同,权限类型可分为 system_grant 和 user_grant。大白话:授权方式为 user_grant 会弹窗,而 system_grant 自动授权。

xp1870069025的博客 3937

鸿蒙APP开发如何申请网络权限

"usedScene": {---------------------------------------权限使用场景,在后台使用还是在前台运行中使用。"name" : "ohos.permission.PERMISSION1", ------------权限名称,选择申请声明权限,只有名字是必填的。"reason": "$string:reason",-------------------------权限申请原因,首先在moudule.json5文件中声明。

m0_63160843的博客 2827

鸿蒙NEXT开发-网络管理

鸿蒙网络管理的学习,包含了网络管理应用权限、HTTP请求、第三方库axiso的使用

qq_56760790的博客 2654

鸿蒙开发(NEXT/API 12)【声明权限】程序访问控制

应用在申请权限时,需要在项目的配置文件中,逐个声明需要的权限,否则应用将无法获取授权。

鸿蒙的技术博客 1517
上一篇: HarmonyOS Next 分布式硬件管理:键鼠穿越与外设管理
下一篇: HarmonyOS Next分布式管理核心功能解析:网络服务和数据传输的实现一
SameX-4869
博客等级 码龄18年 3354粉丝 657原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值