• 开发者空间云开发环境使用指导-Linux 案例建议反馈贴
    体验华为开发者空间案例:开发者空间云开发环境使用指导-Linux,反馈改进建议,请直接在评论区反馈即可。体验指导:cid:link_0
  • [热门活动] 奖品已邮寄//【案例实践】体验华为开发者空间云开发环境,更多惊喜好礼等你解锁
    本期华为开发者空间【案例实践】活动获奖名单如下,请获奖用户9月25日前反馈收件信息,奖品将于10月上旬寄出  活动一【体验打卡】获奖清单活动二【实践互动】获奖清单——————————————————————————————————————————————————————————————期待已久的华为开发者空间云开发环境正式上线啦~小伙伴们是不是已经跃跃欲试中?允许小编再次介绍下云开发环境的三大能力,①一键创建,零门槛上手②全生命周期管理,灵活又省心③无缝对接工具链,开发体验无差异本期【案例实践】欢迎各位开发者沉浸式体验云开发环境能力,从使用指导 → 到环境搭建→应用开发,全方位案例手把手教学,更有华为手环、HDC定制大礼包、开发者双肩包等好礼等你解锁~【活动时间】8月1日—8月31日 【活动流程】完成报名 → 选择活动方式 → 参与活动 → 获得激励 【活动方式】(以下活动均可参与,奖励可叠加)活动一【体验打卡】:体验打卡开发者空间云开发环境功能,参与开发者定制礼品抽奖参与方式:进入开发者空间,体验空间云开发环境新能力奖项设置:开发者定制双肩包*2个,开发者定制短袖T恤*10件 活动二【实践互动】:完成开发者空间“云开发环境”新功能案例体验或独立开发与“云开发环境”的相关的新案例,抽取华为手环等好礼参与方式:选择下方任意一个或多个案例或独立完成与“云开发环境”相关的案例进行体验,并在评论区分享案例截图(也欢迎书写你对案例实践后的体验和感受),活动结束后,将在评论区用户中抽奖。体验功能案例名称难度系数云开发环境开发者空间 - 云开发环境使用指导★★★本地Xshell基于华为开发者空间云开发环境完成上传下载★★★基于华为开发者空间-云开发环境,PyCharm SSH远程开发环境搭建★★★基于华为开发者空间-云开发环境,部署Jupyter Notebook★★★★本地VSCode基于华为开发者空间云开发环境完成小程序开发★★★本地CodeArts IDE基于华为开发者空间云开发环境完成小游戏开发★★★本地IntelliJ IDEA 基于华为开发者空间云开发环境的应用开发★★★基于远程开发环境部署Django与开发者空间GaussDB的实践应用★★★★奖项设置:华为手环9(NFC款)*2个,HDC定制大礼包*3个(内含HDC双肩包、渔夫帽、小风扇及短袖T恤),开发者定制短袖T恤*15件中奖小妙招:完成多个案例或者独自开发完成新案例,会增加中奖概率!完成后请在回帖中注明完成了几个案例,以及案例名称。小编会对案例完成情况进行复核,请大家真实完成哦! 部分礼品示意PS:能独立完成新案例开发的小伙伴也可以参加开发者空间案例共创第六期活动,如在使用中有产品优化建议,可参与开发者空间产品体验官活动,更多礼品等你解锁~【活动规则】1、抽奖方式:活动结束后,我们将从参与活动的用户中(华为云新老用户均可参与),通过巨公平台或Excel 函数形式抽取获奖用户。获奖名单将在活动结束后的7个工作日内公布。2、活动二仅限于在“华为开发者空间”内体验相关案例项目,其他项目建议不参与此次活动,否则视为无效内容,具体参考案例中心内容。另外活动将根据有效评论数设置获奖人员数量,规则如下:有效评论数量获奖名额1052010302040以上全部开启3、本次活动将根据实际参与情况发放奖励,包括但不限于用户百分之百中奖或奖项轮空的情况。【活动说明】用户限制说明:1、参加本次社区活动的用户必须为华为云注册用户。同时为保证活动公平性,禁止用户以IAM账号身份参与活动,否则将视为无效。2、领取奖品的用户需为华为云实名用户,未完成实名认证的用户将不发放活动奖励。3、本次活动如一个实名认证对应多个账号,只有一个账号可领取奖励。如在同一概率活动中,同一账号重复获奖,只发放首先获奖奖品。4、本次活动一个实名认证账号只能对应一个收件人,如同一账号填写多个不同收件人,不予发放奖励。5、请开发者不要在活动期间随意修改社区昵称和华为云账号,由此产生的统计问题,如过了申诉期,小助手不再处理。(申诉期为活动结果公示3天内。)奖品发放说明:1、本活动结束之后10个工作日内公示获奖信息,获奖开发者用户需在截止时间在获奖信息收集表中填写获奖信息,获奖信息截止收集日过后10个工作日内,将统一发出奖品。华为云遵守《中华人民共和国个人信息保护法》规定,将以上个人信息仅用于礼品发放之目的,不会向任何第三方披露。若由于获奖开发者用户自身原因(包括但不限于联系方式有误、身份不符或超过截止登记日期等)造成奖品无法发送,视为获奖开发者用户放弃领奖。2、为保证活动的公平公正,华为云有权对恶意刷活动资源(“恶意”是指为获取资源而异常注册账号等破坏活动公平性的行为),利用资源从事违法违规行为的开发者用户收回抽奖及奖励资格。3、若发放奖品时,出现库存不足,则优先发放等价值的其他实物奖品;HDC限定礼包为24/25年款随机发货;4、所有参加本活动的开发者用户,均视为认可并同意遵守《华为云开发者用户协议》,包括以援引方式纳入《华为云开发者用户协议》、《可接受的使用政策》、《法律声明》、《隐私政策声明》、相关服务等级协议(SLA),以及华为云服务网站规定的其他协议和政策(统称为“云服务协议”)的约束。5、如果您不同意本活动规则和云服务协议的条款,请勿参加本活动。
  • [案例共创] 【获奖名单已公布】【第6期】开发者空间-基于云开发环境和GaussDB构建应用
    本期获奖情况如下,恭喜各位获奖者~~~~温馨提示:获奖用户请提前实名认证,以便顺利发放代金券!代金券和礼品的发放信息收集地址:cid:link_12,请及时填写信息。代金券即将发放至论坛私信(右上角我的社区-我的消息-私信中领取),礼品已在申请流程中,请耐心等待,谢谢!多篇文章的本期以最高奖项的发放,不叠加。如发布3篇,2篇参与奖,1篇三等奖,按三等奖发放。类型主题作者帖子标题奖项文章banjin【案例共创】在开发者空间云开发环境使用Vanna配合ollama/maas基于GaussDB的自然语言分析系统二等奖xiaowuyun【案例共创】基于远程开发环境部署Django与开发者空间GaussDB的极简博客系统二等奖苏家祺【案例共创】远程开发环境中部署Bun + Next.js + tRPC与开发者空间生态版GaussDB实践操作并编写学生成绩管理系统二等奖给无眠点压力【案例共创】基于开发者空间云开发环境与 GaussDB 的JAVA多租户 SaaS 实践(Spring Boot + MyBatis-Plus)二等奖夏同学【案例共创】基于华为云开发者云主机创建部署 AdonisJS 与华为云数据库 GaussDB 的实践应用三等奖小草飞上天【案例共创】基于IDEA连接云开发环境并结合GaussDB构建JAVA程序抽奖小应用三等奖miyalian【案例共创】基于华为开发者空间云开发环境+GaussDB实现在线考试系统三等奖风吹雨【案例共创】基于远程开发环境部署企业级商城Litemall与开发者空间GaussDB的实践应用参与奖郑小健【案例共创】基于华为开发者空间-云开发环境实现PyCharm SSH远程开发环境搭建参与奖熊猫钓鱼【案例共创】华为云GaussDB企业级电商订单分析系统开发案例参与奖江南清风起【案例共创】基于华为开发者空间云开发环境和GaussDB数据库—员工工资管理系统实战参与奖yd_273825949我的第一个云上应用:基于华为云开发者空间和GaussDB的极简留言墙参与奖柠檬味拥抱【案例共创】基于远程开发环境部署Flask与开发者空间GaussDB的实践应用构建在线TODO清单(保姆级指南实战案例)参与奖Todd_Wong2010【案例共创】海思3516DV500+IMX664方案一体化机芯,开放AI算法部署二次开发参与奖视频banjin开发者空间云开发环境使用Vanna配合ollama基于GaussDB的自然语言分析系统(https://www.bilibili.com/video/BV1h8Y9zMEYT/)二等奖xiaowuyun【华为开发者空间:开发环境部署Django,Pillow,markdown与GaussDB的极简博客系统-哔哩哔哩】( https://b23.tv/HTlw1em)二等奖创作小能手奖郑小健  柠檬味拥抱   了解案例共创活动 为了让更多开发者能够更轻松、更高效地理解和使用我们的文档,进而提升云产品的整体使用体验,我们致力于进一步优化和完善官方产品文档。在此过程中,我们诚挚地邀请广大开发者积极参与,通过亲身体验云产品,编写实践案例或体验评测。一旦您的案例经过专家评审团的认可与采纳,将有以下三点:优质案例将被正式收录至官方案例库,供广大开发者学习。优质案例将选送到在华为云站内外10+个技术社区推荐,给予百万级流量资源。以上案例我们都将注明原作者名字,实现与开发者共创官方文档。 参与者不仅有机会获得每月活动礼品,还有可能被评为年度内容贡献官,享受更多荣誉和奖励,获得更多合作机会。我们期待着与您一起,共同打造更加优质、高效的云服务体验。参与投稿方式 第1步:(已注册并实名可跳过)华为云账号实名认证,点击这里。(已设置可跳过)登录后设置社区昵称,点我设置。第2步:点击报名填写报名问卷,提供礼品发放地址等信息第3步:开启您的云端体验,分享实践案例,点我写帖子。版块选择“社区活动”分类选择“案例共创”帖子标题在前面添加【案例共创】(一定要加,方便识别参与活动的帖子)文末可添加活动名称及链接地址,如“我正在参加【案例共创】第6期 开发者空间-基于云开发环境和GaussDB构建应用  cid:link_29”【如您在体验中有任何产品问题,欢迎在论坛发布问题求助帖(帖子分类选择问题求助)咨询产品专家,如发现任何体验不友好、产品Bug、文档页面错漏等情况,欢迎通过云声平台反馈给我们,还有机会领取云声专属礼品!活动相关咨询可以论坛私信“论坛小助手SUN”】本期投稿内容 Ø 华为云产品介绍:华为开发者空间 - 云开发环境: 华为开发者空间 - 云开发环境是华为开发者空间提供远程云开发环境,开发者可在本地通过工具和浏览器多种形式接入开发环境,完成编码开发、远程操作、项目部署及本地访问等多个场景的作业活动,开发者可以轻松完成本地PC开发环境到云开发环境的无缝切换。云开发环境操作指导参考:云开发环境链接:cid:link_14开发者空间 - 云开发环境使用指导:Windows版-cid:link_0Linux版-cid:link_1MACOS版-cid:link_1本地IDE和工具连接云开发环境:基于华为开发者空间-云开发环境,PyCharm SSH远程开发环境搭建:cid:link_3基于华为开发者空间-云开发环境,部署Jupyter Notebook:cid:link_4本地IntelliJ IDEA 基于华为开发者空间云开发环境的应用开发:cid:link_5本地CodeArts IDE基于华为开发者空间云开发环境完成小游戏开发:cid:link_6本地VSCode基于华为开发者空间云开发环境完成小程序开发:cid:link_7本地Xshell基于华为开发者空间云开发环境完成上传下载:cid:link_8GaussDB:GaussDB是华为自主创新研发的分布式关系型数据库。该产品支持分布式事务,同城跨AZ部署,数据0丢失,支持1000+的扩展能力,PB级海量存储。同时拥有云上高可用,高可靠,高安全,弹性伸缩,一键部署,快速备份恢复,监控告警等关键能力,能为企业提供功能全面,稳定可靠,扩展性强,性能优越的企业级数据库服务。GaussDB资源获取链接:领取免费版GaussDB(2025年06月 21日 - 2025年 12月 31日,数量有限):cid:link_9Ø 应用构建要求开发者可结合自己的工作实践,应用构建类型和主题参考如下:基于华为开发者空间云开发环境和免费GaussDB数据库实例完成应用开发;主题场景参考以下方向:基于本地IDE连接远程云开发环境完成应用代码编写和部署,以GaussDB数据库作为应用数据读存的数据库,并在本地访问应用。Ø 手册案例模版参考云开发环境结合GaussDB的应用实践:1)案例地址:cid:link_10简介:基于云开发环境完成Django Web框架部署,通过本地IDE连接云开发环境完成Web应用的开发,并通过Django对接GaussDB数据库,以GaussDB数据库作为Web应用的数据存储读取,最后通过端口映射实现本地访问Web应用(注意:案例编写格式务必参考模板!) (注意:案例编写格式务必参考模板!) (注意:案例编写格式务必参考模板!) Ø 投稿规则手册类投稿: 构建的应用需要完成端到端构建,手册包含应用在开发者空间运行的完整截图。手册包含开发过程关键实际操作描述(文字描述+截图+代码)。手册的案例实操需要完整体现,可根据手册上手并体验。手册包含案例场景和方案以及用到的华为云产品或者开源框架简述。视频类投稿: 构建的应用需要完成发布,视频包含应用在线情况的展示。视频包含案例场景和方案以及用到的华为云产品或者开源框架简述。视频包含开发过程详细的实际操作。视频的案例实操需要完整体现,可根据视频上手并体验。视频需发在外部视频平台上(如:B站等平台),在该活动贴下回复视频链接即可。Ø 评奖规则标准类型分值释义分值阶梯总分值操作完整性关键节点以文字+截图的形势进行说明1:空间的实践操作,而非方案类描述2:参考官方提供模版,可读性好,有关键节点文字说明与截图3:符合2的条件下能够突出关键代码释义以及关键步骤解释说明4:应用构建后可执行,并有执行后效果介绍和展示1-4/0.5梯度4案例实用性贴近实际行业生产或者业务场景1:纯技术应用不涉及实际应用场景,比如接入模型后的问答助手2:基于实际应用场景具有一定的实用性3:基于实际场景且在开发者空间完成部署实施4:基于实际应用场景解决行业的痛点问题,可用于生产实施1-4/0.5梯度4技术多样性案例中应用更多的华为云技术或主流开源框架1:使用活动中要求的空间以及工具或者技术2:基于空间结合更多的华为云技术/服务、开源框架或技术1-2/0.5梯度2荣誉与奖励1、获奖案例将有机会作为华为云开发者空间应用的标杆案例,进行录入成册推广宣传,并发布到华为云开发者联盟公众号传播矩阵。同时,案例内容可作为后续作者申请评选HCDE的相关贡献内容。标杆案例:【华为开发者空间 · 案例共创故事(郑州轻工业大学)】(https://mp.weixin.qq.com/s/pPmPcdlWYLPalzJPqxIfew)  Ø  奖项设置   视频案例奖项:文章案例奖项:  注:每期评审专家根据每篇文章评选文章分数及等级,每期文章质量不一,不排除有某个奖项轮空的情况,如第X期文章质量在A级和B级,即S和S+级轮空。代金券及周边礼物发放对象为:已完成实名认证的华为云用户。发放到填写报名问卷的账号及收货地址中,礼包类礼品均为实物礼品。  重要说明1、投稿内容一经采用,将会被纳入官方产品文档,文章作者拥有著作权,华为云拥有使用权、修改权等。2、每期评审专家根据每篇文章评选文章分数及等级,每期文章质量不一,不排除有某个奖项轮空的情况,如第X期文章质量在A级和B级,即S和S+级轮空3、投稿内容字数不少于500字(不含代码),要求思路清晰、文字顺通、图片清晰、代码规范,不得有打广告、加二维码引流和凑字数行为。4、文章要求发布在华为云开发者社区论坛,允许搬运自己发在其他平台的文章,但仅支持搬运自己的原创文章,搬运他人的文章当抄袭处理。内容必须保证内容原创性,实践过程真实、内容代码化,如发现投稿内容为转载、复制、抄袭、恶意拼接、灌水等侵权作弊行为,均视为无效并取消参与资格5、将发表过的文章删除后重新发表的文章,不计入发文数量,以文章评选时在线显示数量为准。活动期间,如有用脚本刷阅读量、注册僵尸号刷赞等严重违反社区规范的行为,直接取消所有获奖资格。6、审核通过被采纳的文章作者,将在下月初进行获奖名单公布和奖励发放,届时会有站内信通知,请及时关注并填写快递信息,过期未核对或填写视为放弃该期奖品。7、对于持续输出高质量内容的作者,每年度末还有年度贡献大礼包送上。特别声明:华为云有权根据自身运营安排,自主决定和调整
  • [案例共创] 【案例共创】基于R语言+华为开发者空间+华为云Maas+Cherry Studio开发AI Agent,实现R分析能力与AI系统的双向交互
    案例介绍本案例基于免费的华为云开发者空间、华为云MaaS提供的DeepSeek-R1大模型,使用R语言工具构建AI Agent,该AI Agent可以在R语言环境下独立部署使用。也可以用R语言开发MCP server,和AI助手平台Cherry Studio配合使用。案例内容本案例由开发者:yd_259866430提供案例内容1 概述1.1 案例介绍R是一种自由、免费、源代码开放的计算机语言。它具有语法极其简单、代码量极少、没有复杂概念的显著优势,降低了人们了解更复杂技术的计算机语言门槛。本案例将介绍如何在华为云主机安装R,并用它开发AI Agent和MCP server。本案例用到的R语言工具包括ellmer和mcptools,是posit公司开发的智能体开发工具。如需在R中开发部署AI Agent,则用ellmer。如果R仅作为MCP server的运行环境,则使用mcptools。1.2 适用对象企业个人开发者高校学生1.3 案例时间本案例总时长预计60分钟。1.4 案例流程① 用户打开华为开发者空间云主机,下载安装R、ellmer、mcptools、Cherry Studio;② 使用ellmer包,配置华为云MaaS提供的DeepSeek-R1模型,运行测试AI Agent;③ 使用mcptools开发MCP server服务,并将MCP server部署在Chery Studios上,配置华为云MaaS提供的DeepSeek-R1模型,运行测试AI Agent;1.5 资源总览本案例预计花费0元。资源名称规格单价(元)时长(分钟)鲲鹏4vCPUs |8GB ARM|Ubuntu 24.04 Server定制版0602 环境配置2.1 开发者空间配置详细步骤请参考案例中步骤2.12.2 免费领取DeepSeek-R1详细步骤请参考案例中步骤2.22.3 安装R语言2.3.1 进入开发者云主机桌面后,打开一个终端2.3.2 在终端输入以下代码,安装R语言sudo apt update sudo apt install --no-install-recommends software-properties-common dirmngr wget -qO- https://cloud.r-project.org/bin/linux/ubuntu/marutter_pubkey.asc | sudo tee -a /etc/apt/trusted.gpg.d/cran_ubuntu_key.asc sudo add-apt-repository "deb https://cloud.r-project.org/bin/linux/ubuntu $(lsb_release -cs)-cran40/" sudo apt install --no-install-recommends r-base具体参考R官网安装指引。https://mirrors.sustech.edu.cn/CRAN/在终端中输入R,进入R console中,输入print("hello world!"),如正常输出,则R语言安装成功。2.4 安装ellmer和mcptools在R console中输入install.packages("ellmer")过程中报错,查看报错信息按照报错信息,先退出R console,在终端中安装libcurl4-openssl-dev。再进入R console,安装ellmer在R console中,安装usethis(用于配置R环境变量),install.packages("usethis")安装过程会报错,需要退出R console安装libgit2-dev,sudo apt install libgit2-dev,然后再进入R console安装usethis。然后,安装install.packages("mcptools"),过程中一样会报错,需要耐心debug。2.5 安装Cherry Studiosudo apt install gdebi-core sudo gdebi Cherry-Studio-1.5.3-arm64.deb3 构建AI Agent3.1 使用ellmer创建AI Agent在R console输入以下代码,编辑R环境变量library(ellmer) usethis::edit_r_environ() 将参考案例中步骤2.2中的url和api_key复制到R环境变量中,复制后,按:wq退出,和vim语法类似。在 R console输入如下命令library(ellmer) # 导入ellmer chat <- chat_openai( # 构建AI Agent system_prompt = NULL, base_url = Sys.getenv("base_url"), api_key = Sys.getenv("api_key"), model = "DeepSeek-R1", seed = NULL, api_args = list(), echo = "all" ) 3.2 测试AI Agent在R console里,输入chat$chat("讲三个关于统计学家的笑话") ,就可以看到这个AI Agent确实通过API连接上了华为云上Deepseek模型,并返回了结果。在R console里运行AI Agent,看起来很丑,其实posit公司开发了更好看的shinychat,如下图所示。但是安装部署shinychat,又是一个不小的工程,所以案例接下来转向R+Cherry Studio 配合使用。不过聊天仅仅是这个AI Agent一个很小的功能。作为这个AI Agent的使用者,我们更希望它能够利用由我们定义的外部工具。这不仅仅是希望,如果AI Agent不调用外部工具,它的回答可能是错误的。如下图所示,当我们问AI Agent今天是几号,在不调用外部工具的情况下,它给出的是2023年10月12日,这明显不对。3.3 使用mcptools开发MCP server,并配合Cherry Studio使用解决“今天几号”的问题,需要用mcptools开发一个MCP server,写一个mcptoolsExample.R脚本,代码如下。get_current_time <- function(tz = "CST") { format(Sys.time(), tz = tz, usetz = TRUE) } if (is_new_ellmer()) { res <- list( get_current_time = ellmer::tool( get_current_time, name = "get_current_time", description = "返回当前时间", arguments = list( tz = ellmer::type_string( "当前时区默认为 `\"CST\"`.", required = FALSE ) ) ) ) } else { res <- list( get_current_time = ellmer::tool( get_current_time, name = "get_current_time", description = "Returns the current time.", arguments = list( tz = ellmer::type_string( "当前时区默认为 `\"CST\"`.", required = FALSE ) ) ) ) } res然后,我们按照参考案例,在Cherry Studio上配置DeepSeek-R1模型。如下图所示。然后,在不配置MCP server的情况,我们再问下“今天是几号”。AI Agent无法回答这个问题。接下来,我们给这个AI Agent配上一个外部工具,如下图所示,点击添加服务器。在json中输入{ "mcpServers": { "r-mcptools": { "command": "Rscript", "args": ["-e", "mcptools::mcp_server("/path/mcptoolsExample.R")"] } } } 接下来,再次问“今天是几号”,AI Agent已经知道调用MCP server获取日期了。至此,基于华为开发者空间云主机、R语言搭建AI Agent和MCP Server到此结束。本案例使用华为开发者空间提供的免费主机作为开发环境,操作系统为华为云为新注册用户提供180小时免费主机,大家可以开心使用。本案例使用华为云MaaS提供的免费DeepSeek-R1模型。我正在参加【案例共创】第5期 开发者空间 AI Agent 开发 https://developer.huaweicloud.com/signup/0e966198e87a4210b5f88c0d759d4f3b”
  • 华为开发者空间 基于华为云开发环境桌面版的人脸颜值打分案例 建议反馈贴
    体验华为开发者空间基于华为云开发环境桌面版的人脸颜值打分案例,反馈改进建议,请直接在评论区反馈即可体验指导:cid:link_0
  • [热门活动] 华为开发者布道师技术沙龙·第19期直播【OpenHarmony生态构建】总结简报
    【直播回放】直播回放地址【总结简报】华为开发者布道师技术沙龙·直播间精彩回顾【第1期】联接高校人才培养与前沿产业技术,成就学生未来 / 李一浩老师【第2期】逐梦之旅:学生开发者到华为开发者布道师的蜕变 / 杨阳同学【第3期】昇思MindSpore:AI 领域的创新力量与跨平台之路 / 陈新杰同学【第4期】基于OpenHarmony计算机学科人才培养经验分享 / 周睿老师【第5期】计算机核心课程贯通式实践教学体系介绍 / 赵欢老师、李博经理、杨科华老师【第6期】OpenHarmony应用开发之网络数据请求与数据解析 / 倪红军老师【第7期】华为开发者空间玩转DeepSeek / 马欣老师【第8期】基于能力图谱的openGauss项目闯关 / 马瑞新老师【第9期Day1】基于开源鸿蒙+海思星闪开发板:嵌入式系统开发实战 / 齐耀龙老师【第9期Day2】基于开源鸿蒙+海思星闪开发板:嵌入式系统开发实战 / 齐耀龙老师【第10期】基于华为云+DeepSeek大模型的脑肿瘤分割实验教学案例 / 林承德老师【第11期】WS63E星闪开发板快速入门指南:开启星闪技术之旅 / 杨阳同学【第12期】星闪应用开发技术课程(群)建设思路与设想 / 葛非老师【第13期】星闪主从一体模式与线性星闪网络  / 齐耀龙老师【第14期】基于昇腾的皮肤病理多模态大模型研发  / 崔笑宇老师【第15期】基于昇腾NPU的合成孔径雷达成像案例 / 李阳老师【第16期】香橙派AIpro的远程推理框架与实验案例 / 郝家胜老师【第17期】鸿蒙端云一体化应用开发  / 倪红军老师【第18期】基于HarmonyOS NEXT应用开发之旅 / 刘俊威同学、吴玉佩同学【第19期】OpenHarmony生态构建 / 王天一同学、聂嘉一同学 官网直播间开发者问题回答摘要:序号问题答复1多内核架构下,如何保证实时性要求较高的任务不被低优先级任务抢占?1. 对于这个问题,首先需要明确的是OpenHarmony 的“多内核”并非让 Linux、LiteOS-M/A 同时运行,而是同一套上层框架可在不同设备上“选配”其中某一个内核启动;2. 其次,对于操作系统来说,实时性主要取决于操作系统内核的实现,与OpenHarmony本身适配多个内核并没有太大关系。2LiteOS-M和LiteOS-A内核分别适用于哪些类型设备?两者内存管理机制有何不同?1. LiteOS-M 面向 MCU/MPU 级别的极小资源设备,支持的设备最小内存为128KiB;LiteOS-A 则跑在应用处理器(智能手表、轻量终端,参考内存≥1MB)上。2. LiteOS-M和LiteOS-A的内存管理差别类似分时操作系统与实时操作系统的差别。前者依赖页式虚拟内存、按需调页等动态机制;后者以“确定性”为核心,内存管理往往采用静态或准静态策略。3OpenHarmony是如何实现不同内核间的切换与资源分配的?OpenHarmony 的“多内核”并非让 Linux、LiteOS-M/A 同时运行,而是同一套上层框架可在不同设备上“选配”其中某一个内核启动;内核适配层(KAL)把线程、内存、文件、网络等系统调用统一封装成 HDF/HDI 标准接口,使分布式软总线、ArkTS 运行时等上层组件可以调用这个接口。4ArkTS中声明式语法具体如何简化UI开发流程?相比命令式语法有哪些优势?声明式UI主要是在开发过程中的代码量相对于传统的HTML+DIV+CSS这种开发框架代码量较少,具体可以参考一个简单的语法示例(可在社群中交流讨论),可以看到一个组件的功能和样式往往只需要数行,而在传统的Web页面开发中这往往需要数十行或者上百行。5请问RK3588是否可以运行和开发OpenHarmony?必须要从华为官方渠道购买RK的开发板吗?RK3588的香橙派是否可以运行和学习鸿蒙?1. Gitee目前有使用RK3588香橙派进行OpenHarmony开发的代码仓,可以参考相关资料;2. 开发板不一定要从华为官方渠道购买,通过不同厂商各自的渠道购买也可以,但建议使用适配较完善的开发板(可以参考Laval社区的明星开发板相关帖子),对应的手册、资料更齐全,方便上手。6ArkTS中,如何处理不同平台的差异,有哪些处理机制?ArkTS中,硬件差异被当成“系统能力”而不是“底层细节”来处理:应用只用 ArkTS 声明自己需要的能力(如camera、audio等),构建系统根据目标设备把这些能力编译成不同Feature包。对应的处理机制有:1.对于不同分辨率的设备,ArkUI有自适应布局相关API进行适配;2.提供运行时能力查询 API(接口名:canIUse),能快速查找设备是否支持特定系统能力(SystemCapability)。7目前鸿蒙应用开发有没有一套开发脚手架呢?1. 目前鸿蒙应用开发有一套基于ArkUI的框架,底层依赖方舟运行时。UI层用ArkUI声明式语法,设备能力通过@ohos接口调用。2. 如果要学习应用开发,可以参考华为开发者官网的相关教程,从TypeScript语言基础、ArkUI声明式UI与状态管理、Ability生命周期调度几个方面进行快速入门。  
  • [认证交流] 汇聚前沿技术,华为云鸿蒙应用开发师资培训·湖北站圆满收官
           7月22日-7月24日,为期三天的华为云鸿蒙应用开发师资培训·湖北站在湖北轻工职业技术学院圆满落下帷幕。本次培训聚焦鸿蒙应用开发技术与华为云认证,吸引了20多所学校的40多位教师参与,得到了参培老师的高度评价。       培训伊始,湖北轻工职业技术学院信息工程学院院长赵欣发表了致辞,他强调,随着万物互联时代的加速到来,鸿蒙操作系统正迅速成为推动各行业数字化转型的关键力量。他表示希望参培教师能够以本次培训为契机,不断学习新技术、新技能,提升自身的综合素质和能力水平,为培养更多优秀人才贡献力量。       随后,湖北云解决方案部部长苑磊首先对到场的老师们表示热烈的欢迎,并表示HarmonyOS 已走进百所高校课堂,成为热门课程,参加培训的各位老师也是将鸿蒙与开发者认证推向全国课堂的 “火种”。他希望能以此次培训为纽带,与各位老师持续深化交流合作,培养出更多适应未来社会需求的高素质人才。       接下来,华为云高校生态运营经理陈银豪为大家带来了“推进产教融合走向深水区,助力高校创新实践人才培养”的议题分享。他分享了华为云开发者人才培养在鸿蒙、人工智能等产品领域的人才解决方案,围绕人才培养的关键节点,构建深度完善的运营体系,通过“岗、课、赛、证、师、会”等全链条的生态运营服务,深化产教融合,助力高校人才培养,培养高质量实践人才。       培训期间,讲师从HarmonyOS简介、设计理念、技术架构、技术特性等多个角度对HarmonyOS进行介绍,使老师们对HarmonyOS具备一个较为系统全面的认识。紧接着,讲师阐述了鸿蒙应用开发的编程语言—ArkTS,系统地介绍了ArkTS语言的基础语法、UI描述规范、常用装饰器和渲染控制语法等知识。       通过对HarmonyOS基础知识与开发语言的学习,讲师又详细讲述基于ArkTS的声明式开发范式组件,包括基础组件、容器组件和媒体组件。ArkUI 是一套声明式开发框架,它具备简洁自然的 UI 信息语法、丰富的 UI 组件、多维状态管理,以及实时多维度预览等能力,帮助开发者提升应用开发效率,并能在多种设备实现生动而流畅的用户体验。讲师通过实际的组件应用案例,帮助老师们理解和区分ArkTS中的各类组件,具备在实际应用开发中熟练使用ArkTS组件的能力。       本次师资培训通过课堂学习、实验交流、考试等环节,旨在帮助参培老师掌握开发者认证课程知识体系以及提升鸿蒙开发实践能力,更好地将鸿蒙应用开发技术融入教学体系,为教学活动及人才建设提供有力的支撑。培训尾声,组织参培老师参加结课考试并为他们发放结课证书。通过本次暑期师资培训,老师们表示他们不仅掌握了鸿蒙应用开发的基础知识和最新趋势,还提升了鸿蒙开发的职业技能。       本次暑期师资培训的成功举办,离不开湖北轻工职业技术学院的鼎力支持与高度重视,也离不开各位教师的积极参与和辛勤付出。未来,我们期待更多的教师能够参与到华为云根技术与鸿蒙应用开发的培训和学习中来,促进高素质人才的培养。
  • GBDT
    GBDT(Gradient Boosting Decision Tree,梯度提升决策树)是一种强大的机器学习算法,广泛用于回归、分类和排序任务。它属于集成学习中的提升法(Boosting),通过逐步训练多个弱学习器(通常是决策树),并将它们组合成一个强模型。核心思想GBDT 的核心是:一步一步地修正错误。它的做法是:先训练一个简单的模型(如一棵小决策树)来预测数据。发现预测有误差(残差)。训练下一个模型,专门去拟合这些“残差”。再用第三个模型去拟合前两个模型组合后的残差……最终把所有模型的预测结果加起来,得到更准确的输出。就像老师批改作业:第一次只看大错,第二次重点看小错,逐步逼近正确答案。举个例子:预测房价你想预测房子的价格,有以下特征:面积、位置、房龄。第一棵树:发现面积越大价格越高,初步预测。预测值:300万 → 实际:320万 → 残差 = +20万第二棵树:专门学习“预测少了20万”这个模式(比如老小区被低估)它不预测总价格,而是预测“应该加多少钱”第三棵树:继续修正剩余误差(比如交通便利的加分)最终预测 = 第一棵树输出 + 第二棵树输出 + 第三棵树输出 + …每棵树都专注于“前人犯的错”,一步步提升精度。算法流程(简化)初始化模型:用一个常数(如平均房价)作为初始预测。对每一轮(t = 1 到 T):a. 计算当前模型的残差(即负梯度,GBDT 中称为“伪残差”)b. 训练一棵新的决策树,去拟合这些残差c. 将新树加入模型,更新整体预测输出最终模型:所有树的预测之和“梯度”来自损失函数的梯度下降思想,GBDT 实际上是在函数空间中进行梯度下降。Python 代码示例(使用 scikit-learn)from sklearn.datasets import load_boston from sklearn.ensemble import GradientBoostingRegressor from sklearn.model_selection import train_test_split from sklearn.metrics import mean_squared_error # 加载数据(以波士顿房价为例) boston = load_boston() X, y = boston.data, boston.target # 划分训练测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 创建 GBDT 回归模型 gbdt = GradientBoostingRegressor( n_estimators=100, # 使用100棵树 learning_rate=0.1, # 每棵树的贡献权重(步长) max_depth=3, # 每棵树的最大深度 random_state=42 ) # 训练模型 gbdt.fit(X_train, y_train) # 预测 y_pred = gbdt.predict(X_test) # 评估 mse = mean_squared_error(y_test, y_pred) print(f"均方误差: {mse:.2f}") # 特征重要性 print("特征重要性:", gbdt.feature_importances_) 注意:load_boston 已弃用,实际中可用 fetch_california_housing 或其他数据集替代。GBDT 的关键参数参数作用建议n_estimators树的数量50~500learning_rate学习率(每棵树的权重)0.01~0.3,越小需要越多树max_depth每棵树的最大深度3~6,防止过拟合subsample每次训练使用的样本比例<1.0 可引入随机性(类似随机森林)优点精度高:在结构化数据上表现优异可解释性强:能输出特征重要性支持多种损失函数:可用于回归、分类、排序对缺失值和异常值有一定鲁棒性缺点训练速度慢:树是串行训练的(不能并行)容易过拟合:如果树太多或太深对噪声敏感:特别是在残差拟合过程中常见变种XGBoost:GBDT 的高效实现,支持正则化、并行计算LightGBM:微软开发,速度快,内存占用低CatBoost:对类别特征处理友好,适合表格数据应用场景金融风控:信用评分、欺诈检测推荐系统:点击率预测工业预测:设备故障预测表格数据竞赛:Kaggle 中常见获胜方案总结GBDT 是一种“循序渐进、不断纠错”的模型:每棵树只学一点,但所有树加起来就很强大。它是传统机器学习中最成功的算法之一,尤其在表格数据(结构化数据)上,至今仍具有很强竞争力。
  • Fine-tune
    Fine-tune(微调) 是指在一个已经预训练好的模型基础上,针对特定任务或数据集进行进一步训练,使其适应新任务的过程。它是迁移学习(Transfer Learning)中最常用的方法之一,广泛应用于自然语言处理(NLP)、计算机视觉(CV)等领域。核心思想预训练(Pre-training):在大规模通用数据上训练一个模型(如 BERT 在 Wikipedia 上训练,或 ResNet 在 ImageNet 上训练),让它学会通用特征(如语言理解、边缘/纹理识别)。微调(Fine-tuning):将这个“通用模型”拿到你的具体任务上(如情感分析、猫狗分类),用你的小数据集继续训练,调整模型参数,使其更适配当前任务。类比:一个人先上“通识教育”(预训练),再学“专业课”(微调)。举个例子:情感分析你想做一个模型,判断用户评论是“正面”还是“负面”。从头训练:需要大量标注数据,训练时间长。微调做法:拿一个已经训练好的 BERT 模型(懂中文语法和语义)在它的顶部加一个分类层(输出正面/负面)用你的 1000 条标注评论继续训练模型快速学会“在上下文中判断情感”结果:准确率高、训练快、数据需求少。微调的典型步骤选择预训练模型如:BERT、RoBERTa(NLP);ResNet、ViT(CV)加载模型权重使用官方提供的预训练参数修改输出层NLP:加一个分类头(如全连接层)CV:替换最后的全连接层为你的类别数在目标任务上训练使用较小的学习率(如 2e-5)训练几个 epoch(避免过拟合)评估和部署Python 示例(使用 Hugging Face Transformers 做文本分类)from transformers import AutoTokenizer, AutoModelForSequenceClassification from transformers import Trainer, TrainingArguments import torch # 1. 加载预训练模型和分词器 model_name = "bert-base-chinese" tokenizer = AutoTokenizer.from_pretrained(model_name) model = AutoModelForSequenceClassification.from_pretrained(model_name, num_labels=2) # 2. 准备数据 texts = ["这部电影太棒了!", "服务很差,不推荐"] labels = [1, 0] # 1=正面,0=负面 # 编码数据 inputs = tokenizer(texts, padding=True, truncation=True, return_tensors="pt") # 3. 设置训练参数 training_args = TrainingArguments( output_dir="./results", num_train_epochs=3, per_device_train_batch_size=8, learning_rate=2e-5, evaluation_strategy="epoch" ) # 4. 定义 Trainer 并微调 trainer = Trainer( model=model, args=training_args, train_dataset=inputs, # 实际使用需封装为 Dataset 对象 tokenizer=tokenizer ) trainer.train() 微调的两种常见方式方式说明全量微调(Full Fine-tuning)更新模型所有参数,效果好但计算量大部分微调(Partial Fine-tuning)只更新最后几层或分类头,速度快,适合小数据近年也有 LoRA(Low-Rank Adaptation) 等轻量微调方法,只训练少量新增参数,节省资源。优点节省时间和计算资源:无需从头训练小数据也能训练出好模型:依赖预训练知识性能通常优于从零开始训练注意事项学习率要小:避免破坏预训练学到的通用特征过拟合风险:目标数据少时容易过拟合,可用 Dropout、早停(early stopping)领域差异:如果目标任务和预训练数据差异太大(如医学文本用通用 BERT),效果可能不佳应用场景NLP:情感分析、命名实体识别、问答系统CV:医学图像分类、工业缺陷检测语音:特定人声识别、方言识别总结Fine-tune = 预训练模型 + 小数据 + 小学习率 + 任务适配它让深度学习不再是“大公司专属”,普通人也能用少量数据训练出高性能模型。
  • Continual Learning
    持续学习(Continual Learning),也称为终身学习(Lifelong Learning)或增量学习(Incremental Learning),是机器学习的一个研究方向,目标是让模型能够在连续的任务或数据流中不断学习新知识,同时保留对旧知识的记忆。核心挑战:灾难性遗忘(Catastrophic Forgetting)当模型学习新任务时(如识别猫),往往会严重遗忘旧任务的知识(如忘记如何识别狗)。这就像一个人学会新技能后,突然忘了以前会的东西。持续学习就是要解决这个问题:学新不忘旧举个例子:手机上的图像分类假设你手机里的相册分类功能:第一天:学会了识别“猫”和“狗”第二天:学会了识别“花”第三天:学会了识别“汽车”如果使用普通深度学习模型,每学一个新类别,旧的识别能力就会下降。而持续学习的目标是:在学会识别汽车的同时,依然能准确识别猫、狗和花。主要方法分类1. 基于正则化的学习(Regularization-based)思想:保护对旧任务重要的参数,不让它们被大幅修改。典型算法:EWC(Elastic Weight Consolidation)计算哪些参数对旧任务更重要在学习新任务时,限制这些参数的变化类比:重要记忆加“锁”,只允许非关键参数调整。2. 基于回放的方法(Replay-based)思想:保存一部分旧数据,学习新任务时“复习”旧数据。类型:真实回放:存少量旧样本(如每类存10张图)生成回放:用生成模型(如GAN)生成旧数据类比:人类通过“复习笔记”来巩固记忆。3. 基于架构扩展的方法(Architecture-based)思想:为新任务分配新的网络结构,避免干扰旧任务。典型做法:为每个任务分配独立的子网络使用门控机制选择激活哪部分缺点:模型会越来越大。4. 元学习与优化策略思想:训练模型具备“快速学习 + 不忘旧”的能力。如:Online EWC、MAS(Memory Aware Synapses)Python 伪代码示例(回放机制)# 模拟持续学习过程:任务1(猫/狗)→ 任务2(花) import torch import torch.nn as nn import torch.optim as optim # 假设模型 model = nn.Sequential( nn.Linear(784, 256), nn.ReLU(), nn.Linear(256, 128), nn.ReLU(), nn.Linear(128, 2) # 初始输出2类 ) optimizer = optim.Adam(model.parameters(), lr=1e-3) criterion = nn.CrossEntropyLoss() # 存储旧数据(回放缓冲区) replay_buffer = [] # 存 (image, label) # 第一阶段:训练任务1(猫/狗) for epoch in range(10): for x, y in dataloader_task1: # 混合当前数据和回放数据 if len(replay_buffer) > 0: x_rep, y_rep = zip(*replay_buffer) x = torch.cat([x, torch.stack(x_rep)]) y = torch.cat([y, torch.stack(y_rep)]) output = model(x) loss = criterion(output, y) optimizer.zero_grad() loss.backward() optimizer.step() # 保存当前任务的部分数据到回放缓冲区 some_data_from_task1 = [(img, label) for img, label in dataset_task1_sampled] replay_buffer.extend(some_data_from_task1) # 扩展输出层以适应新任务(可选策略) model.add_module("fc3", nn.Linear(128, 3)) # 现在3类 # 第二阶段:训练任务2(花),同时回放猫/狗数据 for epoch in range(10): for x, y in dataloader_task2: # 加入回放数据 if len(replay_buffer) > 0: x_rep, y_rep = zip(*replay_buffer) x = torch.cat([x, torch.stack(x_rep)]) y = torch.cat([y, torch.stack(y_rep)]) output = model(x) loss = criterion(output, y) optimizer.zero_grad() loss.backward() optimizer.step() 评估指标准确率矩阵(Accuracy Matrix):记录每个任务在每个学习阶段的性能平均准确率(Average Accuracy)遗忘程度(Forgetting Measure):旧任务性能下降多少应用场景智能手机:持续学习用户行为自动驾驶:适应新道路环境推荐系统:跟踪用户兴趣变化工业检测:新增缺陷类型无需重训总结持续学习的目标是让 AI 像人一样:不断学习新东西,同时不忘旧知识。它是通向**通用人工智能(AGI)**的重要一步,尤其在数据动态变化、隐私要求高(不能重复访问旧数据)的场景中具有重要意义。
  • Zero-Shot Learning
    Zero-Shot Learning(零样本学习)Zero-Shot Learning(ZSL)是一种机器学习方法,其核心思想是:模型能够识别或处理在训练过程中从未见过的类别或任务。换句话说:没有见过某类数据,也能做出合理判断。举个例子:动物分类假设你训练了一个模型,只学过以下动物的图片:狗猫老虎狮子现在,给它一张“豹子”的图片,模型从未在训练中见过“豹子”这个类别。但如果模型知道:豹子 = 有斑点、生活在草原、是大型猫科动物它之前学过“老虎”也有斑纹、是大型猫科动物它就可以推理出:“这可能是一种新的大型猫科动物”,从而正确分类。这就是 零样本学习 的能力——通过知识迁移,识别未见类别。实现方式Zero-Shot Learning 通常依赖语义信息(semantic attributes)或文本描述来建立“已知类别”和“未知类别”之间的联系。常见方法:属性映射(Attribute-based)每个类别用一组属性描述(如:有羽毛、会飞、有喙 → 鸟)模型学习从图像特征映射到属性空间对新类别,只要提供属性,就能匹配文本描述 + 嵌入空间对齐(如 CLIP)图像和文本被映射到同一个向量空间训练时学会“图片特征”与“文本描述”的对应关系推理时,用类别名称的文本(如“斑马”)直接匹配图像Python 示例(使用 CLIP 实现 Zero-Shot 图像分类)import torch from PIL import Image import clip # 加载预训练模型 device = "cuda" if torch.cuda.is_available() else "cpu" model, preprocess = clip.load("ViT-B/32", device=device) # 加载图片 image = preprocess(Image.open("zebra.jpg")).unsqueeze(0).to(device) # 定义可能的类别描述(即使模型从未见过这些类别的训练数据) text = clip.tokenize(["a photo of a zebra", "a photo of a horse", "a photo of a cheetah", "a photo of a car", "a photo of a bird"]).to(device) # 推理:计算图像与每个文本的相似度 with torch.no_grad(): image_features = model.encode_image(image) text_features = model.encode_text(text) logits_per_image, _ = model(image, text) probs = logits_per_image.softmax(dim=-1).cpu().numpy() print("预测概率:", probs) # 输出每个类别的可能性 输出示例:预测概率: [[0.95 0.03 0.01 0.005 0.005]] 模型从未在“斑马”上训练过,但通过文本描述“a photo of a zebra”,依然能正确识别!应用场景图像识别:识别新物种、新商品自然语言处理:理解新词、新意图推荐系统:推荐未见过的物品多模态任务:图文匹配、跨模态检索与 Few-Shot 的区别类型样本数量说明Zero-Shot0 个完全没见过该类别Few-Shot少量(如 1~5 个)见过极少量样本Supervised大量正常监督学习优点可扩展性强:无需重新训练即可识别新类别节省标注成本:不需要为每个新类收集大量数据更接近人类学习方式:通过描述理解新事物缺点依赖语义描述质量性能通常低于有监督学习容易受文本表述方式影响总结Zero-Shot Learning 是一种“见所未见,也能识”的能力,关键在于:将知识解耦为“语义”和“特征”,通过语义桥梁识别新类。它是现代多模态模型(如 CLIP、BLIP)的核心能力之一,推动了 AI 向更通用、更灵活的方向发展。
  • 时间差分学习
    时间差分学习(Temporal Difference Learning,简称 TD 学习)是强化学习中一种核心的无模型(model-free)学习方法,用于估计值函数(如状态值函数 V(s)V(s)V(s) 或动作值函数 Q(s,a)Q(s,a)Q(s,a))。它结合了蒙特卡洛方法和动态规划的优点。核心思想时间差分学习通过**自举(bootstrapping)**的方式,利用后续估计值来更新当前值函数。它的基本更新逻辑是:当前预测 ← 当前预测 + 学习率 × 误差(新信息 - 旧预测)这个“误差”就是所谓的 TD误差(Temporal Difference Error):TD误差 = [即时奖励 + 折扣后下一状态的估计值] - 当前状态的估计值即:δ = r + γ·V(s') - V(s) 然后更新值函数:V(s) ← V(s) + α·δ其中:ααα:学习率γγγ:折扣因子rrr:当前获得的奖励sss:当前状态s′s's′:下一个状态举个例子:走格子游戏假设有一个智能体在走格子,每个格子是一个状态。目标是学会每个状态的“好坏”程度(值函数)。过程如下:智能体在状态 A,估计值 V(A)=0.5V(A) = 0.5V(A)=0.5它采取某个动作,进入状态 B,获得奖励 r=1r = 1r=1状态 B 的估计值 V(B)=0.8V(B) = 0.8V(B)=0.8计算 TD 误差:δ=r+γ⋅V(B)−V(A)=1+0.9×0.8−0.5=1.22δ = r + γ·V(B) - V(A) = 1 + 0.9×0.8 - 0.5 = 1.22 δ=r+γ⋅V(B)−V(A)=1+0.9×0.8−0.5=1.22更新 A 的值:V(A)←0.5+0.1×1.22=0.622V(A) ← 0.5 + 0.1×1.22 = 0.622 V(A)←0.5+0.1×1.22=0.622这样,A 的值被“拉高”,因为它通向一个好状态。TD 与蒙特卡洛(MC)的区别特性时间差分(TD)蒙特卡洛(MC)是否需要完整回合否(可以在线学习)是(必须等到回合结束)更新方式自举(用估计值更新)真实回报(完整轨迹)方差低高偏差有(因自举)无(如果模型正确)学习速度通常更快较慢TD 可以在每一步就学习,不需要等游戏结束,适合实时学习。TD 方法的两种主要形式TD(0):只看下一步,即上面的例子。TD(λ):结合多步信息,λ 控制“看多远”:λ = 0 → 等价于 TD(0)λ = 1 → 接近蒙特卡洛Python 代码示例:TD(0) 估计值函数import numpy as np # 假设有 5 个状态,初始化值函数 V = np.zeros(5) # V[0] 到 V[4] alpha = 0.1 gamma = 0.9 # 模拟一条轨迹:状态序列和奖励 # 格式:(状态, 奖励, 下一状态) trajectory = [ (0, 0, 1), (1, 0, 2), (2, 0, 3), (3, 1, 4), (4, 0, -1) # 终止状态 ] # TD(0) 更新 for s, r, s_next in trajectory: if s_next == -1: # 终止状态 td_error = r - V[s] else: td_error = r + gamma * V[s_next] - V[s] V[s] += alpha * td_error print("更新后的值函数:", V) 输出示例:更新后的值函数: [0.0009 0.009 0.09 0.81 0.9 ] 可以看到,靠近奖励的状态值被逐步“传播”回去。TD 在 Q-learning 中的应用Q-learning 是 TD 的一种形式,更新公式为:Q(s,a) ← Q(s,a) + α [r + γ·max_a' Q(s',a') - Q(s,a)] 这就是 TD 更新在动作值函数上的应用,属于 off-policy TD 学习。优点可以在线学习(每步更新)不需要环境模型(无模型)比蒙特卡洛更稳定、收敛更快适合连续任务或长回合任务总结时间差分学习是一种基于误差的增量式学习方法,核心是:用“下一时刻的估计”来修正“当前时刻的预测”它让智能体能够在交互过程中逐步学会“哪些状态更好”,是 Q-learning、SARSA、DQN 等算法的基础。
  • TRPO 算法
    TRPO(Trust Region Policy Optimization,信赖域策略优化)是一种用于强化学习的策略优化算法,主要用于训练智能体在复杂环境中做出决策。它由 OpenAI 在 2015 年提出,是早期深度强化学习中非常重要的基于策略梯度的算法之一。核心思想TRPO 的目标是:在保证策略更新稳定的同时,逐步提升性能。传统策略梯度方法(如 REINFORCE 或 A2C)直接用梯度上升更新策略,但步长(学习率)不好控制:步子太大 → 策略崩溃(性能大幅下降)步子太小 → 学习太慢TRPO 解决这个问题的方法是:不直接用学习率,而是限制每次更新的“变化量”,确保新策略不会偏离旧策略太远。它通过引入“信赖域”(Trust Region)的概念,在每次更新时求解一个带约束的优化问题:在 策略变化不超过某个范围 的前提下,最大化预期收益的提升。这个“变化范围”通常用 KL散度(Kullback-Leibler Divergence)来衡量新旧策略之间的差异。数学形式(不展开公式,只讲逻辑)TRPO 求解如下问题:最大化:近似收益提升(优势函数加权和) 约束条件:新旧策略之间的 KL 散度 ≤ δ(一个小常数)也就是说:我们希望策略越“好”越好(收益高)但不能“变太多”,否则训练不稳定这种“带约束的优化”比“调学习率”更鲁棒。举个例子:训练机器人走路假设你正在训练一个机器人学走路:当前策略能让它走 5 步不倒你想改进策略,让它走得更远如果更新太猛:新策略可能完全不会走,直接摔倒(性能崩溃)TRPO 的做法是:允许策略改变,但限制“改变的程度”每次只允许“小步前进”,但方向是提升性能的这样即使某次更新效果一般,也不会导致灾难性退化就像“稳扎稳打”的学习方式。关键技术点优势函数(Advantage Function)用来评估某个动作比“平均水平”好多少。TRPO 使用广义优势估计(GAE)来更稳定地计算优势。KL 散度约束衡量新旧策略输出的动作概率分布之间的差异。太大会被限制。共轭梯度法 + 线搜索因为约束优化无法用标准反向传播,TRPO 使用共轭梯度法求解方向,再用线搜索确保不违反约束。Python 伪代码# 初始化策略网络(如神经网络) policy = PolicyNetwork() for iteration in range(num_iterations): # 1. 用当前策略收集一批数据(轨迹) trajectories = collect_trajectories(policy) # 2. 计算每个状态-动作的优势值(使用GAE) advantages = compute_advantages(trajectories) # 3. 构建目标函数:最大化优势加权和 objective = compute_expected_return(policy, trajectories, advantages) # 4. 计算旧策略(当前策略)的输出分布 old_policy = policy.get_distribution() # 5. 求解约束优化问题: # max objective # s.t. KL(new_policy, old_policy) <= delta # (使用共轭梯度和线搜索) policy.update_with_constraint(objective, old_policy, kl_constraint=0.01) 实际实现复杂,通常使用专门的强化学习库(如 Stable-Baselines3、RLlib)中的 TRPO 实现。优点稳定性高:由于信赖域约束,避免策略突变适合复杂控制任务:如机器人控制、连续动作空间无须调学习率:约束代替了学习率的作用缺点实现复杂:需要求解约束优化,计算开销大更新慢:每次更新需要多次计算KL散度和Hessian矩阵近似被后续方法改进:PPO(Proximal Policy Optimization)在 TRPO 基础上简化,更易用且性能相当应用场景连续控制任务(如 MuJoCo 机器人仿真)高维动作空间的强化学习对训练稳定性要求高的场景总结TRPO 是一种稳定、可靠的策略优化方法,核心思想是:“每次只允许策略做一点点改变,但要往更好的方向走。”它为后续的 PPO 等算法奠定了基础,虽然现在使用较少,但在强化学习发展史上具有重要地位。
  • Googlenet 介绍
    GoogLeNet(也称为 Inception v1)是 2014 年由 Google 的研究人员提出的一种深度卷积神经网络结构,在当年的 ImageNet 大规模视觉识别挑战赛(ILSVRC)中取得了优异成绩。它以高准确率和相对较低的计算量著称。核心思想GoogLeNet 的主要创新在于 Inception 模块,其目标是:提升网络的表征能力控制模型大小和计算成本在不显著增加参数的情况下增加网络深度和宽度Inception 模块结构Inception 模块的核心是 多尺度并行卷积 + 融合。它在同一层中使用多种尺寸的卷积核(如 1×1、3×3、5×5)和池化操作,然后将输出在通道维度上拼接起来。典型 Inception 模块包含:1×1 卷积:用于降维(减少通道数),降低计算量3×3 卷积5×5 卷积3×3 最大池化 + 1×1 卷积:保持尺寸一致1×1 卷积是 GoogLeNet 的关键技巧,它可以在不改变空间尺寸的情况下压缩通道数,显著减少计算量。网络整体结构GoogLeNet 由多个 Inception 模块堆叠而成,共约 22 层(因此也叫 Inception v1)。主要组成部分:初始层(Stem):前几层是普通卷积和池化,用于提取基础特征多个 Inception 模块:交替使用不同配置的 Inception 模块逐步提取更高级的语义特征全局平均池化:最后一层使用全局平均池化(Global Average Pooling)代替传统全连接层大幅减少参数数量输出层:一个小型全连接层 + Softmax,用于分类(ImageNet 有 1000 类)辅助分类器(Auxiliary Classifiers):在中间层插入两个辅助损失函数,用于反向传播时提供额外梯度,缓解梯度消失问题推理时通常忽略优点计算效率高:通过 1×1 卷积降维,减少参数和计算量准确率高:在 ImageNet 上表现优异参数少:约 500 万参数,远少于同期的 VGG(约 1.3 亿)避免过拟合:使用全局平均池化和 DropoutPython 代码示例(Keras 简化版结构)from tensorflow.keras.layers import Input, Conv2D, MaxPooling2D, AveragePooling2D from tensorflow.keras.layers import Concatenate, GlobalAveragePooling2D, Dense, Dropout from tensorflow.keras.models import Model def inception_module(x, filters_1x1, filters_3x3_reduce, filters_3x3, filters_5x5_reduce, filters_5x5, filters_pool_proj): # 1x1 branch branch1 = Conv2D(filters_1x1, (1, 1), activation='relu', padding='same')(x) # 3x3 branch branch2 = Conv2D(filters_3x3_reduce, (1, 1), activation='relu', padding='same')(x) branch2 = Conv2D(filters_3x3, (3, 3), activation='relu', padding='same')(branch2) # 5x5 branch branch3 = Conv2D(filters_5x5_reduce, (1, 1), activation='relu', padding='same')(x) branch3 = Conv2D(filters_5x5, (5, 5), activation='relu', padding='same')(branch3) # Pool branch branch4 = MaxPooling2D((3, 3), strides=(1, 1), padding='same')(x) branch4 = Conv2D(filters_pool_proj, (1, 1), activation='relu', padding='same')(branch4) # Concatenate all branches return Concatenate(axis=-1)([branch1, branch2, branch3, branch4]) # 构建简化版 GoogLeNet input_layer = Input(shape=(224, 224, 3)) # Initial layers x = Conv2D(64, (7, 7), strides=(2, 2), padding='same', activation='relu')(input_layer) x = MaxPooling2D((3, 3), strides=(2, 2), padding='same')(x) # Inception modules x = inception_module(x, 64, 96, 128, 16, 32, 32) x = inception_module(x, 128, 128, 192, 32, 96, 64) # Global Average Pooling + Classifier x = GlobalAveragePooling2D()(x) x = Dropout(0.4)(x) output = Dense(1000, activation='softmax')(x) model = Model(inputs=input_layer, outputs=output) model.summary() 注意事项实际的 GoogLeNet 包含两个辅助分类器,训练时使用加权损失使用了 LRN(局部响应归一化),但后续研究发现作用不大后续有 Inception v2、v3、v4 等改进版本总结GoogLeNet 的贡献在于:提出 Inception 模块,实现多尺度特征提取使用 1×1 卷积降维,提升效率全局平均池化减少全连接层参数在保证高精度的同时控制模型复杂度它是深度学习发展中的重要里程碑,为后续高效网络设计(如 ResNet、MobileNet)提供了思路。
  • LSTM 解析
    LSTM 模型,即 Long Short-Term Memory(长短期记忆网络)。什么是 LSTM?LSTM 是一种特殊的 循环神经网络(RNN),专门设计用来解决传统 RNN 在处理长序列时出现的 梯度消失 和 梯度爆炸 问题。它能够学习长期依赖关系,适合处理时间序列、自然语言、语音等序列数据。核心思想LSTM 能够记住或遗忘信息,关键在于它引入了 “记忆细胞”(Cell State) 和三个 “门”结构:遗忘门(Forget Gate)决定哪些信息从记忆中丢弃。比如:读到“我昨天去了北京”之后,再读“今天天气很好”,模型会忘记“昨天”的细节。输入门(Input Gate)决定哪些新信息要加入记忆。比如:当前词是“下雨了”,就把“下雨”这个状态加入记忆。输出门(Output Gate)根据当前记忆,决定输出什么。比如:根据上下文判断下一个词是“带伞”。这些门通过 Sigmoid 和 乘法操作 控制信息流动,让模型可以有选择地保留或更新长期信息。举个例子:情感分析任务:判断一句话的情感是正面还是负面。句子:“这部电影一开始很无聊,但后面特别精彩。”传统 RNN 可能只记住最后的“精彩”,忽略前面的转折。LSTM 可以通过记忆细胞记住“一开始无聊”,再结合“但后面精彩”,最终正确判断为“整体正面”。它能捕捉“但”这种转折词带来的长期依赖。Python 代码示例(使用 Keras)import numpy as np from tensorflow.keras.models import Sequential from tensorflow.keras.layers import LSTM, Dense from tensorflow.keras.preprocessing.sequence import pad_sequences # 模拟数据:5 个句子,每个句子用数字表示词(如词 ID) data = [ [1, 2, 3], [1, 2], [4, 5, 6, 7], [2, 3], [8, 9, 10, 11, 12] ] labels = [0, 1, 1, 0, 1] # 情感标签:0=负面,1=正面 # 序列长度统一 data = pad_sequences(data, maxlen=10, padding='post') # 构建 LSTM 模型 model = Sequential([ # 嵌入层:将词 ID 映射为向量(实际使用中需要预训练词向量) # 这里简化,假设输入已经是向量,用 LSTM 直接处理 LSTM(32, input_shape=(10, 1)), # 32 个 LSTM 单元,输入序列长度 10,每步 1 维 Dense(1, activation='sigmoid') # 二分类输出 ]) # 编译模型 model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy']) # 训练模型 model.fit(data.reshape(5, 10, 1), labels, epochs=10, batch_size=2) # 预测 pred = model.predict(data.reshape(5, 10, 1)) print("预测结果:", pred.flatten()) 注意:真实场景中,输入通常是词嵌入(如 Word2Vec、GloVe 或 BERT),这里为了简化用数字 ID 模拟。应用场景自然语言处理(NLP):情感分析、机器翻译、文本生成语音识别:将音频序列转为文字时间序列预测:股票价格、天气、销量预测手写识别:识别手写字符序列优缺点优点:能处理变长序列可捕捉长期依赖关系适用于多种序列任务缺点:训练速度慢,计算开销大参数多,容易过拟合现在很多任务已被 Transformer(如 BERT、GPT)取代总结LSTM 是一种强大的序列建模工具,通过“门控机制”实现了对长期信息的有效记忆和控制。虽然近年来被更先进的模型(如 Transformer)部分取代,但在中小规模序列任务中仍广泛使用。
总条数:2013 到第
上滑加载中