UE5 Lyra项目解析:从模块化架构到GAS集成,构建完整游戏框架

ue5 lyra探索分析1 刚开始默认的地图中 然后就把这些数据传送给了 lyragammode了 在这个函数里 处理上面的lyraexperiencedefinition数据 其中包括pawn是谁 都有什么action 阅读详情

1. 项目概述:为什么Lyra是UE5新手的“毕业设计”?

如果你刚学完UE5的官方教程,或者跟着几个零散的蓝图、C++视频敲了些小功能,现在想做一个属于自己的完整游戏,是不是感觉无从下手?引擎的各个模块像一座座孤岛,你知道它们存在,却不知道怎么把它们连接成一片大陆。这种面对空白项目时的茫然和恐惧,我称之为“Demo恐惧症”——你做了无数个Demo,但每一个都停在“玩具”阶段,永远迈不出通向“产品”的那一步。

我第一次接触UE5时也这样。学了一堆零散知识:角色移动、动画蓝图、UI交互、粒子特效……每个单独拿出来都能做个像模像样的小演示。但当我新建一个空白项目,试图把这些东西组合成一个哪怕最简单的第三人称射击游戏时,瞬间就懵了。角色怎么重生?游戏模式怎么管理状态?网络同步怎么做?资源怎么按需加载?这些问题,小Demo里根本不会涉及,却是真实游戏项目的基石。

直到我遇到了Lyra Starter Game。它不是又一个教你做某个特定功能的教程,而是一个Epic官方提供的、生产级别的多人游戏示例项目。你可以把它理解为一个“半成品”的竞技场射击游戏,它已经帮你搭建好了游戏所需的所有核心系统框架。你的任务不是从零开始造轮子,而是在这个坚实、规范、可扩展的框架上,去实现你自己的游戏创意和玩法。这就像拿到了一套精装修的房子,水电网络、墙体结构都已就位,你需要做的只是根据自己的喜好去布置软装和隔断。

对于新手而言,Lyra的价值在于它提供了一个“完整游戏”的认知地图。通过拆解和学习它,你能真正理解一个商业级游戏项目是如何组织代码、管理状态、处理输入和进行资源管理的。这远比做十个孤立的Demo更有价值。接下来,我们就深入这个“脚手架”,看看它如何帮你告别恐惧,迈出独立开发的第一步。

2. Lyra项目核心架构深度解析

2.1 模块化设计:告别“上帝类”混乱

打开Lyra的源码,第一印象可能是“复杂”。但这份复杂是有序的复杂,其核心思想是 模块化(Modularity) 和 关注点分离(Separation of Concerns) 。这与很多新手习惯的“把所有逻辑都塞进角色蓝图或游戏模式蓝图”的做法截然不同。

Lyra将游戏功能拆分为多个独立的Gameplay Feature(游戏功能特性)模块。例如:

  • ShooterCore : 处理武器、弹药、伤害计算、命中反馈等核心射击逻辑。
  • GameplayMessageRouter : 一个轻量级的消息总线系统,用于不同模块间的低耦合通信。比如,武器开火模块不需要直接调用UI模块来更新弹药数,它只需要广播一条“弹药数量改变”的消息,UI模块监听并响应即可。
  • ContextEffects : 统一管理游戏中的上下文特效(如脚步声、命中火花、受击音效),根据表面类型、物理材质自动匹配播放合适的音效和粒子。

这种设计的好处是显而易见的。当你需要修改武器系统时,你几乎只需要关注 ShooterCore 模块;当你想增加一个成就系统时,可以新建一个 AchievementSystem 模块,通过消息总线与其他模块交互,而无需修改现有代码。这极大地降低了代码的耦合度和维护成本。

实操心得 :刚开始阅读Lyra代码时,不要试图一次性理解所有模块。建议采用“按图索骥”法:从你最关心的功能入手(比如“角色如何拿起武器”),在编辑器中找到相关蓝图或C++类,然后利用IDE的“查找引用”功能,沿着调用链去追溯相关的模块和消息流。这样学习更有针对性,也更容易建立成就感。

2.2 游戏框架(Game Framework)的重构

UE传统的GameMode、PlayerController、PlayerState、GameState等类在Lyra中被重新组织和增强,形成了更清晰、职责更明确的框架。

  • LyraGameMode / LyraExperienceDefinition : Lyra引入了“游戏体验(Experience)”的概念。一个 ExperienceDefinition 数据资产(Data Asset)定义了单局游戏的所有规则:使用哪个Pawn、哪个玩家控制器、加载哪些Gameplay Feature、初始地图是什么、有哪些可用的英雄(职业)等。而 GameMode 的主要职责是加载和管理当前的Experience。这意味着,你可以通过配置不同的Experience资产,轻松实现“团队死斗”、“占领据点”等多种游戏模式,而无需创建多个GameMode蓝图。

  • LyraPlayerController / LyraPlayerState : 控制器(Controller)更专注于处理玩家输入和UI;玩家状态(PlayerState)则存储与单个玩家相关的、需要网络同步的数据,如击杀数、死亡数、当前选择的英雄等。Lyra扩展了它们,增加了与Experience、AbilitySystem(技能系统)的对接逻辑。

  • LyraPawn / LyraHeroComponent

ue5 lyra的角色动画系统 持续更新中。。。。 当然弊端是有的,如果不同的骨架,骨架偏差比较大, retarget后动画会有偏差,所以虚幻做的retarget大面上看上去是美好的,如果要抠细节,会有很多的不足。在这些逻辑中该用到AI中的layer都用了layer,只不过这些layer有的是空的,逻辑都在其他动画蓝图中。这个方法去调用,相当于用B中的layer覆盖了A中的layer的逻辑,相当于具体的逻辑实现都在B中实现。在A中写了整个的动画逻辑比如locomotion,上半身特定动画融合,挨枪子的动画融合,全身动画融合等。 阅读详情

相关推荐

UE5.2 LyraDemo源码阅读笔记(一)

GameMode:默认模式>默认游戏模式>选中B_LyraGameMode。 启动关卡:默认地图>编辑器开始地图。GameFeature: 启动插件:编辑/插件,在插件列表中选中GameFeature和Modular Gameplay。 创建GameFeature:编辑>插件>+添加>游戏功能(GameFeature,适用C++) 保存路径不能更改:真要改同时要去AssetManager更改对于的路径。 GameFeature入口: 默认下GameFeature插件会加载所有的自定义GameFeature功

u012740992的专栏 1992

从Lyra到Gyra:UE5游戏框架进阶与GAS系统实战解析

Gameplay Ability System(GAS)是虚幻引擎中用于构建复杂技能与状态管理的核心框架,其基于组件化与数据驱动的设计理念,通过Ability、AttributeSet、GameplayEffect等核心类实现技能逻辑、属性管理与效果应用的解耦。该技术体系的价值在于为大型多人在线游戏提供了可预测、可同步且高度模块化的能力解决方案,尤其适用于MMO、MOBA、动作RPG等需要处理大量技能交互与状态同步的场景。本文聚焦于UE5官方示例项目Lyra所展示的工业化框架实践,针对开发者在学习过程中常遇

weixin_30652897的博客 376

UE5 Lyra框架深度解析:从模块化架构到GAS实战应用

在现代游戏开发中,模块化架构与数据驱动设计是构建可维护、可扩展项目的核心思想。其原理在于通过功能解耦和配置与逻辑分离,提升团队协作效率与项目迭代速度。这一技术范式在大型游戏引擎中尤为重要,能有效管理复杂度。以虚幻引擎5(UE5)为例,其官方提供的Lyra示例项目便是这一思想的集大成者,它深度集成了Gameplay Ability System,为角色技能、属性管理与战斗逻辑提供了工业级的解决方案。Lyra框架通过插件化设计,将游戏功能拆分为独立模块,并结合增强输入系统与Common UI,实现了从底层框架到

weixin_34293059的博客 429

拆解虚幻引擎5 Lyra项目:GAS架构实战与核心组件详解

Gameplay Ability System(GAS)是虚幻引擎中用于构建复杂角色技能与状态系统的核心框架,其设计遵循了组件化与数据驱动的现代游戏架构理念。该系统通过Ability System Component(ASC)作为中枢,将游戏逻辑(GameplayAbility)、状态修改(GameplayEffect)、属性管理(AttributeSet)与视觉表现(GameplayCue)解耦,实现了服务器权威与客户端预测的无缝协同。在多人游戏开发中,这种架构确保了战斗逻辑的同步可靠性与操作响应的即时性

weixin_30859423的博客 309

UE5 Lyra示例项目全解析:从架构到实战的进阶指南

在游戏引擎领域,UE5凭借强大的实时渲染与开放工具链,成为团队和个人开发者构建高质量项目的热门选择。官方提供的示例项目往往藏着大量工程智慧,Lyra就是典型代表。它不仅是一个可运行的第三人称射击游戏,更是一套基于模块化设计、由数据驱动的完整游戏框架。通过理解其核心模块划分、Experience配置机制,以及GAS(Gameplay Ability System)、CommonUI等关键系统的协作原理,开发者能够快速理解商业级项目的组织方式。无论是想学习底层架构设计,还是解决多平台UI适配、技能网络同步等实战

weixin_33924770的博客 287

Lyra框架深度拆解:UE5模块化与数据驱动架构实战指南

在大型虚幻引擎项目中,模块化设计与数据驱动是解决代码耦合与扩展性问题的核心思想。通过将功能拆分为独立组件、将玩法逻辑配置化为数据资产,开发者可以显著提升项目的并行开发效率与迭代灵活性。这种架构在需要支持多玩法模式、复杂角色状态和跨平台UI的游戏中尤为关键,例如利用Gameplay Ability System(GAS)管理技能与属性,并通过Experience机制动态组装玩法规则。理解这些底层原理,不仅有助于驾驭商业级框架,也能为个人项目打下健壮的架构基础。本文以Epic官方示例项目Lyra为对象,系统拆解

weixin_31960565的博客 278

基于UE5 Lyra框架快速搭建多人对战游戏原型实战指南

在虚幻引擎5(UE5)多人游戏开发中,网络同步、技能系统和UI框架是核心挑战。Gameplay Ability System (GAS) 提供了强大的技能与属性管理架构,而网络复制则是确保多玩家体验一致性的关键技术。这些技术共同构成了现代游戏后端逻辑的基石,其价值在于能高效、可预测地处理复杂的游戏状态与交互。在团队竞技、大世界探索等应用场景中,一个稳固的底层框架至关重要。本文聚焦于Epic官方推出的Lyra Starter Game框架,它正是集成了GAS、Common UI等UE5核心特性的最佳实践样板。

weixin_30575517的博客 258

UE5 Lyra游戏架构解析:从懵懂到工程思维

游戏开发中,架构设计是决定项目能否规模化的关键。现代引擎普遍采用模块化、数据驱动和组件化方式,以应对复杂玩法需求。在UE5中,GAS(Gameplay Ability System)与增强输入等系统的集成已成为主流实践,而Lyra示例项目正是Epic官方对这套工程范式的完整呈现。它并不只是一个画面展示Demo,而是一套可复用的游戏框架,覆盖了Pawn组装、技能系统、UI输入管理、游戏体验配置等全链路。对于从蓝图小Demo迈向大型工程的开发者而言,学习Lyra能深刻理解数据资产如何驱动玩法逻辑、插件如何按需加

weixin_30430677的博客 239

UE5 Lyra动画系统架构解析与骨架重定向实战指南

在游戏开发中,动画系统是连接游戏逻辑与视觉表现的核心桥梁,其设计直接影响角色的表现力与项目的可维护性。传统单一动画蓝图架构在管理复杂状态机时,常面临逻辑臃肿、难以扩展的挑战。现代解决方案通过分层解耦与数据驱动,将动画逻辑拆分为游戏层、动画实例层、子实例层与最终混合层,实现高内聚低耦合。其中,游戏能力系统(GAS)与动画蓝图接口的深度集成,使得状态标识与事件传递更为清晰高效。这种架构尤其适用于需要处理大量动画片段与复杂过渡的多人动作游戏。本文以UE5官方示例项目Lyra为蓝本,深入剖析其基于GAS的模块化动画

weixin_33816946的博客 344

UE引擎架构深度解析:GAS、Lyra、多线程与平台能力实战

游戏引擎的架构设计决定了中大型项目的开发效率与运行品质。UE引擎采用模块化、插件化的组织方式,通过反射系统与垃圾回收机制管理运行时对象生命周期,支撑起复杂玩法系统的构建。GAS(Gameplay Ability System)为技能、状态与数值交互提供了成熟的事件驱动框架,Lyra示例项目则展示了插件化玩法模块与GAS结合的最佳实践。多线程渲染架构中,游戏线程、渲染线程与RHI线程的协作直接关系到帧率表现与性能瓶颈定位。跨平台开发时,利用引擎提供的平台能力查询接口,可根据设备硬件档次实施分层适配,实现画质与

weixin_29847829的博客 255

UE5 GAS 学习笔记 10.3 LyraStarter案例解析(上)

Lyra初学者游戏包是一个全新的游戏玩法示例项目,与同步推出。这个初学者游戏包是在虚幻引擎5的开发过程中同步构建的。它将随着虚幻引擎新版本的推出而更新,以演示有关游戏开发的最新最佳实践。 虽然它发布的功能集只是核心基础,该游戏仍然非常适合游戏开发者用来创建新项目,也是一套实践用学习资源。 Lyra初学者游戏包展示了使用Epic在线服务()实现从移动端到高端PC及跨平台多人游戏的伸缩性,并提供两种不同的游戏模式:扩张模式(团队死亡竞赛)以及回旋模式(控制点)。........................

CloudHuCoding 1477

知识图谱本体建模之RDF、RDFS、OWL详解

(一)知识图谱本体建模之RDF、RDFS、OWL详解 1.语义网体系 知识图谱于2012年由Google提出,并不是新概念,而是由语义网络(Semantic Network)衍生而来。语义网络由相互连接的节点和边组成,节点表示概念或者对象,边表示他们之间的关系。RDF,RDFS与OWL都是基于语义网的知识表示框架,在节点和边的取值上做了约束,制定了统一标准,为多源数据的融合提供了便利。RDF,RDFS/OWL 属于语义网技术栈,它们的提出,使得语义网克服了语义网络的缺点。其语义网技术栈如下所示。 2.RD

周周的专栏 1万+

深入浅出:CosineLRScheduler 调度器的原理与实战应用

本文深入解析了CosineLRScheduler调度器的核心原理与实战应用,详细介绍了余弦退火算法及其在深度学习模型训练中的优势。通过参数配置建议、PyTorch实现示例和常见问题解决方案,帮助开发者高效应用该调度器提升模型性能,特别适用于计算机视觉和自然语言处理任务。

sss66的博客 853

保姆级教程:用STM32H743+TJA1042T玩转FDCAN,CubeMX配置1M/5M双速率通信(附完整代码)

本文提供STM32H743与TJA1042T实现FDCAN双速率通信的保姆级教程,详细讲解CubeMX配置1M/5M双速率通信的全过程,包括硬件连接、时钟树配置、过滤器设置及中断管理,并附完整代码示例,助力开发者快速掌握FDCAN高速通信技术。

weixin_30698297的博客 467

EtherCAT主站SOEM -- 24 -- 基于STM32F767IGT6搭建自己的SOEM-EtherCAT主站

以上就是EtherCAT主站SOEM – 23 – 基于STM32F767IGT6搭建自己的SOEM-EtherCAT主站的内容。有不明白的地方欢迎留言;有建议欢迎留言,我后面编写文档好改进。创作不容,如果文档对您有帮助,记得给个赞。

常驻客栈的博客--嵌入式EtherCAT 3529

CKAD-CN考试之路----12

显然,对应的value都已经实现了加密.保存退出,等待pod重新创建。确认secret是否被加密。编辑secret文件。

Q先生 435

Python从0到100(二):Python语言介绍及第一个Pyhon程序

Python从0到100(二):Python语言介绍及第一个Pyhon程序。与C和Java比,Python的学习成本和难度曲线不是低一点,更适合新手入门,自底向上的技术攀爬路线。

拥有百余位万粉技术博主、200余位可合作代发博主,私域技术社群规模达千人,商务合作私信 5428

蓝牙配对鉴权过程深度剖析:Just Works/Numeric Comparison/Passkey Entry/OOB 协议流程

当你新买的智能手表与手机配对时,是否遇到过这样的情况:有时只需在手机上点击 "确认" 即可完成配对,有时却需要在手表上输入手机显示的 6 位数字,而连接车载蓝牙时可能又需要输入固定密码?这些差异背后,是蓝牙配对鉴权机制在默默工作。蓝牙配对鉴权是设备间建立安全连接的核心环节,直接关系到数据传输的保密性和设备身份的真实性。​

byte轻骑兵的技术小窝 3564

IEC 104电力规约详细解读(五) - 遥控

主站下发遥控选择命令,子站进行遥控选择返校,若成功则回答遥控选择成功报文,若失败则回答失败报文。主站下发取消遥控命令或者遥控执行命令行。子站皆以报文的镜像确认。遥控命令用来实现对一个可操作设备状态的改变。在配电自动化中,包括单点命令和双点命令。通常,单点命令用于控制单点信息对象;双点命令用于控制双点信息对象。

张二狗的博客 7333

NTscan扫描工具

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

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

假人有限元模型

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

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

上一篇: UE5贴花拉伸难题:从原理到实战的两种高效解决方案
下一篇: Java面试宝典:从基础到高并发的系统化指南
weixin_34326558
博客等级 码龄11年 5498粉丝 1207原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值