如何写好最外围用例

http://www.uml.org.cn/oobject/200509075.htm

如何写好最外围用例
来源:www.zhangxun.com 作者:张恂 
 

 2003 年,我曾经在网上看到一篇技术文章《 没头没尾—项目开发笔记:如何编写最外层用例 ?! 》,这篇文章写得很好,真实记述、反映了用例写作中的一些常见现象和误区。 然而,该文的前后两个用例实际上都不是针对客户的真正的“最外层用例”,尽管作者作了些改进,但这些用例在具体的内容和写法上还存在一些问题。

 1.引言

 “本系统的目标是制作出一个跨企业的信息平台,为目标公司的客户进行服务。这些服务分成很多的方面,比如提供给银行的公司财务情况查询,提供给生产厂商销售情况的报告。提供给销售的商场以及店铺货源的情况,提供给物流,安装服务公司送货以及安排信息。从中赚取提高销售效率,减少运输损耗的费用。设定目标公司为 A公司,信息平台名称B系统。”

 从上面介绍的内容来看,我猜 B 系统是 一个 类似于供应链 应用 的 企业 门户 系统,这里所说的 A 公司好像是一家从事商品分销的企业。通过该门户, A 公司可以有效地联系上家—生产商(供货商),下家—商场、店铺以及银行、物流公司、安装服务公司等客户或合作伙伴。

 在讨论这个案例前,首先让我们重温一下什么是最外围用例( the outermost use cases ,根据 Cockburn 的定义改写) :

 对于每一个用例找到它仍能适用的最外圈的设计范围,针对该范围为它编写一个概要用例; 对于一个将要设计的系统, 我们 通常可以找到一个更广的设计范围,而使主用角( PA , Primary Actor )仍然处于该范围之外,如果不断扩大该范围,可以找到一个临界点,主用角就会被包含在当前的范围之内,这个临界点就是最外圈的范围; 最外围用例是通过把同一个范围内具有相似目标的主用角合并到一起而创建出来的,它们把与这些用角有关的所有低层用例都汇聚到了一起。

 如何获取最外围用例呢? Cockburn 给了一些步骤建议 :

   (1) 从一个用户目标开始。
   (2) 问“这个目标对主用角 AA (最好在组织外部)提供什么服务?”,用角 AA 是我们想要收集用例的最终主用角。
   (3) 找出最外圈的设计范围 S ,使得 AA 仍然在 S 之外,给 S 命名。
   (4) 找出最终主用角 AA 在设计范围 S 中的所有用户目标。
   (5) 找出 AA 对系统 S 的概要目标 GG 。
   (6) 为 GG 编写出概要用例。这个用例就是我们要找的最外围用例,它将一些海平面(用户目标层)的用例维系在一起。

 值得注意的是,这里 Cockburn 所说的“系统” S 不一定都是指软件,它可能是软件系统(如 B 系统),也可能是业务系统(如 A 公司、企业、部门等)。 在下面第 2 、第 3 小节中我将按照 Cockburn 的最外围用例 定义 来考察 原文中的两个最外围用例 ,逐个分析存在的错误。用第 1 个例子说明以“操作人员”为 主用角 、最外圈范围为软件系统( B 系统)的正确写法,用第 2 个例子说明以“客户”为主用角 、最外圈范围为业务系统( A 公司)的正确写法。

 2.软件用例 - 业务管理

 用例名称: 最外围用例

 错误分析: 显然这不是一个正确的用例名称。建议改为“业务管理”,解释如下文。

 简要说明:

A 公司决定让其业务合作伙伴以及最终的用户通过互联网访问 B 系统以达到减少 A 公司本地人员的工作量以及提升工作效率的目的。 B 系统负责完成进销存业务、其它业务处理以及报表管理。一些系统维护人员还负责管理基础信息的认定与实现。包括四个用例:基础设置子系统,进销存子系统,其它业务处理子系统,报表子系统。

 错误分析: 首先,用例的名称、内容中不应该出现“子系统”这个术语, subsystem 属于系统设计范畴。

 从业务介绍来看,操作人员主要进行“进销存、报表和其他业务”的处理,系统维护人员主要进行基础信息管理,所以这 4 个概要用例(风筝层)分属不同的 PA 。这两种角色在概要白云层似乎没有必要严格区分,所以我们把系统维护人员和操作人员合并成“操作维护人员”,并且把这 4 个用例合并成 1 个最外围用例“业务管理”,并在此处描述。

 用例范围: 跨企业信息平台
 主执行者( PA ): 客户

 错误分析: 从用例范围和基本流的内容看, 这里的 PA 应该是“操作维护人员”(客户作为 PA 的最外围用例见第 3 小节)。

 用例层次: 白云(最高层次)
 触发事件: 客户有购货的需求

 错误分析: 这里应该描述可以检测到的事件(动作、状态的改变等),我们怎么知道客户有购货的需求呢?正确的说法可能是:客户以各种方式请求服务。

 主成功场景(基本流)
  
· 系统维护人员操作基础设置子系统维护基础设置的数据。
  · 操作人员操作进销存子系统完成进销存业务。
  · 操作人员通过报表系统分析查询业务结果。
  · 操作人员通过其它的业务子系统完成对系统中的其它业务处理。(注,其它业务子系统包括财务资金等等子系统,将会子用例描述中强调)

 小结:

 从以上分析看,原用例存在着基本的概念错误,用例的主用角( PA) 、范围和基本流的内容相互之间存在不一致的现象。这 个最外围用例可以改写如下:

用例名称:

业务管理

范围:

B 系统

层次:

概要 / 白云

主用角:

系统操作维护人员

触发事件:

客户通过电话、邮件等方式向操作维护人员提出服务请求(如购货)。

基本流:

操作维护人员通过 B 系统可完成以下任务:
1. 基础信息管理。
2. 处理进销存业务。
3. 进行报表管理,查询、分析业务结果。
4. 处理其他业务(如财务资金管理)。
[ 用例结束 ]


 3.业务用例 - 客户服务

 用例名称: 最外围用例

 错误分析: 显然这不是一个正确的用例名称,建议改为“客户服务”。

 简要说明:

A 公司决定让其业务合作伙伴以及最终的用户通过互联网访问 B 系统以达到减少 A 公司本地人员的工作量以及提升工作效率。 B 系统负责完成销售业务以及报告销售情况。一些系统维护人员还必须为客户和职员设置安全存取级别。包括四个用例:增加服务( A 公司本地),增加服务(客户),报告业务情况,管理安全存取权限。

 错误分析: 这段话其实不太像用例简述。最外围用例应该从 A 公司向客户提供服务的角度来叙述,比方说,可以请求服务,查询业务销售报表等。在本例中我们进行黑盒业务建模,涉及到 B 系统和系统维护人员的内容,比如安全级别设置,不应在此处反映。

 用例范围: 跨企业平台

 错误分析: 我们选定了 A 公司的客户作为 PA ,那么按照最外围用例的定义,最大范围边界应为 A 公司而不是 B 系统。实际上这是一个业务用例( Business Use Case )。虽然客户也可以直接访问 B 系统,但是对于客户而言,B 系统 不是最大的范围 。

 用例层次: 白云(最高层次)
 主执行者( PA ): 客户
 主成功场景(基本流):
   ·客户通过电话,邮件联系 A 公司操作人员,请求一个新的服务。 A 公司的操作人员通过 B 系统处理服务请求。
   ·客户直接通过 B 系统的客户端,请求与处理新的服务。
   ·客户通过 B 的系统可以查询出销售情况以及其它相关情况的报表。
   ·B 的系统维护人员将要对客户以及操作人员进行安全存取权限的设置。

 错误分析: 在最外围业务用例的基本流中,主要包含一些用户目标层或概要层的用例,所以此处不应该出现与 B 系统、操作人员、系统维护人员相关的内容,它们在我们定义的范围边界( A 公司)之内。 根据以上分析,我将该 最外围用例改写如下:

用例名称:

客户服务

范围:

A 公司 / 业务

层次:

概要 / 白云

主用角 :

客户

触发事件:

客户提出服务请求

基本流:

客户可以下列 2 种方式获得服务:
1. 服务请求处理:客户通过电话、邮件、客户端软件等方式请求服务, A 公司接收请求后进行相应处理,并把处理结果以恰当的方式返回给客户。
2. 销售查询:客户通过客户端软件直接查询销售情况及相关报表。
[ 用例结束 ]

 4.总结

 有人认为:“ 也许针对一个项目可以有很多‘正确的'最外层用例的设计方法。上面两种划分方式应该说只从最外层用例的角度来说都是正确的 ” 。我不同意这种开脱的说法,针对 1 个项目抽取最外围用例实际上只有 1 种“最优解”。为什么?道理很简单,因为最外围用例是 Cockburn 提出的,他给出了找到最外围用例的步骤和方法,而这种方法是明确的、无二义性的。人们找错了最外围用例,多半是因为没有理解和掌握这套方法。

 概括一下,原文主要存在以下错误:

 1 )由于用例的主用角 、范围与基本流的内容不一致,导致那两个用例都不是真正的最外围用例。实际上,针对“客户”的最外圈范围是 A 公司,而针对“操作维护人员”的最外圈范围是 B 系统。

 2 )在用例的功能描述中出现了软件内部设计的内容,不符合需求提取、分析的要求。

 最终,由于原作者对于为什么要编写用例,用例与传统结构化方法的功能总体描述究竟有何实质上的不同,用例有哪些特点,缺乏准确而深入的理解,导致编写用例的时候思路凌乱,把几种内容混杂在一起,做成了一碗“杂烩面”。 这个案例给我们的重要启迪是,抽取用例最关键的一步是首先明确 SuD ( System Under Discussion or Design )范围的定义 以 及针对这个范围的主用角 。 如果用 传统 “结构化”的老思路来套用例的格式,换汤不换药,那对 IT/软件项目开发将起不到真正的效果,甚至可能产生负作用,如果那样还不如不写用例。 最外围用例便于我们将关注的焦点转向用户真正需要什么,从而真正地从用户的角度出发来考虑问题

PIC外围电路的搭建 单片机使用的第一步不是编写程序,而是自己根据需求设计电路板(使用别人的开发板除外),在搭建PCB板的过程中最核心的就是搭建单片机的外围电路,单片机的外围单路一般包括:供电、时钟、程序烧写接口、以及特殊需求的外围接口。这些电路的实际均可以从相应的单片机器件文档里面找到,这篇文章就是结合PIC16F1939这款单片机给大家介绍下如何根据文档设计PIC单片机的外围电路以及一些设计注意事项。当然有些单片机厂家或者供应商也会提供对应器件的外围电路的原理图,我们也可以直接拿来用。 阅读详情

相关推荐

全面掌握单片机外围电路设计

单片机外围电路的设计是实现嵌入式系统功能的关键步骤。在开始设计之前,我们首先需要理解外围电路的作用,它包括电源管理、复位、晶振、I/O接口、驱动与保护、调试接口、以及PCB封装布局等多个方面。设计外围电路时,我们会首先确定单片机的类型与规格,根据其核心处理器的能力和所需外设的要求,来选择合适的电源管理方案和复位逻辑。接下来,我们会根据外围设备的特性设计晶振电路,确保系统能够稳定运行。在扩展输入/输出接口时,我们通常会考虑设备的电气特性和接口保护,以保证长期的稳定性和数据的准确性。

weixin_27645199的博客 1176

编写测试用例标准

引言 背景        为保证测试用例对需求的覆盖率,即对一个系统从整体功能到单个功能,都尽可能的高的覆盖。而单个功能点主要强调的是不同的输入及其组合所带来的各种输入动作,系统是否都做了处理;        测试用例设计首先要明确该系统存在多少功能点,要通...

那一缕寒意,冰封千里 6181

单片机外围电路设计实战与经验分享

单片机(Microcontroller Unit, MCU)是一种将中央处理器(CPU)、随机存取存储器(RAM)、只读存储器(ROM)、各种输入/输出接口以及其他一些辅助电路都集成到一块硅片上的微型计算机系统。根据应用领域和功能的不同,单片机可以分为通用型和专用型两大类。

weixin_35879493的博客 1746

非常有用的User case用例描述模板

Table 6.0 Use Case # DATAENTRYPROJECTCUST-1009

SAP BLOG--Jack Wu 8220

Win11内核隔离无法打开的解决方案详解

内核隔离问题的解决需遵循"先硬件后软件"的排查原则,90%以上的案例可通过驱动清理或外设断开解决。对于必须禁用该功能的用户,建议定期使用Windows Defender进行全盘扫描,并保持系统更新至最新版本。技术决策需在安全性和兼容性之间取得平衡,本文提供的多维解决方案可帮助用户构建更稳定的Windows 11使用环境。

mmoo_python的博客 4827

2025-E题国一-简易自行瞄准装置:基于嘉立创地猛星/天猛星与K230的视觉巡线云台系统设计

本文详细介绍了2025年全国大学生电子设计竞赛E题一等奖作品——基于嘉立创地猛星/天猛星与K230的视觉巡线云台系统设计。该系统通过地猛星主控实现小车巡线,天猛星主控驱动云台,结合K230开发板的视觉识别能力,构建了一套完整的视觉巡线云台系统,实现了自动巡线与精准瞄准功能。文章深入剖析了硬件选型、双闭环PID控制算法、视觉识别与目标跟踪等核心技术,并分享了系统调试与避坑经验。

weixin_42596011的博客 674

需求用例分析之二:级别设置

在《编写有效用例》(阿莱斯特-科伯恩著,下面用科伯恩用例来指代)一书中,赋予了用例不同的级别,科伯恩形象的设定了例如以下级别:海平面、云朵、风筝、蛤等等。  科伯恩建议用例级别分为多个个目标层次:概要、用户目标、子功能,书写需求用例时,仅仅能选择其一,以下对其详细说明: 概要:包含多个用户目标,它有“显示相关目标的生命周期顺序”和“为低层用例提供一个文件夹表”的功能,概要用...

weixin_33845477的博客 196

ESP32脑机接口开发板:EEG信号采集与应用开发指南

脑机接口(BCI)技术通过采集脑电图(EEG)信号实现人机交互,其核心在于高精度生物电信号采集与实时处理。基于ESP32微控制器的开发平台结合专业级ADS1299 ADC芯片,可构建8通道EEG信号采集系统,支持250SPS采样率与可编程增益。这种嵌入式解决方案在科研教育领域具有显著优势,既能满足信号质量要求,又大幅降低开发门槛。典型应用包括实时脑电波可视化、注意力检测等BCI场景,通过Python生态工具链(如BrainFlow、LSL)可快速实现数据处理。开发时需注意电极阻抗控制(<10kΩ)和50/6

weixin_42518874的博客 344

没头没尾--项目开发笔记:如何编写最外层用例?!

标题:没头没尾--项目开发笔记:如何编写最外层用例?!关键词:结构式的开发,用例驱动开发 02月14号:街上到处都是拿着鲜花的小丫头,比过年都热闹!! 项目将要进入最后的实施阶段,各个子系统也开始了扫尾工作。由于项目中出现的问题很多都是由于设计中的原因,与项目小组的成员进行讨论的时候有时候还是会不自觉的回到项目最初我们有什么工作没有做好,从而从项目中得到更多的经验。 如何编

ViktorYu的专栏 1799

蓝桥杯单片机学习13——NE555方波发生器&频率测量

NE555详解、引脚图介绍、原理图及工作原理讲解、方波产生的原理、定时器测量频率的原理及使用方法、代码实现

weixin_67907028的博客 1万+

【硬件开发】振铃

如果是开关管的振铃,那么桥臂的SW处产生的振铃会窜入驱动电路,造成的结果就是驱动电路和上桥臂下桥臂之间的SW节点都会有振铃现象。如果是驱动电路的振铃,那么MCU的输出引脚还是正常的PWM,但是到了MOS管两侧就变成带有振铃的PWM波形了。开关振铃产生的原因是MOS管上面的寄生电感当开关管打开时为了保持电流不变感应出的电压会对电源和地产生冲击。开关管的驱动线上的寄生电容和寄生电感导致的振铃为驱动电路振铃。开关管上的寄生电容和寄生电感导致的振铃为开关节点振铃。、电感等元件的存在,导致电路中的电压和。

weixin_62546664的博客 1827

闭合线段找最外围线段 思路+代码实现

求闭合区域的最外围的线段思路 1.找起始点:获取所有的点,找到最左下点(A)点。很关键的点 2.找起始边:首先用邻接链表存储所有点边之间的关系。找到第一条最外围的线段,根据极角来找最外围的线段,注意A是最左下角,所以上面所有连接它的线段和水平角度不会超过180度。以x轴正方向作为向量(1,0),其他向量和它做角度差,用点积求角度。可以找出AB线段。 3.找所有外边:通过角度差找最外边。如已经知道第一条外边AB边了,现在对B连接的BJ、BG、BC判断哪一条是接下来的边。通过向量叉积和点积方法,.

qq_38409301的博客 4805

【Proteus仿真】74HC595+74LS154驱动显示16X16点阵

【Proteus仿真】74HC595+74LS154驱动显示16X16点阵

perseverance51博客 2893

【日常·闲谈】芯片外围电路如何设计?

听从你心,无问西东。 开了一个新系列,很多时候想分享一些很有趣的内容,但又不想为此花大量的时间去做语言梳理和技术资料查找,久而久之就想不起来要写这个博客了。于是就想到了用闲谈的方法,把这些内容分享出来,虽然不是那么的严谨,但都是自己的一些经验,仅供参考~ 有一部分是别人问我的问题,有一些可以算是我自问自答吧。 —————————————————————————————————————————— 关于这个博文的标题:芯片外围电路如何设计? 这其实是一个很宽泛的问题,轻易没法回答,芯片的种类那么多,数字芯片、模

Ninquelote的博客 1万+

少儿学编程系列--使用递归画出龙形曲线DragonCurve

龙形曲线(Dragon Curve) 龙形曲线(Dragon Curve)又叫分形龙,是一种自相似碎形曲线的统称,因形似龙的蜿蜒盘曲而得名 使用黄金比例画龙形曲线 根据黄金比例画一条龙曲线。每次递归,第一步向左转32.89度,移动0.74倍原距离;第二个递归步骤向右转46.99度,移动原来距离的0.55倍。请查看这个网页(https://larryriddle.agnesscott.org/ifs/heighway/goldenDragon.htm)了解关于龙形黄线数学的细节 龙形曲线效果 .

penriver的博客 2296

华南理工大学-大学物理实验-绪论作业

3.用公式测量某圆柱体铝的密度,测得直径=2.0420.003(cm),高=4.1260.004(cm),质量=36.4880.006(g)。计算铝的密度和测量的标准差,并以测量结果表达式表示之。(要求判别和剔除异常数据)(30分)(了解图解法的注意事项,大学物理实验众多实验数据处理采用这种方法,如PN结温度特性研究,光电效应与普朗克常数的测定,霍尔效应测磁场等等,注意规范作图)实验测得温度与对应的金属丝的长度的数据如下表所示。(了解异常数据的判断方法及具体判断过程,30分的题目n(*≧▽≦*)n)

mohen_777的博客 581

【外围电路】0.介绍

芯片需要外围电路的核心原因在于其功能实现、性能优化和应用适配性需求,这涉及到电子系统设计的底层逻辑和工程实践原则。

学习日记 1277

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

求矩阵最外围元素的最大值、最小值

给定一个n(n>=2)行10列的整数矩阵a,函数maxMin()计算 矩阵最外围元素(指第一行、最后一行的元素,以及第一列、最后一列的元素)的最大值和最小值,并将最大值存入变量mX,最小值存入变量mN。maxMin()的第一个参数是二维整数数组a,第二个参数是a的行数n(n<=10)。 例如,main()函数中a的数据描述了一个3行10列的矩阵,该矩 阵最外围元素的最大值、最小值分别是...

韶言大雅 1618

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

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

绿联外围设备_什么是外围设备(外围设备的类型和列表)?

绿联外围设备A Peripheral Device is a computer device or part which is connected to the computer with different connection types. A peripheral device is not a core device for a computer which means a compute...

cunjiu9486的博客 1296

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

ADC外围电路的设计

ADC 外围电路的设计       模拟电路的设计     数字外围电路的设计     电源和接地的设计     信号隔离的设计     在使用 ADC 芯片时,由于 ADC 的型号多样化,其性能各有局限性,所以为了使 ADC 能够适 应现场需要以及满足后继电路的要求,必需对 ADC 的外围电路进行设计。 ADC 外围电路的 设计通

zhaoguanghua0407的博客 9962

外围设备概述

一、外围设备 1.外围设备的一般功能 外围设备的一般功能 外围设备的功能是在计算机和其他机器之间,以及计算机与用户之间提供联系。由于外围设备的地位越来越重要,主要介绍以下内容:硬磁盘、可移动磁盘、磁带和光盘。 外围设备的功能是在计算机和其他机器之间,以及计算机与用户之间提供联系。 外围设备(磁盘)基本组成 (1)存储介质,它具有保存信息的物理特征。例如磁盘就是一个存储介质的例子,它是用记录在盘上的磁化元表示信息。 (2)驱动装置,它用于移动存储介质。例如,磁盘设备中,驱动装置用于转动磁盘并进行

m0_73566739的博客 985

那些SAP项目里的主流外围系统

做过大公司SAP项目的同行们都知道,很多大公司尤其是哪些世界500强的跨国企业的IT系统很多。即使企业实施了SAP ERP系统并将其作为核心战略平台,也不能将那些IT系统全部替换掉。因此这造成了在核心的SAP系统以外,还有很多外围系统并存,并且部分的外围系统与SAP系统有接口的情况。

喜欢打酱油的老鸟 4175

引用外围类的对象

如果你需要对外围类对象的引用,可以通过在此外围类名称后面跟一个句点和 this 关键字 来获得。例如在类 Sequence.SSelector 中,通过 Sequence.this,任何方法都能够获取 那个保存的指向外围类 Sequence 的引用。而作为结果获取的这个引用自动就是类型正确 的。(它在编译期被获知并检查过,所以没有运行期的开销。) 有时候你会对某个对象说,我要生成你

u011282109的专栏 669
上一篇: 用例建模指南
下一篇: 统一建模语言UML轻松入门之用例
mlxia
博客等级 码龄26年 28粉丝 410原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值