工作流设计示例

自定义工作流 需求: 综治子系统:统一受理平台和矛盾纠纷系统合二为一,因为流程一样,主要流程如下图 1、网格员上报到社区综治中心 2、社区综治中心可以选择上报到街镇综治中心或派遣给社区单位签收或派遣给具体的网格员进行处理 3、社区单位签收(派遣)具体的处理人员进行处理 4、街镇综治中心可以选择上报到区综治中心或派遣到街镇单位签收或下派到社区综治中心处理 5、街镇单位签收(派遣)具体的处理人员进行处理 6、区综治中心可以派遣到区具体的区处理单位进行处理或下派到具体的街镇综治中心 其中所有单位和具体处理人员可以进行退回操作 阅读详情

概述:

本工作流以一套金融软件业务处理流程为例,实现功能包括:流程自定义、步骤自定义、步骤重复次数、步骤类型(顺序/并行)、定义排序功能,完全使用数据库实现,本文将详细分析业务流程、系统设计及实现细节。

术语:

工作流(Workflow)[1],是对工作流程及其各操作步骤之间业务规则的抽象、概括、描述。工作流建模,即将工作流程中的工作如何前后组织在一起的逻辑和规则在计算机中以恰当的模型进行表示并对其实施计算。工作流要解决的主要问题是:为实现某个业务目标,在多个参与者之间,利用计算机,按某种预定规则自动传递文档、信息或者任务。工作流管理系统(Workflow Management System, WfMS)的主要功能是通过计算机技术的支持去定义、执行和管理工作流,协调工作流执行过程中工作之间以及群体成员之间的信息交互。工作流需要依靠工作流管理系统来实现。

流程:工作流包含多个工作流程,处理时可任选一种流程进行处理,其包含步骤信息;

步骤:流程中每一环节的名称,某一流程将包含多个步骤(其他工作流中也称为节点)。

 

正文:

  第一部分、业务逻辑分析

1、自定义工作流是指工作流各个环节及其参数完全自定义,常用于公文处理、业务流程签批处理等。本系统来源于本人参与开发的一套金融管理软件,业务处理人分不同角色拥有不同权限进行业务处理,将贷款数据库从贷款调查一直到贷款签批的完整流程。其中由于软件功能要求,需要将贷款调查固定置为第一步骤,将贷款签批置为最后一步骤。

其中数字表示当前步骤重复次数。

2、用户业务处理部分包括:

1)、通过:当前步骤处理通过,(选择下一处理人)进入当前流程中下一步骤,若为末步骤,则流程完成;

2)、退回:将步骤退回至上一步骤,即返回至上一处理人处,若为首步骤,则不可进行退回;

3)、否决:将步骤直接结束,不可再进行操作,或者回退至第一步骤;本系统中采用第二种方式;

4)、撤回:若当前步骤已处理,且在下一处理人未进行处理的情况下可进行撤回操作。

3、顺序与并行

顺序是指上一处理人指定某一处理人时,其他拥有此步骤权限的操作员不可进行查看和操作,必须当前处理人处理完毕后,流程才能继续;并行是由上一处理人指定固定多个处理人时,由任一员工处理即可,不分前后顺序,全部处理完成,进入下一步骤,此处理人数目由当前步骤重复次数确定。

两者之间对应关系如下。

  第二部分、系统设计

数据库设计如下:

1)、流程信息表:S_flow_info(flow_id,flow_name)

2)、步骤信息表:S_action_info(action_id,action_name)

3)、流程-步骤信息表:S_step_info(step_id,action_id,flow_id,step_repeat_no,step_order_no,step_type)

(其中step_repeat_no为重复次数,step_order_no为排序号,step_type为类型:0为顺序,1为并行)

4)、流程处理明细表:L_tranct_proc(proc_id,loan_id,step_id,step_action,step_emp_id)

(其中loan_id为数据主表主键,step_id关联S_action_info,step_action存储处理结果:0--不通过,1--通过,2--退回,3--否决,4--撤回,step_emp_id为当前处理员工编号)

其中流程表、步骤表、流程步骤关系表为核心数据表,它们三者确定工作流的完全自定义。流程处理明细表为重要数据表,查询数据主要通过此表进行连接查询。

其他相关表包括:

1)、数据主表L_loan_info(loan_id,loan_name,flow_id,step_id,...)

(flow_id为流程编号,step_id关联S_action_info)

2)、操作员工表E_emp_info(emp_id,emp_name,..)

3)、角色信息表E_role_info(role_id,role_name)

4)、员工-角色关系表E_emp_role(emp_role_id,emp_id,role_id)

(关联角色表与员工表)

5)、步骤角色关系表S_action_role(action_role_id,action_id,role_id)

(关联角色表与步骤表)

6)、下一处理人表L_loan_next_emp(loan_next_emp_id,loan_id,next_emp_id,step_id)

(其中next_emp_id关联操作员工表E_emp_info,step_id关联S_action_info)

其中数据流向如下:

1)业务最开始发生时,数据主表L_loan_info插入数据,其step_id为其所在流程的第一个步骤的编号,可根据下一步骤的重复次数来去将下一处理人的操作员编号插入到下一处理人表L_loan_next_emp中;插入流程处理明细表中数据,step_id为当前步骤编号;更新主表L_loan_info的step_id为下一步骤编号;

2)流程进入下一步骤;

3)下一处理人可查看当前待处理数据(以及本环节待处理数据),选定进行处理,将处理结果(0:不通过,1:通过,2:退回,3:否决)插入到流程处理明细表中,若为通过由更新主表L_loan_info的step_id为下一步骤编号,退回更新为上一步骤编号,否决则更新到第一个步骤编号;

4)在本人已处理数据中可查看已处理过的数据,若下一步骤中操作员还没有进行操作,则可对数据操作进行撤回,撤回时将处理结果(4:撤回)插入到流程处理明细表中,其中的next_emp_id为本人操作员工编号);更新主表L_loan_info的step_id为流程的第一步骤的编号;

5)下一处理人继续3)、4)的循环,直至流程的结束;

6)流程最后一个步骤,将处理结果中step_id值为0插入至流程处理明细中。

  第三部分、实现细节

1、第一步骤中获得数据列表代码如下: 

1
SELECT  * FROM  L_loan_info WHERE  step_id=@step_id

其中@step_id使用代码得到当前数据的第一步骤编号

2、第一步骤获得已处理数据列表代码:

1
SELECT  * FROM  L_loan_info WHERE  loan_id IN  ( SELECT  DISTINCT  loan_id FROM  l_tranct_proc WHERE  step_id=@step_id)

3、获得任一步骤数据列表(含未处理和已处理)

 

 

以上为核心代码,当然由于工作流的具体需求不同,可调整相应代码。

  第四部分、运行结果

1、系统参数配置

2、待处理列表

3、处理页面

(注:当前为最后一处理,下一处理人选择不可见)

4、撤回页面

结语:

完整自定义工作流由于应用广泛且业务逻辑复杂,要实现真正意义上通用的工作流还需要去做更多的分析和研究。

另本文不提供代码及其他资料下载,请勿留言索取。

抛砖引玉,欢迎拍砖!

参考文档:

[1]:维基百科:工作流技术 http://zh.wikipedia.org/zh-cn/工作流

搭建一个自定义的工作流管理平台(一) 在这个html里面,可以看到引用了放置在本地的bootstrap的js, CSS,以及jquery,feather库的js文件。其实Camunda也提供了WEB的应用来管理工作流,但是如果自己有一些额外的需求,要进行一些自定义的功能,那么最好是自己开发一个WEB应用,通过调用Camunda引擎提供的API接口来实现对工作流的管理。工作流的引擎我采用的是业界流行的Camunda,这个引擎基于BPMN/DMN的标准来实现工作流,可以很方便的进行工作流的编排,实现低代码运行,以及业务逻辑编排等功能。 阅读详情

相关推荐

Navi.Component.工作流开发手册(含示例)

1.概述   1.1简介   本文档旨在帮助开发人员快速使用工作流组件,完成OA或审批等涉及到工作流组件的系统开发工作   1.2组件构成   1.2.1组件层次图      组件的核心是工作流引擎,它负责存储工作流模板.引擎被服务所包围,也就是说,若用到工作流引擎操作,必须通过工作流服务   工作流服务包含几大部分:模板服务,流程实例服务,查询服务,跟踪服务,持久化服务,定

qnxjj626627的专栏 1095

工作流引擎核心设计思路!

作者:vivo 互联网服务器团队- Cheng Wangrong一、业务背景营销自动化平台可以支持不同用户生命周期的活动旅程策略配置 ,根据用户触发的不同活动行为,进行差异化的营销触达方案。同时各种类型活动的具体执行过程中也有不同的业务处理流程(比如审批流程和业务流转)。业务流程复杂多样,需求变更频繁,项目开发过程中会有以下痛点:项目交付周期长:一个完整的业务流程需要从头...

架构文摘 5695

flowable工作流 流程变量_Activiti工作流的应用示例

1:工作流的概念工作流(Workflow),就是“业务过程的部分或整体在计算机应用环境下的自动化”,它主要解决的是“使在多个参与者之间按照某种预定义的规则传递文档、信息或任务的过程自动进行,从而实现某个预期的业务目标,或者促使此目标的实现”。工作流--请假审批说明:1) 假设:这两张图就是华谊兄弟的请假流程图2) 图的组成部分:A. 人物:范冰冰 冯小刚 王中军B. 事件(动作):请假、批准、不批...

weixin_35094408的博客 718

一套完整自定义工作流的实现

概述: 本工作流以一套金融软件业务处理流程为例,实现功能包括:流程自定义、步骤自定义、步骤重复次数、步骤类型(顺序/并行)、定义排序功能,完全使用数据库实现,本文将详细分析业务流程、系统设计及实现细节。 术语: 工作流(Workflow)[1],是对工作流程及其各操作步骤之间业务规则的抽象、概括、描述。工作流建模,即将工作流程中的工作如何前后组织在一起的逻辑和规则在计算机中以恰当的模型进行表...

weixin_30294709的博客 4812

Flowise工作流设计最佳实践

本文深入探讨Flowise平台的工作流设计最佳实践,包括工作流设计模式、节点连接、数据流转等核心概念,通过实际案例和代码示例,帮助开发者构建高效、可维护的AI应用工作流。本文详细介绍了Flowise工作流设计的最佳实践,包括工作流设计模式、数据流转、错误处理、性能优化等方面。通过实际案例和代码示例,帮助开发者构建高效、可维护的AI应用工作流。

加入“Super Entity”,与全能开发团队共探AI智能体与数字人项目,开启前沿技术之旅。 1091

解锁C#企业级业务流程管理:深入探讨工作流设计的艺术

通过对C#工作流设计的学习,我们不仅掌握了如何从头构建一个工作流引擎,还学会了如何添加复杂的控制结构以适应各种业务需求。无论你是希望提升现有系统的灵活性,还是正在寻找新的解决方案来改进业务流程,掌握这些技能都将为你带来巨大的价值。让我们一起探索C#的无限可能,共同打造更加智能化的工作流管理系统!

墨夶的博客 430

“基本工作流设计器”示例

今天来讨论一下“承载工作流设计器”的例子,此篇文章有疏忽错误的地方,请大家热心指正。虽然Visual Studio已经包含了Windows Workflow Foundation工作流可视化设计器,但是有的时候我们需要在自己的制作的Windows应用程序中承载这种基于图形的工作流设计器,编写好Activity,然后由客户来设计灵活的工作流程。在MSDN中,关于“承载工作流设计器”的文章:http:

shaily读书学习 2718

一个简单C#工作流的实现

一个简单C#工作流的实现

Silverlight 版工作流设计器示例

正在开发的 Silverlight 流程设计器,希望高手提供布线的算法,目前的布线总是会出现和边贴合的情况。 目前实现功能:活动拖拽 在接点处拖拽可生成连线 选择中活动或连线后,按 Del 键可删除活动或连线 转载于:https://www.cnblogs.com/End...

weixin_34146805的博客 156

最简约的java工作流源代码

总共300多k的大小,实现基本工作流功能,可根据不同的输入数据执行不同的流程,用来学习工作流的最佳范例

一套完整的OA系统源码可自己设计审批流程

一套完整的OA系统源码,我在51aspx上面买的,共享出来给大家

awesome-design-md 多Agent工作流:设计Agent与编码Agent分工协作示例

awesome-design-md 是一个精选的设计系统文档合集:把任意一个 DESIGN.md 放进你的项目,AI 编码 Agent 就能生成与该品牌视觉语言一致的高质量 UI。本文将用一个完整示例,展示设计 Agent 与编码 Agent 如何基于 DESIGN.md 分工协作,让你的 AI 生码结果既"像那么回事",又"像这个品牌"。 ## 一、DESIGN.md 是什么?为什么它成了多A

gitblog_00796的博客 918

基于Matlab-Simulink的大林算法控制系统设计与振铃消除实验

本文详细介绍了基于Matlab-Simulink的大林算法控制系统设计与振铃消除实验。通过分析纯滞后系统的控制难题,探讨大林算法在工业控制中的应用优势,并提供Matlab-Simulink环境搭建、控制器D(z)设计、振铃消除及仿真实验的完整流程。文章还对比了大林算法与PID控制的性能差异,为工程实践提供参考。

dropout6artist的博客 795

PLFM_RADAR仿真工作流:openEMS天线仿真与Qucs滤波器设计实战示例

PLFM_RADAR 是一套开源的 10.5 GHz 低成本相控阵雷达系统,而 **PLFM_RADAR仿真工作流** 正是它的"虚拟试衣间":用 openEMS 做天线仿真、用 Qucs 做滤波器设计,在花一分钱打板之前,先在电脑里把射频性能验证清楚。本文从真实源码出发,带你拆解这套工作流里的两个核心环节——**openEMS天线仿真**与 **Qucs滤波器设计**,并给出可直接复现的实战示例

gitblog_00739的博客 355

Python爬取腾讯视频m3u8加密流实战(附完整代码)

本文提供了一份详细的Python实战教程,指导如何通过抓包分析、模拟请求头与载荷,破解腾讯视频的m3u8加密流防盗链机制,并附上完整代码实现视频片段的下载与合并。教程涵盖从侦察到代码实现的完整流程,并包含参数动态化、多线程下载等高级技巧与避坑指南,旨在帮助开发者掌握流媒体下载的核心技术。

weixin_29090089的博客 1597

美亚杯取证比赛必备:Veracrypt挂载+检材解压保姆级教程(附常见错误排查)

本文提供美亚杯数字取证竞赛的Veracrypt挂载与检材解压保姆级教程。详细解析从分卷压缩包解压(密码格式为MeiyaCup+年份)到使用Veracrypt正确挂载加密容器的全流程,并附有常见错误排查与高级应急方案,帮助选手高效突破技术门槛,顺利进入取证分析阶段。

alice7model的博客 1033

工作流编程循序渐进(8:状态机工作流)

工作流编程循序渐进(8:状态机工作流) 作者  朱先忠 一、状态机工作流简介       状态机工作流由一组状态组成。一个状态被指示为初始状态。每个状态都可以接收一组特定事件。视事件而定,可以转换到另一个状态。状态机工作流可以有最终状态。当转换到最终状态时,工作流将完成。 [...

weixin_33813128的博客 233

Geneformer实战:如何用Hugging Face Transformers快速搭建单细胞转录组分类模型

本文详细介绍了如何使用Geneformer和Hugging Face Transformers快速搭建单细胞转录组分类模型。通过环境准备、数据预处理、模型加载与配置、训练Pipeline构建等步骤,帮助读者掌握基于Transformer架构的单细胞数据分析技术,提升分类准确率和效率。

rl6adventurer的博客 605

基于Activiti工作流引擎篇(一)

一. 项目总体结构 二、maven的配置文件信息<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://ma

当你迷路时,放慢一下脚步 1546

深度:善用人工智能推动高等教育学习、教学与治理的深层变革

从学习方式的革新到教学模式的重构,再到治理体系的升级,人工智能已不再仅仅是辅助工具,而是成为重塑高等教育生态的核心驱动力。某高校的创新实践表明,引入AI生成虚拟患者后,医学生在临床沟通训练中的共情能力提升27%,印证了技术工具与人文教育的互补效应。美国卡内基梅隆大学的实践表明,经过系统培训的教师,其课程设计效率提升40%,且能精准定位83%学生的学习难点。当每个学生都掌握提示工程原理,每位教师都能驾驭AI教学工具,每所高校都建立智能治理框架时,教育将真正实现"以人为本"与"技术为用"的有机统一。

IT胶囊 1093

Android编译系统——Android.bp语法介绍(十五)

Android.bp 是 Android 构建系统(Android Build System)中的配置文件,用于描述如何编译和打包项目中的模块。它是用 Blueprint 编写的,其语法类似于 JSON,但专为 Android 编译系统设计,提供了更高效、灵活的模块化管理。

小旭的专栏 939

为什么使用工作流引擎,什么是工作流引擎,工作流引擎选型以及如何使用

文章目录为什么使用工作流引擎?不使用工作流存在以下问题工作流优缺点什么是工作流引擎尝试自己构建工作流引擎有哪些选型方案呢基于bpmn标准进行流程定义国产自定义如何使用SnakerFlow工作流以请假流程来看下数据库中数据流转情况初始状态员工发起请假申请常见功能流程标题发起申请我的发起我的待办我的已办催办转办驳回撤回抄送加签会签或签 为什么使用工作流引擎? 反证法,如果不使用工作流引擎,先以请假流程举例,从头开始开发流程的业务逻辑:(来看看会出现哪些问题?使用工作流能解决哪些问题?又会带来什么问题?) 一

laker的博客 1万+

自抗扰控制(ADRC)理论与工程实践:8.1 自适应ADRC与参数在线整定

自适应自抗扰控制(AADRC)针对传统固定参数ADRC在动态变化系统中的局限性,提出通过在线调整关键参数(如观测器带宽ω₀、控制器带宽ω_c)以适应对象动态变化。主要方法包括基于稳定性理论的自适应律设计和基于性能指标的优化调节,前者保证闭环稳定但设计复杂,后者通过梯度搜索或模糊规则实现性能优化但缺乏严格稳定性证明。当前挑战在于非线性时变系统的稳定性分析、参数变化速率限制及工程实现的计算负担。AADRC拓展了ADRC在变参数系统(如无人机、软体机器人)中的应用,是迈向自主智能控制的关键技术。

技术工作者 214

没想到 Springboot + Flowable 开发工作流会如此简单

程序员是块砖,哪里需要哪里搬 公司内部的OA系统最近要升级改造,由于人手不够就把我借调过去了,但说真的我还没做过这方面的功能,第一次接触工作流的开发,还是有点好奇是个怎样的流程。 项目主要用 Springboot + Flowable 重构原有的工作流程,Flowable 是个用 Java语言写的轻量级工作流引擎,上手比较简单开发效率也挺高的,一起学习下这个框架。 官方地址:https://www.flowable.org/docs/userguide/index.html,分享的只是简单应用,深入研

架构大数据双料架构师的博客 395

【nvidia-B200 生产环境】NVIDIA 570.124.06+Cuda12.8 Ubuntu22.04 nccl-test 一键部署脚本(免修改复制即用)

目录1. 初始化与日志记录2. 安装基础工具与配置更新3. NVIDIA 驱动安装 570.124.064. 安装 Mellanox OFED 24.10-2.1.8.05. 安装 CUDA 12.86. 安装 NCCL 和测试7. 配置 rc.local 和其他优化8. B200 单独步骤9. 最终测试与重启10. 完整生产脚本,复制即可直接使用总结 功能: 设置日志目录和日志文件路径。 使用 命令将标准输出和错误输出同时写入日志文件和终端。 记录脚本开始时间,并计算开始的秒数

jundao1997的专栏 2797

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

工作流——顺序工作流

之前已经介绍过工作流的基本概念,提到了工作流有两种基本类型,顺序工作流和状态机工作流。它们的区别主要是前者强调的是顺序过程,后者强调的是状态的改变。     主要区别:     顺序工作流:       顺序工作流的执行过程是一个连续的步骤序列,它在完成一个活动之后会去执行到下一个.比如用顺序工作流模拟将访问记录从网站日志转移到数据库中的操作:第一步,下载日志文件;第二步,将日志批量插入数据

Victor 2581

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

上一篇: 工作流相关概念
下一篇: 常用坐标系和投影分析-GIS的核心基础
engineer_he
博客等级 码龄10年 109粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值