Kettle ETL实战:从原理到生产级MySQL→Oracle增量同步

Kettle8.2数据同步实战:巧用‘合并记录’组件,实现MySQL到MySQL的增量更新(附完整转换文件) 本文详细介绍了如何利用Kettle8.2的‘合并记录’组件实现MySQL到MySQL的高效增量数据同步。通过五个关键策略,包括增量同步架构设计、合并记录组件配置、高性能管道构建、跨数据库同步解决方案以及监控维护策略,帮助ETL工程师应对高频数据变更挑战,提升数据同步效率与可靠性。 阅读详情

1. 为什么说Kettle是数据仓库ETL场景里真正能“扛活”的工具

你可能在面试时被问过:“ETL工具有哪些?Kettle和DataX、Airflow比有什么区别?”也可能在项目会上听到技术负责人拍板:“就用Kettle,开发快、运维稳、改需求不返工。”——但真让你打开SPOON界面,拖几个组件连几条线,再跑通一个从MySQL同步到Oracle的作业,十个人里至少有三个人卡在JDBC驱动报错,四个人搞不清“转换”和“作业”的边界,剩下三个虽然跑通了,但一加调度、一上生产、一换数据库版本,立马崩得无声无息。

这不是Kettle不行,而是它太“实在”:不靠云原生概念包装,不靠AI噱头引流,不靠强制订阅锁死用户。它就是用纯Java写成的一套可视化ETL框架,核心逻辑全在XML里,启动靠一个JVM进程,部署靠一个解压包,连Windows双击spoon.bat就能跑起来。这种“土味架构”恰恰是它在金融、政务、制造业等对稳定性、可审计性、国产化适配要求极高的领域里活下来的根本原因——没有中间层,没有黑盒服务,所有数据流向、字段映射、错误日志,全部肉眼可见、可调试、可回溯。

我最早接触Kettle是在2015年做某省社保数据迁移项目,当时要每天凌晨把27个地市的Oracle 10g库里的参保记录,清洗脱敏后汇总进省级数据仓库(也是Oracle)。团队试过Python脚本+SQL拼接,结果每次字段新增或类型变更都要重写逻辑;也试过商业ETL工具,License贵不说,出问题只能等厂商远程支持,一次凌晨三点的主键冲突导致当日数据中断,业务方直接打电话到项目经理家里。最后换成Kettle,我们用一个“表输入→字段选择→字符串替换→表输出”的简单转换,配合“成功则发邮件、失败则发短信+自动重试三次”的作业结构,连续三年零人工干预运行。不是因为它多炫酷,而是因为它的每一步操作都像拧螺丝一样确定:你拖进去的组件,参数填什么,报错在哪一行,日志打什么内容,全都明明白白。

所以别被“神器”二字带偏——Kettle不是魔法棒,它是扳手、游标卡尺和万用表的组合体。它解决不了数据语义混乱、源系统字段命名随意、目标库约束缺失这些上游问题,但它能把这些问题暴露得清清楚楚,并给你一套标准化、可复用、可沉淀的处理路径。如果你正在为“ETL开发周期长、交接难、上线后总出诡异问题”头疼,或者正被“Java基础扎实但不会落地ETL场景”的简历困扰,那这篇笔记就是为你写的:不讲虚的架构图,只拆真实跑通一个生产级任务的每一个坑、每一行配置、每一个必须亲手点开的弹窗。

2. Kettle的核心设计哲学与不可替代性解析

2.1 “转换”与“作业”二分法:不是功能划分,而是工程思维的具象化

很多新手第一次打开SPOON,会困惑:“为什么我要先建转换,再建作业?不能一步到位吗?”这恰恰是Kettle最反直觉、也最体现其工程价值的设计。它把ETL过程强行切成两个世界:

  • 转换(Transformation) :专注 数据流处理 。它是一组有向无环图(DAG),节点是“输入/输出/转换”三类组件,边是数据行(Row)的流动路径。每个步骤只关心“我拿到什么数据、怎么加工、给谁”。比如“Excel输入→空值过滤→日期格式标准化→MySQL输出”,整条链路里没有分支判断、没有循环、没有异常跳转——它天生就是单向流水线。

  • 作业(Job) :专注 流程控制与调度 。它是一组有向图,节点是“作业项(Job Entry)”,边是执行结果(success/failure/hop)的条件流转。它可以调用转换、发送邮件、执行Shell脚本、检查文件是否存在、等待某个时间点……本质上是一个带条件分支的批处理控制器。

提示:这个二分法不是为了增加复杂度,而是为了隔离关注点。就像修车时,发动机维修(转换)和车辆调度管理(作业)必须由不同资质的人负责。你绝不会让一个调油门的技师去决定今天哪辆车出车、几点发车、故障了怎么备用车——Kettle强制你把“数据怎么变”和“流程怎么走”分开设计,天然规避了“在SQL里写IF ELSE做业务判断”这类高风险操作。

我见过太多项目把所有逻辑塞进一个转换里:用“JavaScript代码”组件判断状态,用“过滤记录”组件做分支,最后整个转换变成一团无法维护的意大利面条。而规范做法是——把所有业务规则判断、失败重试、通知机制全部放在作业层,转换只干三件事:抽取、清洗、加载。这样做的好处立竿见影:当业务方说“明天起身份证号要加校验位”,你只需修改转换里的一个“JavaScript代码”组件;当运维说“Oracle库半夜维护两小时”,你只需在作业里加一个“等待指定时间”的作业项,完全不用碰数据处理逻辑。

2.2 XML即代码:没有黑盒,只有可审计的文本

Kettle的所有转换(.ktr)和作业(.kjb)文件,本质就是UTF-8编码的XML。你可以用记事本打开一个.ktr文件,看到类似这样的结构:

<transformation>
  <info>
    <name>用户数据清洗</name>
    <description>从CRM导出用户表,清洗手机号、去除重复</description>
  </info>
  <order>
    <hop>
      <from>表输入.0</from>
      <to>字符串替换.0</to>
      <enabled>Y</enabled>
    </hop>
  </order>
  <step>
    <name>字符串替换</name>
    <type>StringReplace</type>
    <field_name>mobile</field_name>
    <old_value> </old_value>
    <new_value></new_value>
  </step>
</transformation>
基于JDBC的全量/增量数据迁移与同步原理 基于JDBC的全量/增量数据迁移与同步原理一、关系库基于JDBC的全量数据迁移原理1.1 where条件切片方式1.1.1 原理1.1.2 优缺点1.1.3 影响性能的因素:1.2 limit/offset分页切片方式1.2.1 原理1.2.2 优缺点1.2.3 影响性能的因素1.2.4 oracle基于分页的切片方式二、基于JDBC的增量数据迁移/同步原理三、关系库的逻辑结构3.1 Mysql3.2 Oracle3.2.1 oracle中的其它概念:3.3 PostgreSQL3.3.1 PostgreS 阅读详情

相关推荐

Kettle资源库实战指南:原理、搭建与排查

在数据开发与ETL工程实践中,元数据管理和团队协作一直是核心痛点。Kettle(PDI)作为广泛使用的数据抽取工具,早期依赖XML文件保存转换和作业,导致版本冲突、连接配置分散、权限失控等问题。资源库(Repository)的出现,将转换、作业、数据库连接等元数据统一存储在结构化介质中,形成可共享、可管控的元数据层。数据库资源库和文件资源库分别适用于团队协作和轻量迁移场景,配合MySQL等关系型数据库,可实现用户权限、版本历史与集中管理,从而保障ETL流程的稳定运行。本文围绕Kettle资源库的搭建过程、配

weixin_34242509的博客 392

Kettle多表数据抽取:原理、优化与实战

ETL(Extract-Transform-Load)是数据仓库构建的核心环节,通过抽取、转换和加载实现数据整合。开源工具Kettle(Pentaho Data Integration)凭借其可视化界面和强大功能,成为企业级ETL的热门选择。在多表数据抽取场景下,需要特别关注表间关联、事务一致性和性能优化等关键技术点。合理的多表抽取方案能显著提升数据仓库构建效率,在金融、电商等行业实践中已验证可带来40%以上的性能提升。本文深入解析Kettle多表抽取的核心逻辑,涵盖主从表关联、星型模型等典型业务场景,对比

weixin_29043895的博客 296

别再手动比对Excel了!用Kettle8.2的‘合并记录’组件,5分钟搞定两张MySQL表的数据差异分析

本文详细介绍了如何使用Kettle8.2的‘合并记录’组件高效分析两张MySQL表的数据差异,替代传统手动Excel比对方法。通过核心机制解析、实战案例演示和性能优化技巧,帮助用户快速实现数据一致性核查,提升ETL工作效率。

weixin_30629653的博客 425

Kettle9.2实战避坑指南:MySQL→Oracle同步全链路调优

ETL(Extract-Transform-Load)是数据集成的核心范式,其本质是跨系统、可调度、带状态的数据搬运过程。Kettle(Pentaho Data Integration)作为成熟开源ETL工具,以可视化编排与JDBC深度集成为技术优势,广泛应用于MySQL、Oracle等关系型数据库间的增量同步、异构清洗与ODS层构建。其价值在于将复杂SQL逻辑、连接池管理、行级缓冲控制和作业调度收敛于统一工程框架内,显著降低数据管道开发门槛。典型应用场景包括业务库到数仓的定时同步、多源订单归集、JSON/

weixin_32285357的博客 210

Kettle ETL核心机制与生产调优实战指南

ETL(Extract-Transform-Load)是数据集成的基础范式,其本质是跨系统、多阶段的数据流协同处理。Kettle(Pentaho Data Integration)作为成熟开源ETL工具,核心在于理解行集(RowSet)缓冲机制、Hop跳转模式(分发/复制)、元数据契约与JVM资源调度之间的耦合关系。掌握这些原理,才能避免常见卡死、乱码、精度丢失和时区偏移问题;技术价值体现在百万级数据同步不OOM、字段精度零丢失、中文与日期稳定流转;典型应用场景包括MySQL→Oracle异构同步、CSV/

weixin_29057237的博客 328

Kettle ETL实战:从概念原理到增量抽取与故障排查指南

在数据仓库、报表平台等数据集成项目中,ETL(抽取-转换-装载)是无可回避的环节。Kettle作为一款开源ETL工具,通过可视化的转换与作业设计,将复杂的批处理流程拆解为清晰的数据流水线和调度中心。理解行缓存、步骤与跳的机制,掌握JDK环境、数据库驱动配置及增量抽取思路,是落地工程实践的基础。它适用于数仓工程师、BI实施、运维等角色,典型场景包括MySQL到Excel的小闭环同步、JSON嵌套报文解析、基于时间戳的增量抽取等。然而生产环境中时区报错、驱动缺失、主键冲突、内存溢出等问题频发,系统掌握Kettl

weixin_29053073的博客 325

Kettle ETL基础入门:从概念、原理到实战避坑的完整指南

ETL是数据仓库与数据集成的核心环节,负责从源端抽取、转换并加载数据,是报表、分析和业务同步的技术底座。开源工具Kettle(即Pentaho Data Integration)凭借图形化拖拽和无需编码的特点,成为最普及的ETL方案之一。它通过“转换”处理数据流、“作业”编排控制流,并以XML承载字段元数据,让非程序员也能读懂数据管道。无论是数仓建模、跨库同步还是接口接入,Kettle都能快速落地。然而,新手常被版本与JDK匹配、MySQL时区报错、空字符串转NULL、命令行调度等细节卡住。掌握Spoon界

weixin_29061509的博客 335

Kettle ETL实战:从Spoon入门到Carte服务化部署

ETL(Extract-Transform-Load)是数据集成的核心范式,其本质是实现异构数据源之间的可靠抽取、可控清洗与精准加载。Kettle(Pentaho Data Integration)作为成熟开源ETL引擎,基于可视化编排与XML元数据驱动,兼顾开发效率与生产稳定性。它支持JavaScript脚本嵌入、参数化调度、错误分支处理及Carte服务化API调用,技术价值在于降低Java/Python工程化门槛,同时满足信创环境兼容、事务安全与背压控制等企业级要求。典型应用场景包括数仓增量同步、BI报

weixin_29055137的博客 195

Kettle PDI 9.2 实战:MySQL/Oracle 增量同步与生产调优

ETL(Extract-Transform-Load)是数据集成的核心范式,其本质是通过可控的数据抽取、结构化转换与目标加载,实现跨系统数据一致性。Kettle(Pentaho Data Integration)作为轻量级开源ETL工具,凭借无集群依赖、可视化拖拽、错误可追溯等特性,在中小团队的数据库同步场景中持续发挥不可替代的技术价值。尤其在MySQL与Oracle异构数据库间执行增量同步时,它通过参数化SQL、事务分块提交、错误Hop捕获等机制,兼顾可靠性与工程效率。本文聚焦PDI 9.2版本,覆盖绿色

weixin_29061531的博客 211

Kettle 5.x ETL工具实战手册:从安装到增量同步的完整指南

在数据仓库建设中,ETL工具承担着从异构数据源抽取、清洗、转换并加载的核心职责。Kettle作为一款开源ETL工具,凭借其跨平台部署与灵活的流程编排能力,长期被用于批量数据处理与日常数据同步任务。理解Kettle 5.x的组件模型与执行原理,是保障数据迁移稳定性的关键:Spoon、Kitchen、Pan分别对应图形化开发、作业调度与转换执行,而行集驱动的数据流机制则决定了内存占用与吞吐表现。从文本文件抽取到数据库输出,从命令行批处理到增量同步,Kettle 5.x的实用技巧能帮助工程人员在服务器无图形环境下

weixin_28829339的博客 257

Kettle 9.4实战:从环境配置到自动化调度避坑指南

在数据集成与数据同步领域,ETL工具是连接异构数据库、完成数据清洗与转换的核心桥梁。Kettle(Pentaho Data Integration)作为开源ETL工具,通过Spoon图形化界面将数据抽取、字段处理、目标写入等环节编排为可视化转换流,其底层依赖JDK与JDBC驱动的正确配置。无论是MySQL与Oracle间的跨库迁移,还是每日定时增量同步,掌握转换(Transformation)与作业(Job)的配合,都能显著提升数据管道开发效率。本文基于Kettle 9.4实际部署经验,覆盖JDK版本选型、

weixin_29047919的博客 254

保姆级教程:用Java和HslCommunication库搞定三菱PLC数据读写(附完整代码)

本文提供了一份详细的Java与三菱PLC通信教程,通过HslCommunication库实现高效数据读写。内容涵盖环境配置、通信模式选择、数据类型操作、异常处理及性能优化,并附有完整代码示例,帮助开发者快速掌握工业自动化中的PLC数据交互技术。

weixin_28731223的博客 228

Windows下Delft3D安装全攻略:从申请许可到编译运行(避坑指南)

本文详细解析了Windows系统下Delft3D的完整安装流程,涵盖环境准备、许可获取、源码编译到性能调优的全过程。针对中国用户常见的网络问题和系统兼容性痛点,提供了经过验证的解决方案,特别强调Intel Fortran编译器匹配、环境变量配置等关键步骤,帮助水利工程师高效完成这一水动力学模拟工具的部署。

weixin_28736355的博客 550

Synares病毒实战:如何手动清除C盘隐藏的Synaptics.exe(附资源修复脚本)

本文详细介绍了Synares感染型病毒的手动清除方法,该病毒伪装成Synaptics触摸板驱动,感染EXE和XLSX文件。文章提供了从病毒行为分析、母体清除到被感染文件修复的全流程指南,并附有实用的资源修复脚本和防御加固方案,帮助用户彻底清除这一顽固病毒。

lg888的博客 2356

强化学习_06_pytorch-TD3实践(BipedalWalkerHardcore-v3)

DDPG的critic会高估, 从而导致actor策略失败。TD3是增加了三个关键技巧优化DDPG。经过优化后的TD3(Twin Dalayed DDPG 双延迟深度确定性策略梯度算法)适合于具有高维连续动作空间的任务。

RL小站 2690

paddle 43 用onnxruntime实现ppyoloe模型的部署(含python和c++版本)

PP-YOLOE+是PP-YOLOE模型的升级版,PP-YOLOE+_l在COCO test-dev2017达到了53.3的mAP, 同时其速度在Tesla V100上达到了78.1 FPS。PP-YOLOE+_s/m/x同样具有卓越的精度速度性价比。paddle官方只给出了基于paddle框架的部署案例,为了更好的部署,为此实现将paddle模型转换为onnx模型,然后在python下实现onnxruntime部署。后续会补充c++ onnxruntime部署

a486259的博客 1915

038、OIS 光学防抖原理与调试:陀螺仪数据融合、Lens Shift OIS 的闭环控制

本文分享了OIS光学防抖系统的调试经验和关键技术要点。作者通过一个"呼吸感"Bug案例,揭示了陀螺仪数据融合和闭环控制的重要性。系统介绍了OIS的三个关键层次:传感器层(陀螺仪特性)、控制层(复合算法)和执行层(闭环控制)。重点讲解了陀螺仪数据融合的互补滤波实现、Lens Shift闭环控制的PID优化策略(包括积分抗饱和和微分滤波),以及前馈补偿的应用。最后总结了调试中的关键问题:数据同步、霍尔校准、温度补偿和性能评估方法,并给出实用建议:平衡算法复杂度与性能、预留带宽余量、重视产线校准等。文章强调OIS

sundong_81的博客 264

Sigrity System Explorer Transient Analysis模式进行瞬态仿真分析操作指导-差分信号

Sigrity System Explorer Transient Analysis模式可以用于瞬态仿真分析,通过搭建简易拓扑用于前仿真分析通道的时域性能,下面搭建一个简易的差分拓扑进行说明,以下图为例,准备好发送接收端的IBIS模型, (ibis_se.ibs,本例发送接收端都使用相同的IBIS模型),以及传输线的S参数模型(welement_se.sp)最上方的图形界面是传输线的模型,本例是一个上下都有参考平面的带状线,右侧的梯形是蚀刻角度,根据W1和W2以及铜厚来确定。

weixin_54787054的博客 440

CAPL编程规范与最佳实践

通过本文的学习,读者应该对CAPL编程规范与最佳实践有了初步的了解,并能够编写高质量的CAPL脚本。在实际项目中,CAPL的应用非常广泛,希望读者能够通过不断的学习和实践,掌握更多的CAPL技巧,提高自己的开发能力。

闲人编程的博客 1748

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

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

上一篇: 机器学习筛选血清标志物:结直肠癌早期诊断模型构建与评估全流程
下一篇: FMEA第五版核心解读:七步法、AP行动优先级与新版表格实战
weixin_34026276
博客等级 码龄11年 6372粉丝 1272原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值