领域驱动设计(DDD)核心解析

领域驱动设计精要 领域驱动设计精要,DDD大神的神作,5个资源分,你买不了吃亏,买不了上当 立即下载

📕我是廖志伟,一名Java开发工程师、《Java项目实战——深入理解大型互联网企业通用技术》(基础篇)、(进阶篇)、(架构篇)清华大学出版社签约作家、Java领域优质创作者、优快云博客专家、阿里云专家博主、51CTO专家博主、产品软文专业写手、技术文章评审老师、技术类问卷调查设计师、幕后大佬社区创始人、开源项目贡献者。

📘拥有多年一线研发和团队管理经验,研究过主流框架的底层源码(Spring、SpringBoot、SpringMVC、SpringCloud、Mybatis、Dubbo、Zookeeper),消息中间件底层架构原理(RabbitMQ、RocketMQ、Kafka)、Redis缓存、MySQL关系型数据库、 ElasticSearch全文搜索、MongoDB非关系型数据库、Apache ShardingSphere分库分表读写分离、设计模式、领域驱动DDD、Kubernetes容器编排等。不定期分享高并发、高可用、高性能、微服务、分布式、海量数据、性能调优、云原生、项目管理、产品思维、技术选型、架构设计、求职面试、副业思维、个人成长等内容。

Java程序员廖志伟

🌾阅读前,快速浏览目录和章节概览可帮助了解文章结构、内容和作者的重点。了解自己希望从中获得什么样的知识或经验是非常重要的。建议在阅读时做笔记、思考问题、自我提问,以加深理解和吸收知识。阅读结束后,反思和总结所学内容,并尝试应用到现实中,有助于深化理解和应用知识。与朋友或同事分享所读内容,讨论细节并获得反馈,也有助于加深对知识的理解和吸收。💡在这个美好的时刻,笔者不再啰嗦废话,现在毫不拖延地进入文章所要讨论的主题。接下来,我将为大家呈现正文内容。

优快云

领域驱动设计(DDD)知识体系详解

一、战略设计层

在领域驱动设计中,战略设计层是整个设计架构的基石,它关注于如何将业务领域划分为不同的部分,以及如何定义这些部分的边界和交互。

1. 领域划分

领域划分是DDD的核心概念之一,它将复杂的业务系统分解为多个相互关联的领域。以下是领域划分的关键点:

  • 核心域:业务价值最高的部分,通常包含业务的核心概念和规则。例如,在电商系统中,核心域可能包括商品管理、订单处理、库存管理等。在技术实现上,核心域的模型通常以实体、值对象、领域服务等形式呈现,并通过领域事件进行状态变更的追踪。

  • 支撑域:提供核心域所需的服务或资源的部分,如用户管理、权限管理等。支撑域的设计需要与核心域保持一定的独立性,以便于独立开发和维护。在技术实现上,支撑域可以通过接口定义服务,使用服务定位器模式实现服务的动态调用。

  • 通用域:提供跨多个领域的通用功能,如日志记录、缓存等。通用域的设计应遵循单一职责原则,确保其功能的通用性和可复用性。在技术实现上,通用域可以通过抽象层或服务总线实现。

2. 子域拆分原则

子域拆分是领域划分的细化,它遵循以下原则:

  • 高内聚:子域内部组件紧密相关,职责明确。例如,在电商系统中,订单子域可能包含订单实体、订单服务、订单仓储等组件,它们共同负责订单的管理。

  • 低耦合:子域之间交互简单,减少依赖。例如,订单子域与用户子域之间的交互可以通过用户ID进行,避免直接依赖。

  • 单一职责:每个子域只负责一个特定的业务功能。例如,库存子域只负责库存的管理,不涉及订单的处理。

3. 限界上下文边界定义

限界上下文是领域模型的一个边界,它定义了领域模型中的一部分,并规定了该部分如何与其他部分交互。边界定义应考虑:

  • 业务边界:基于业务逻辑划分。例如,在电商系统中,订单子域的业务边界可能包括订单创建、订单修改、订单取消等。

  • 技术边界:基于技术实现或团队职责划分。例如,订单子域的技术边界可能包括使用特定的数据库、应用框架等。

4. 统一语言

统一语言是确保团队成员对领域模型有共同理解的关键。构建术语表的方法包括:

  • 术语表构建:收集领域专家的术语,形成统一的语言。例如,通过组织研讨会、访谈等方式收集术语。

  • 跨团队语义对齐:通过文档、培训等方式确保团队成员理解一致。例如,编写领域模型文档、组织培训课程等。

  • 上下文映射模式:定义不同团队之间的合作关系和客户-供应商等关系。例如,通过接口定义、服务契约等方式定义合作关系。

二、战术设计层

战术设计层是战略设计层的具体实现,它涉及具体的架构和设计决策。

1. 基础构件

  • 实体标识设计:使用UUID或数据库序列确保实体唯一性。例如,可以使用雪花算法生成分布式唯一ID。

  • 值对象不可变性实现:确保值对象一旦创建,其值不可改变。例如,可以将值对象的属性设置为只读,并提供构造函数进行初始化。

2. 服务架构

  • 领域服务与应用服务区分:领域服务处理业务逻辑,应用服务处理外部交互。例如,订单创建、修改等业务逻辑由领域服务处理,而订单查询、支付等外部交互由应用服务处理。

  • 工厂模式应用场景:用于创建复杂对象,减少代码冗余。例如,在创建订单时,可以使用工厂模式创建订单实体。

  • 仓储接口设计(CQRS模式):分离查询和命令,提高系统性能。例如,可以使用不同的仓储接口分别处理查询和命令操作。

3. 事件驱动

  • 领域事件建模:定义领域事件及其生命周期。例如,订单创建事件、订单支付事件等。

  • 事件溯源实现:通过事件记录跟踪领域状态变化。例如,可以使用事件溯源技术记录领域事件的序列。

  • 最终一致性策略:确保系统在不同组件之间达到一致状态。例如,可以使用事件总线、消息队列等技术实现最终一致性。

三、规则体系

规则体系是确保业务逻辑正确执行的关键。

1. 业务规则

  • 前置条件验证:确保业务操作在执行前满足条件。例如,在创建订单前,验证用户是否存在、库存是否充足等。

  • 不变式约束:定义业务对象不变的条件。例如,订单状态一旦变为已支付,则不可修改。

  • 规则引擎集成:将业务规则与业务逻辑分离,提高可维护性。例如,可以使用 Drools 或 jBPM 等规则引擎实现业务规则。

2. 流程规则

  • 状态机设计:定义业务对象的状态转换。例如,订单状态可能包括待支付、已支付、已发货、已收货等。

  • 工作流引擎对接:实现复杂的业务流程。例如,可以使用 Activiti 或 jBPM 等工作流引擎实现业务流程。

  • Saga事务补偿:处理分布式事务,确保数据一致性。例如,可以使用补偿事务或最终一致性策略等技术实现 Saga 事务。

四、扩展实践

扩展实践是DDD在实际项目中的应用和优化。

1. 架构集成

  • 六边形架构适配:将DDD与六边形架构结合,提高系统可扩展性。例如,将领域服务、应用服务、基础设施等分别对应到六边形架构的内部、边界和外部。

  • 事件风暴工作坊:通过团队协作,快速构建领域模型。例如,组织团队成员进行头脑风暴,收集领域模型的需求。

  • 微服务拆分模式:将领域拆分为多个微服务,提高系统可维护性。例如,根据业务功能将领域拆分为多个微服务,并使用 API 网关进行服务治理。

2. 效能工具

  • 代码生成框架:提高开发效率,减少代码冗余。例如,可以使用 MyBatis Generator 或 CodeFirst 等代码生成框架。

  • 契约测试工具:确保接口符合预期。例如,可以使用 Postman 或 SoapUI 等契约测试工具。

  • 可视化建模平台:帮助团队成员更好地理解领域模型。例如,可以使用 UML 或 PlantUML 等可视化建模平台。

优快云

📥博主的人生感悟和目标

Java程序员廖志伟

希望各位读者大大多多支持用心写文章的博主,现在时代变了,信息爆炸,酒香也怕巷子深,博主真的需要大家的帮助才能在这片海洋中继续发光发热,所以,赶紧动动你的小手,点波关注❤️,点波赞👍,点波收藏⭐,甚至点波评论✍️,都是对博主最好的支持和鼓励!

- 💂 博客主页: Java程序员廖志伟
- 👉 开源项目: Java程序员廖志伟
- 🌥 哔哩哔哩: Java程序员廖志伟
- 🎏 个人社区: Java程序员廖志伟
- 🔖 个人微信号: SeniorRD

Java程序员廖志伟

📙经过多年在优快云创作上千篇文章的经验积累,我已经拥有了不错的写作技巧。同时,我还与清华大学出版社签下了四本书籍的合约,并将陆续出版。这些书籍包括了基础篇、进阶篇、架构篇的📌《Java项目实战—深入理解大型互联网企业通用技术》📌,以及📚《解密程序员的思维密码--沟通、演讲、思考的实践》📚。具体出版计划会根据实际情况进行调整,希望各位读者朋友能够多多支持!

🔔如果您需要转载或者搬运这篇文章的话,非常欢迎您私信我哦~

解决SolidWorks启动报错问题:SolidWorks2020显示无法获得下列许可 SolidWorks standard 期望的SolidWorks监控程序已经关闭(-97,121,0) 解决SolidWorks启动报错问题:SolidWorks2020显示无法获得下列许可 SolidWorks standard 期望的SolidWorks监控程序已经关闭(-97,121,0) 问题描述 打开SolidWorks2020时,显示SolidWorks2020显示无法获得下列许可 SolidWorks standard 期望的SolidWorks监控程序已经关闭(-97,121,0) (急需看模型的我心里万马奔腾…) 截图如下: 有问题咱就上 看了其他博主的回答,自己尝试了几个,发现出现了新的 阅读详情

相关推荐

PVE 9.0 保姆级安装及优化教程(换源、网络配置、远程唤醒等)【基础篇】

最近,Proxmox VE 推出了基于 Debian 13 的 9.0 版本。正巧我手头有一台闲置的老电脑,与其闲置,不如装上 PVE,让它化身 All in One,继续发挥它的余热。G4560 算是一颗 NAS 神 U,十几元的售价就能有双核四线程,比起什么 J1900 不知道强到哪里去了,尽管定位上是奔腾处理器,但性能甚至能和同代的酷睿 i3-7100 掰掰手腕,并且它还自带 HD 610 的核显,对于解码的支持也还不错。

zc_mk的博客 7511

领域驱动设计(DDD)核心技术解析

限界上下文是领域模型在软件中的具体实现范围,其边界定义对于保持领域模型的完整性和一致性至关重要。统一语言:统一语言是确保团队成员对领域术语有共同理解的关键。可以通过建立领域模型、编写领域故事、进行代码示例等方式来构建统一语言。术语表构建方法:术语表可以通过领域专家的访谈、工作坊、会议记录等方式构建。同时,应定期更新术语表,以反映业务的变化。跨团队语义对齐:通过文档、代码审查、定期会议等方式确保不同团队对领域术语的理解一致。上下文映射模式。

JavaCodePro的博客 805

1panel面板实战:Docker容器存储路径迁移与优化指南

本文详细介绍了在1panel面板中迁移Docker容器存储路径的完整流程与优化方法。针对系统盘空间不足的常见问题,通过停服务、搬数据、改配置三个核心步骤,指导用户安全地将Docker数据目录迁移至更大容量的独立分区,并提供了迁移后的深度管理技巧与常见避坑指南,帮助用户优化服务器存储资源。

ol789012的博客 865

【DDD】领域驱动设计精要

本文算是《领域驱动设计》这本书的读书笔记,加上自己的一些读后感。网上有很多这本书的读书笔记,但是都是别人的,不如自己总结的理解深刻。建议大家在读这本书时结合《实现领域驱动设计》一起看,同时,一定要去实际建模和编码,理论联系实际才能得其精髓。 本文是【DDD】系列文章的第一篇,可参考:使用领域驱动设计思想实现业务系统 定义 DDD是Domain driven design(领域驱动设计)...

weixin_30666753的博客 178

27、VXLAN BGP EVPN网络的自动化部署与运维管理

本文深入探讨了VXLAN BGP EVPN网络从初始配置到运维管理的全生命周期自动化流程,涵盖Day-0设备自动上线、Day-0.5增量变更与连接验证、Day-1覆盖服务配置与计算集成,以及Day-2监控与故障排查。详细介绍了推送与拉取两种配置模型、主流工具如Cisco VTS、NFM、DCNM的功能特点,以及开源自动化工具的应用。通过流程图和命令示例,系统展示了MAC/IP学习、BGP通告和VXLAN封装的验证方法,为构建高效、可扩展的数据中心网络提供了全面的技术指导。

banana的博客 80

【图像拼接】论文精读:As-Rigid-As-Possible Shape Manipulation(ARAP)

文章目录前言1.摘要2.算法的总体流程总结 前言 图像变形算法 1.摘要 论文提出了一个二维图形互动系统。图形是建立在三角形网格上的,用户只需移动几个网格顶点(限制顶点),系统通过最小化每个三角形的误差计算网格剩余顶点(自由顶点)的位置。 算法分两步: 适当旋转每个三角形。 调整大小。 关键是使用二次度量误差将最小化问题转换成线性方程组,然后再解这个方程组。 刚性形状变形是很难的,论文的研究使其变得简单。 2.算法的总体流程 总的流程分三步: 将图形用三角形网格覆盖 选择三个点(限制顶点) 操纵限

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 15万+

【DDD2】领域驱动设计精要

【DDD】领域驱动设计精要 目录 【DDD】领域驱动设计精要 1. 定义 2. 核心 3. 概念 4. 图解 分层图 模式图 5. 思考   正文   本文算是《领域驱动设计》这本书的读书笔记,加上自己的一些读后感。网上有很多这本书的读书笔记,但是都是别人的,不如自己总结的理解深刻。建议大家在读这本书时结合《实现领域驱动设计》一起看,同时,一定要去实际建模和编码,理论...

zhuiqiuuuu的博客 457

Visual Studio调试技巧与实用方法总结(实战经验分享)

本文根据多年的项目实战经验,详细介绍一些Visual Studio常用的高效调试手段与技巧。

dvlinker的技术专栏 3万+

领域驱动设计(DDD)核心概念解析

与六边形架构(Hexagonal Architecture)类似,DDD强调将领域逻辑置于系统中心,使其独立于外部技术细节,从而提升系统的适应性、可测试性和长期演化能力。核心组件(实体、聚合、值对象等)的合理运用,结合六边形架构的分离思想,能够有效提升复杂系统的可维护性和扩展性。推荐阅读Eric Evans的《领域驱动设计》与Vaughn Vernon的《实现领域驱动设计》,深入掌握DDD的理论与实战。:一组逻辑关联的实体与值对象的集合,作为数据修改的最小单元。:聚合的入口点,负责维护业务规则的一致性。

znjy111的博客 1321

YOLOv11改进 | Mamba-YOLOv11-L:基于SSM的高效全局建模,精度与效率的双重突破

摘要: 本文提出Mamba-YOLOv11-L,通过集成状态空间模型(SSM)改进YOLOv11的全局建模能力。针对YOLOv11在复杂场景中全局依赖缺失、精度-效率矛盾等问题,SSM以$O(N)$计算复杂度实现长程语义捕捉。改进后的模型在工业缺陷检测(Recall↑12%)、边缘设备部署(内存↓16%)、多尺度目标检测(小目标mAP↑9%)等场景表现优异,推理速度保持>40 FPS。核心创新包括轻量化SSM模块设计(稀疏状态转移+局部上下文融合)及与YOLOv11骨干的深度集成,代码实现展示了SSM

走向CTO的路上... 568

零基础快速学习 ABAP 读者意见反馈和下一步写作计划表

大家在学习教程过程中,如果有任何关于 SAP ABAP 开发方面想了解的内容,可以直接在教程各篇文章下评论留言,我会将大家的意见统一汇总到下面的表格,作为我更新教程的内容参考来源之一。

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

领域驱动设计(DDD)核心要素解析

边界条件:通过定义实体或值对象的属性和操作,来明确其所属的上下文。聚合根:选择合适的实体作为聚合根,确保聚合根能够有效地封装上下文内的业务逻辑。

AIHacksCash的博客 267

vue3 - 详细实现用户收货地址识别解析“姓名/手机号/省市区/街道/乡镇村庄“关键字,用户复制粘贴一段含有姓名电话/详细地址的文字文本信息,vue3自动识别拆分并填入到对应表单字段中,详细示例代码

vue3,nuxt3,快递地址读取,收货地址解析、快递地址解析、物流地址解析自动识别,收货地址解析,从发货地址中拆出姓名电话地址,根据粘贴的字符串提取姓名地址,vue3地址信息自动识别,ts,vue3智能识别地址,提取姓名电话地址信息,自动识别出省市区街道姓名手机号等,根据文本自动解析出收货信息,怎么识别文本中的手机号,粘贴板地址识别,地址智能识别,如何识别收货地址中的关键字,粘贴一段文字后,自动识别到姓名/手机号/收货地址,vue3仿淘宝地址智能识别解析实现,省市区街道智能解析,vue3收货地址,识别地址

✅ 精选推荐文章 5501

yuzu模拟器版本选择与性能调优完整指南:选对版本+调对参数

yuzu模拟器怎么选版本、怎么调性能,其实是两件事捆在一起做的:版本没选对,参数调得再细也救不回来。下面以 yuzu-downloads 仓库为样本,把 2024-02-27 至 03-04 的 8 个 mainline 构建讲透——yuzu版本管理 的命名规则、按硬件分档的选型、部署步骤,以及渲染、CPU、缓存三处的 yuzu性能调优 要点,帮你快速定位到自己机器上最顺的那一套。 ## 先看懂

gitblog_00473的博客 416

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

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

上一篇: ShardingSphere核心技术解析
下一篇: 领域驱动设计(DDD)实践指南
Java廖志伟
博客等级 码龄2年 3609粉丝 1517原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值