spring中的commands validator的使用方法

spring 的validate验证需要两个bean(ValidatorFactory、BeanValidator)及两xml文件(validator- rules.xml、validation.xml)的支持,ValidatorFactory用于制造BeanValidator,后者则是在程序中执行校验的控制bean。Validatorrules.xml中定义了各种验证的规则,如字段不为空,字段输入值必须为整数等等。 Validation.xml中则定义了那些bean及bean中的哪些属性字段需要验证,使用哪些验证规则。validate 分为两级验证,客户端验证(javascript)和服务器端验证。以下是使用validate的步骤:

1.       在配置文件中声明ValidatorFactory 和 BeanValidator:

<bean  id="validatorFactory" class="org.springmodules.commons.validator.DefaultValidatorFactory"> -----①

             <property name="validationConfigLocations"> -----②

                <list>

                      <value>/WEB-INF/validator-rules.xml</value>

                      <value>/WEB-INF/validation.xml</value>

                 </list>

             </property>

        </bean>

        <bean id="beanValidator"

class="org.springmodules.commons.validator.DefaultBeanValidator"> -------③

             <property name="validatorFactory">

                     <ref bean="validatorFactory" />  --------④

             </property>

 </bean>

①     声明validatoFactory 这里我们使用spring 的DefaultValidatorFactory

②     定义其validationConfigLocations 属性,将validator-rules.xml和validation.xml传入

③     声明beanValidator 这里我们使用spring的DefaultBeanValidator

④     在其属性中指明要使用的validatorFactory 。这里我们使用刚刚定义的validatorFactory

 

2.       在需要进行验证的controller(即要使用form表单或者command的controller)中声明validate。

 

<bean id="xxxxController" ……>

<property name="commandName" value="userCommand"/>  -----①

<property name="commandClass" value="com.resoft.User"/>   -----②

<property name="validator" ref="beanValidator"/>   -------③

     ……

</bean>

 

①     commandName 用于指明需要验证的 command的名字,这个名字必须和 validation.xml中<form name=" xxxxx "> 所写的名字保持一致。

②     commandClass用于指定这个command的类型。其必须与你jsp提交的form最后形成的command类型相一致。

③     声明该controller使用validator,这里将我们刚刚定义的beanValidator传入进去。

 

3.       在validation.xml文件中,定义你要校验的formbean(或者说是command) ,定义这个bean中有哪几个field需要验证,使用何种规则验证。(注意:这里定义的form name 必须和前面controller中定义的commandName保持一致)以下是几种常用的验证示例:

 

<form-validation>

<formset>

<form name=" userCommand "> -----①

               <field property="userId" depends="required"> -----②     

                   <arg0 key="用户代码" /> -------③                                          

               </field>    

                                                                

①    这里是定义要验证的bean的名字,要求去上面定义的 commandName 相同

②    这里定义要验证的bean属性为 userId ,使用规则为 required(不为空)

③    这里定义的是显示信息,arg0 表示位置 0 的显示信息,显示key 所标明的信息 (如果你还有多个信息就用 arg1,arg2 等)出错信息将会显示为:  用户代码 不能为空 

 

 

<field property="age" depends="required,integer,mask"> -----①

                   <arg0 key="年龄" />

                   <msg name="mask" key="errors.negative"/> -----②

                   <var>

                      <var-name>mask</var-name>

                      <var-value>^[1-9]</var-value> -------③

                   </var>

        </field>

 

①   mask 标记验证,使用正则表达式来约束表单输入值。(如:只能输入数字,字母或指定的字符)

②   msg 标签用来定义 验证规则和出错信息的关联,这里表示当出现 mask 校验失败时,显示 errors.negative指明的信息。

③      整个<var>标签就是用来定义具体的规则的,如<var-name>mask</var-name>指明是用于 mask的规则,<var-value>^[1-9]</var-value> 表示只允许1-9这几个数字开头。

所以上面验证信息是年龄字段不可以为空,必须为整数,而且必须为1-9开头 也就杜绝了负数和零的情况。

          

               <field property="birthday" depends="required,date"> -----①

                  <arg0 key="生日" />

                  <var>

                       <var-name>datePatternStrict</var-name> -----②

                       <var-value>yyyy-MM-dd</var-value>  -----③

                   </var>

        </field>

        </formset>

 

①   使用“date”加入对日期的格式的校验

②         开始定义日期格式,var-name 必须写为 datePatternStrict

③         定义你希望的日期格式如:yyyy-mm-dd  yy/mm/dd 等等都可以。

<field property="startDate" depends="required,date">

              <arg0 key="开始日期" />

              <var>

                   <var-name>datePatternStrict</var-name>

                   <var-value>yyyy-MM-dd</var-value>

                </var>

       </field>

       <field property="endDate" depends="required,date,compareTwoField"> -----①

              <arg0 key="结束日期" />

              <arg1 key="开始日期" />  -----②

              <var>

                   <var-name>datePatternStrict</var-name>

                   <var-value>yyyy-MM-dd</var-value>

            </var>

            <var>

               <var-name>secondField</var-name>  -------③

               <var-value>startDate</var-value>

            </var>

       </field>

 

①         这里演示的是两个日期的验证,要达到开始日期不能晚于结束日期,加入compareTwoField 验证规则

②         定义第2个显示参数agr1 “开始日期”

③         加入一个var 其var-name 为secondField(这个是在程序中写死的,必须写为secondField)

④         var-value 定义为开始日期的属性名,如在本例中为 startDate

注:compareTwoField 是我们自己编写的一个校验规则,用于比较两个字段值大小。

 

4.  在jsp页面中定义错误信息显示语句:

 

<spring:bind path="tableCrashDO.*">   -----①

    <c:if test="${not empty status.errorMessages}">

    <div class="error">  

        <c:forEach var="error" items="${status.errorMessages}">

            <c:out value="${error}" escapeXml="false"/><br />

        </c:forEach>

    </div>

    </c:if>

</spring:bind>

 

①      这里的path 必须要与传入该 jsp 的bean的名字一样。如传入该jsp的数据bean 叫tableCrashDO,path就应该写为tableCrashDO.*。

 

5. 使客户端产生javascript代码:

 

<v:javascript formName="tableCrashDO"    -----①

staticJavascript="false" xhtml="true" cdata="false"/>

<script type="text/javascript" src="<c:url value="scripts/validator.jsp"/>"></script>

 

①      v:javascript 标签是spring的标签,定义在spring-commons-validator.tld 。其中formName必须与validation.xml中form的name保持一致。

如此以来,基本上可以算完成了validate的验证配置。

(特别注意: controller 中的commandName; validation.xml中的form name; jsp中v:javascript标签的formName三者必须保持一致。)

Claude Code开源工作流:构建可审计、可组合的智能编码协作者 智能编码工作流是现代软件工程中应对复杂性爆炸的关键范式,其核心在于将大模型能力封装为可配置、可验证、可回溯的结构化执行单元。不同于简单API调用,它依托Agent调度机制实现多步状态管理,通过YAML定义的Commands达成语义化任务编排,并以开源设计保障权限控制与可观测性。该模式显著提升开发闭环效率,支撑PR审查、文档生成、代码重构等高频场景,尤其适用于需对接CI/CD、Jira、Slack的企业级AI编程平台建设。Claude Code正是这一理念的工程化落地代表。 阅读详情

相关推荐

Agnes2.0+Codex工程化落地:智能体工作流编排与生产级避坑指南

AI智能体已从代码补全工具升级为可嵌入CI/CD流水线的分布式执行单元。理解其本质需回归基础概念:智能体不是黑盒模型,而是需配置沙箱、策略校验、文件系统隔离与审计追踪的可控工作流节点。其核心原理在于声明式YAML编排、三层策略叠加(全局/项目/实例)、AGENTS.md驱动的行为契约,以及与云原生基础设施(如ECS/Fargate/K8s)的深度耦合。技术价值体现在提升PR生成、文档同步、依赖升级等重复工程任务的自动化成功率与合规性;典型应用场景包括微服务批量修复、Swagger一致性治理、Spring B

搜索 451

CommandError: ''Book'' is not a valid app name. Please make sure the name is a valid identifier.

 我是刚刚接触Django不久,在我手动创建应用时总是出现 CommandError: ''Book'' is not a valid app name. Please make sure the name is a valid identifier. 这个错误!我看来看去,想来想去也没感觉自己写的创建命令有什么错误!  可错误往往就是让你意想不到!!!我们知道在Python中的单双引号一般情...

CurtainOfNight的博客 3350

Harness Marketplace 剖析系列 - 之 Claude Code:Harness 如何加载和执行 Plugin 能力

Claude Code Plugin 经 Harness 分层装配:Skill 渐进加载、Command 展开为 Prompt、Agent 独立上下文、Hook 监听事件、MCP 注册工具、LSP 提供代码智能,多 Plugin 命名空间隔离,构成多运行时扩展架构。

花千树的专栏 364

expect error invalid command name

Square Bracket protection in tcl

ace_fei的专栏 1万+

2026年AI编程工具选型指南:从Copilot替代到工程级AI协作者

AI编程工具已超越代码补全的初级阶段,演进为深度嵌入开发流程的认知协作者。其核心原理在于私有知识注入、多模态上下文理解与合规可验证推理,技术价值体现在降低幻觉率、满足等保三级与信创适配等硬性工程约束。典型应用场景包括微服务跨库溯源、IDE原生调试辅助、PR前自动化契约校验及本地化低延迟补全。本文聚焦GitHub Copilot替代方案与2026年企业级AI编程工具实测,覆盖Tabby本地部署、Sourcegraph Cody图谱构建与JetBrains AI原生集成等关键技术路径。

weixin_30340617的博客 550

GPT/Codex工程化落地实战:12个IDE内必须验证的关键断点

大模型编程助手(如GPT、Codex)并非即插即用的智能补全工具,其本质是需深度集成进研发流程的工程化服务。理解其底层原理——基于海量代码训练的序列生成能力,关键在于解决模型能力与真实工程约束间的错配问题:网络策略、token预算、项目上下文感知、CI/CD契约对齐等。技术价值体现在显著提升代码一次通过率、降低人工审查负荷、增强安全合规性。典型应用场景包括IDE内智能编码辅助、Git提交前自动化合规检查、Jenkins流水线中的AI代码评审。本文聚焦可复现、可度量、可嵌入生产环境的GPT/Codex工程化实

weixin_34198881的博客 471

SpringMVC学习笔记----带有复杂类型的command类

在学习BaseCommandController时,我们知道,当提交表单时,controller会把表单元素注入到command类里,但是系统注入的只能是基本类型,如int,char,String。但当我们在command类里需要复杂类型, 如Integer,date,或自己定义的类时,controller就不会那么聪明了。 一般的做法是在自己的controller里override init

Preserve 2296

解锁Claude Code全部潜力:5个必备技能包安装与配置指南

AI编程助手通过插件生态扩展能力已成为现代开发工作流的重要组成部分。其核心原理在于通过技能包(Skills)机制,将通用大语言模型与具体开发工具和上下文深度集成,从而突破模型自身训练数据的局限。这种集成模式的技术价值在于显著提升代码生成的准确性、上下文感知能力和任务执行自动化水平,有效缓解AI幻觉问题。在实际应用场景中,开发者可通过安装特定技能包,让AI助手直接读取项目文件、执行终端命令、分析代码库结构、管理Git版本以及获取实时网络信息。本文聚焦于Claude Code这一主流AI编程工具,重点介绍其核心

weixin_34232744的博客 406

"JSP Semantics Validator (JSF)" 解决办法

<br />出现原因:<br />当本人在MyEclipse中加入了JBPM3后就出现了上面的问题。<br /> <br />网上一致的说法是<br />将D:/eclipse/plugins/下的org.eclipse.wst.sse.ui_1.0.305.v200802142230.jar移到其它地方即可。<br /> <br />而本人将MyEclipse和JBPM中的这个jar文件删除后,MyEclipse中的server窗口就没有了,Tomcat也看不见了。<br /> <br />解决方法<br

pttaag的专栏 1373

从Vibe Coding到Harness工程:AI编程多步编排技术详解

这次我们来深入探讨一个在AI编程领域逐渐兴起的重要概念——从Vibe Coding到Harness工程的多步编排技术。随着AI编程助手能力的不断提升,传统的编程方式正在发生根本性变革,而Harness工程正是这一变革的核心体现。 Harness工程不是简单的提示词工程,而是一套完整的AI编程协作体系。它通过多步编排的方式,将复杂的编程任务分解为可管理的工作流,让AI Agent能够更可靠地完成实际开发任务。对于需要频繁与AI编程助手协作的开发者来说,掌握Harness工程技术能显著提升工作效率和代码质量。

weixin_34236869的博客 431

Gemini 3.1 Pro驱动的生产级Coding Agent架构实践

Coding Agent并非简单调用大模型API的代码补全工具,而是一种融合RAG增强、工具调用与状态机编排的智能工程协作范式。其核心原理在于将语言模型降级为任务规划器,依托确定性工具链执行真实开发动作,通过项目专属知识图谱提升上下文准确性,并以状态机保障流程可追溯、可验证。技术价值体现在显著降低低级错误率、加速技术债治理、支撑高SLA生产系统迭代。典型应用场景包括存量系统Bug定位修复、动态业务逻辑生成、CI/CD集成式质量验证等。本文聚焦Gemini 3.1 Pro在真实库存微服务中的落地实践,深入拆解

weixin_33717117的博客 573

Subagent协议详解:YAML驱动的AI自动化调度框架

Subagent是一种面向大模型工作流的声明式自动化协议,其核心是将AI任务调度抽象为可配置、可复用的行为契约。它不依赖特定模型或客户端,而是通过标准化YAML定义技能(skills)、触发规则(rules)、执行指令(commands)和生命周期钩子(hooks),实现跨工具链、跨语言、跨环境的稳定编排。技术价值在于解耦AI能力与执行细节,提升自动化逻辑的可维护性、可观测性和合规性;典型应用场景包括代码审查、数据集校验、基础设施安全扫描及API变更管理。本文深入解析Subagent协议设计原理,并以Pyt

weixin_34101229的博客 638

CentOS Stream 9中安装MySQL的详细步骤

本文详细介绍了在CentOS Stream 9系统中如何进行MySQL的在线安装、离线安装以及忘记密码的恢复操作。通过阅读本文,您将能够了解并掌握在CentOS Stream 9上安装MySQL的步骤,以及在遇到忘记密码的情况下的解决方案。

小白典的博客 7258

工作中使用到的单词(软件开发)

1.エイリアス   alias 别名 powershell使用 get-help 命令时,会得到与此命令 相关(别名)的命令 2.プロキシ proxy 代 理 3.プロモート   promote 促进,提升   开发的系统新功能上线发布,有时会使用到这个词,比如 STプロモート 还有使用リリース这个词的。比如STリリース。个人认为两者含义相同。 4.見逃し み................................................................

sun0322 6万+

深入解析“PROJ: proj_create_from_database: Cannot find proj.db”错误:从环境配置到打包实战

本文深入解析了“PROJ: proj_create_from_database: Cannot find proj.db”错误的根源与解决方案,涵盖环境配置、PyInstaller打包及跨平台兼容性处理。通过详细分析PROJ库路径问题及GDAL依赖关系,提供动态路径设置、资源文件打包等实战技巧,帮助开发者高效解决地理数据处理中的常见错误。

weixin_29074409的博客 446

通达信缠论中枢自动识别与画线实战指南

本文详细介绍了通达信缠论中枢自动识别与画线公式的实战应用。该工具通过严谨的算法逻辑,自动在K线图上标记出符合缠论定义的中枢区间,帮助投资者摆脱繁琐的手工画图,聚焦于价格与中枢的互动关系,从而高效识别趋势延续、背驰及第三类买卖点,提升缠论分析与交易决策的效率。

weixin_29267307的博客 663

Claude Code Hooks机制解析与自动化实践

事件驱动架构作为现代自动化系统的核心范式,通过解耦生产者和消费者实现高效异步通信。其技术原理基于观察者模式,当特定事件发生时自动触发预定义操作,相比轮询机制可降低90%以上的资源消耗。在DevOps和CI/CD领域,该技术能显著提升部署效率并确保流程合规性,例如实现代码提交自动触发构建、测试失败阻断部署等场景。Claude Code的Hooks系统将这一理念深度集成,支持通过PreToolUse/PostToolUse等20+事件节点植入控制逻辑,结合GitHub API等第三方服务可构建强制代码审查、智能

WGH100817的博客 349

ADS软件操作(8)——负载牵引(Loadpull)

负载牵引:通过不断调节输入和输出端的阻抗,找到让有源器件输出功率最大的输入、输出匹配阻抗。这种方法可以准确地测量出器件在大信号条件下的最优性能,反映出器件输入、输出阻抗随频率喝输入功率变化的特性,为器件和电路的设计优化提供了坚实的基础。白话版:由于通信制式越来越复杂,对放大器的线性度和效率要求越来越高。由于放大器的效率和是个永恒的矛盾,所以如何平衡这样的矛盾达到系统设计的最优就是一个需要解决的难题。如何解决?调节输入和输出端的阻抗也就是负载牵引 (Load-Pull)原理來改善点,从而降低谐波的。

Zhuanzhuyan的博客 4954

邪修速通!用字节跳动TRAE三分钟极速部署OpenClaw,零基础也能秒上

邪修虽快,但官方文档仍是根基。此路适合尝鲜和救急,长期用请补全环境配置。现在,去调戏你的极速OpenClaw吧!本教程使用官方推荐工具,但流程更精简。请确保遵守OpenClaw和火山引擎的服务条款。通过TRAE的“一键封装”能力,跳过环境配置和复杂依赖安装,实现闪电式部署。极简、高效、口语化,省略冗余步骤,直击核心操作,适合新手和懒人。让小白也能在咖啡冷却前完成部署,符合“任何人都能使用”的需求。,若OpenClaw回复代码,恭喜!实践时保持科学上网,如遇封锁请自查网络环境。(可选,放关键截图或命令集合)

热爱技术与前沿创新,深耕科技领域,在科创中精进自我;探索技术乐趣,分享技术干货与成长心得,以技术为伴,热爱生活,在科创与生活中双向成长。 517

Nginx源码安装和基础配置

Nginx简介 nginx: 世界第二大web服务器软件,以高并发、低消耗著称,源自于俄罗斯,创建者 Igor(伊戈尔),2004年开源,最早以代理服务器的身份出现,2015成立nginx公司,2019年以6.7亿被F5 Networks公司收购。 代理服务器: 正向:squid 反向: squid:最古老的代理服务器 LVS: 优点: 1.抗负载能力强、是工作在网络4层之上仅作分发之用 2.配置性比较低,这是一个缺点也是一个优点,简单不易出错 3.工作稳定,抗负载能力很强,有完整的双机热备方案

hjyhjy0的博客 500

基于docker进行安装部署seata,解决Seata的版本与Nacos的版本不匹配

本文分享了在Docker环境下部署Seata时遇到Nacos 3.x API不兼容问题的解决方案。由于Seata 2.0.0内置的nacos-client 1.4.2无法调用Nacos 3.x重构后的接口,导致注册失败。通过下载Seata 2.6.0源码自行构建Docker镜像,并调整启动方式(直接执行Java命令绕过Shell脚本),最终成功实现与Nacos 3.x的集成。关键步骤包括:创建自定义Dockerfile、配置application.yml、处理启动脚本兼容性问题,最终采用java直接运行方案

Dd52698的博客 410

OpenClaw实战指南:RAG+多智能体+DevOps深度集成

RAG(检索增强生成)是一种将外部知识库与大语言模型动态结合的技术,其核心在于提升模型回答的准确性与时效性;多智能体系统则通过角色分工、状态协同与上下文共享,实现复杂任务的自动化拆解与闭环执行。二者在DevOps场景中形成关键技术合力:RAG提供可审计的知识记忆,多智能体构建可编排的执行手脚,共同支撑CI/CD自动卡点、故障主动巡检、测试用例生成等高价值工程实践。本文聚焦真实产线落地经验,详解RAG分层投喂、元标签治理、多智能体终止机制与共享上下文总线等关键技术决策,助力团队跨越‘能跑’到‘稳用’的关键跃迁

abxlep7702的博客 397

AXI2APB_bridge 设计

此处研究AHB Slave到 APB master的桥接器,实现接口转化,例如下图之后是参数描述

Starry__的博客 4037

Hesi智能协调框架:解决AI孤岛问题,实现多模型协同开发

AI智能体协调是现代软件开发中的重要概念,它通过任务分解和智能调度机制,让不同的AI模型能够协同工作。其技术原理基于工作流引擎和智能体管理,能够将复杂需求自动拆解为原子任务,并分配合适的AI模型执行。这种协调框架的技术价值在于解决了AI工具割裂问题,提升了开发效率和工作流连贯性。在应用场景上,特别适用于多AI模型协同编程、自动化项目生成和智能CLI命令执行等场景。Hesi作为智能协调框架的典型代表,通过统一的CLI接口实现了ChatGPT、Claude、Midjourney等多个AI服务的无缝协作,有效解决

chulilang8944的博客 372

从0入门LocoTrack:6倍加速的SLAM追踪新范式实战指南

传统点追踪方法(如CorrTracker、TAPIR)在处理大规模场景或实时任务时,要么精度不足,要么速度太慢。而LocoTrack通过“局部4D相关性”和“Transformer全局关联”的创新设计,实现了精度与速度的双重突破速度:比现有SOTA方法快6倍,吞吐量高达数万点/秒;精度:在Kinetics、DAVIS等数据集上,定位误差显著低于传统方法;鲁棒性:能应对低纹理、动态场景等复杂环境,这是传统方法的“噩梦场景”。

m0_71589036的博客 95

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

上一篇: spring的MVC国际化的设置
下一篇: 无意中找到的好东西
maxabe
博客等级 码龄18年 8粉丝 85原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值