SAP ABAP RFC接口技术:从核心原理到高级实践

SAP ABAP | 接口技术:tRFC (事务性 RFC) 的一致性与底层机制 本文深入解析SAP系统中tRFC(事务性RFC)的工作原理与排错方法。tRFC通过LUW(逻辑工作单元)机制确保异步调用的顺序性、上下文一致性和事务完整性,所有调用在COMMIT WORK后作为一个整体执行或回滚。系统通过TID(事务ID)唯一标识每个LUW,并将数据持久化存储在ARFCSSTATE和ARFCSDATA表中。文章详细介绍了tRFC的执行流程、异常处理机制,并重点说明如何使用SM58事务码进行监控和排错,包括查看失败记录、分析错误信息以及手动干预执行过程。掌握这些核心原理和工具能有效提升SAP 阅读详情

1. 项目概述:为什么ABAP开发者必须掌握RFC接口技术?

在SAP ABAP开发领域,接口技术是连接不同系统、打通数据孤岛的生命线。而RFC(Remote Function Call,远程函数调用)无疑是这条生命线上最经典、最核心的动脉。我从业十多年,从ECC到S/4HANA,从单体应用到云架构,见证了无数项目因为接口问题而延期、返工甚至失败。可以毫不夸张地说,一个ABAP开发者对RFC的理解深度,直接决定了他能处理的问题复杂度和在项目中的价值上限。

RFC的本质是什么?简单说,它就是SAP系统之间,或者SAP与非SAP系统之间,进行程序级对话的标准协议。想象一下,系统A需要系统B提供一份客户主数据,它不需要知道系统B内部复杂的表和程序逻辑,只需要调用一个预先定义好的、公开的“函数”,就像我们打电话订餐,只说“要一份披萨”,厨房内部如何和面、烘培的细节我们并不关心。RFC就是这个“订餐电话”。它解决了异构环境下的通信难题,是SAP实现分布式应用架构的基石。无论是常见的IDoc、PI/PO中间件,还是现在热门的OData服务,其底层通信或配置模型中,往往都能看到RFC的身影。因此,深入实践并总结RFC,不是一项可选技能,而是ABAPer的必修课和硬通货。

2. RFC核心原理与架构设计思路拆解

要玩转RFC,不能只停留在“怎么调用”的层面,必须理解其背后的通信模型和设计哲学。这决定了你写的接口是稳定高效,还是脆弱难维护。

2.1 RFC的通信模型:同步、异步与事务性

RFC主要分为三种模式,每种模式对应不同的业务场景和可靠性要求。

  1. 同步RFC(sRFC) :这是最常用、最直观的模式。调用方(Client)发起调用后,会等待被调用方(Server)执行完毕并返回结果,在此期间调用方程序处于阻塞状态。这就像打一个需要即时答复的客服电话。它的优点是编程模型简单,能立即得到处理结果。但缺点是如果被调用系统响应慢或不可用,调用方程序就会“卡住”,影响用户体验和系统资源。因此,它适用于对实时性要求高、且被调用系统非常可靠的内部系统间调用。

  2. 异步RFC(aRFC) :调用方发起调用后,不等待结果,立即继续执行后续代码。被调用方在后台独立执行,执行完毕后可以通过回调子程序(CALLBACK)通知调用方。这就像发一封电子邮件,发出去后你就可以干别的事了,对方处理完可能会回复你。aRFC的优点是不会阻塞调用方,提高了程序的吞吐量和响应速度。但它不保证执行顺序,且如果调用方程序在回调发生前就结束了,回调将无法执行。它适用于不需要立即结果、且允许任务并行处理的场景,比如大批量数据的预处理、触发后台作业等。

  3. 事务性RFC(tRFC) :这是sRFC的增强版,它将被调用函数的执行与一个唯一的事务ID(Logical Unit of Work, LUW)绑定。调用会被持久化到数据库(ARFCSSTATE和ARFCSDATA表),由SAP的调度器(RSARFCSE)负责确保其最终被执行(Exactly-Once)。即使调用瞬间接收系统宕机,在系统恢复后,调度器也会重新尝试提交,直到成功。这就像用挂号信寄送一份重要合同,邮局有记录确保送达。tRFC保证了数据传输的可靠性,是跨系统业务事务(如创建销售订单触发生成物料凭证)的首选。但它仍然是异步的,调用方无法立即得到结果。

  4. 队列RFC(qRFC) :在tRFC基础上增加了顺序控制。你可以将多个tRFC调用放入一个队列(Queue),系统会严格按照先进先出(FIFO)的顺序执行。这对于有严格先后依赖关系的业务流程至关重要,比如必须先创建物料主数据,才能为其创建采购订单。

设计接口时,我的经验是: 优先考虑业务需求对一致性和实时性的要求,而非技术便利性 。需要立即确认结果的,用sRFC;需要可靠执行但不要求立即结果的,用tRFC;可并行、可丢失的辅助任务,用aRFC;有严格顺序的系列操作,用qRFC。

2.2 RFC目标系统配置:连接的基础

无论哪种RFC,都需要在调用方SAP系统中定义目标系统(Destination)。这是在事务码 SM59 中完成的。这里面的坑,新手最容易踩。

RFC目标类型主要有三种:

  • ABAP连接(类型3) :连接另一个SAP系统。需要配置目标主机、系统编号、客户端、登录用户/密码(或当前用户)等。
  • TCP/IP连接(类型I) :连接非SAP系统,但该系统提供了符合SAP RFC库的接口。现在已较少使用。
  • HTTP连接(类型H) :通过HTTP/HTTPS协议连接Web服务。这是SAP NetWeaver之后对接外部RESTful服务的主流方式之一,其底层仍可视为一种RFC理念的延伸。

在 SM59 里配置时,有几个关键点:

  • 登录信息 :生产环境绝对不要使用硬编码的超级用户。应该使用通信用户(Communication User),这类用户权限经过严格限定,仅用于系统间通信,并通过 SCOT 事务码与RFC目标绑定,安全性更高。
  • Unicode与字符集 :如果相连的系统字符集不一致(如一个是非Unicode,一个是Unicode),必须在“目标”页签的“特殊选项”中正确设置字符集转换,否则中文等双字节字符会出现乱码。
  • 连接测试 :配置完成后,务必使用“连接测试”功能。它不仅能测试网络连通性,还能测试登录是否成功。但要注意,连接测试成功仅代表 此刻 能连上,不代表程序运行时没问题。网络波动、对方系统负载、用户密码过期等都可能导致运行时错误。

3. 核心细节解析:创建与调用RFC的实操要点

理解了原理,我们进入实战。RFC的开发分为两端: 服务端(Server) 创建可供远程调用的函数模块, 客户端(Client) 编写代码调用它。

3.1 服务端:如何设计一个健壮的RFC函数模块

在事务码 SE37 中创建函数模块时,勾选“远程启用模块”复选框,它就成为了一个RFC函数。

1. 接口设计原则:

  • 参数精
SAP-ABAP:SAP 锁机制深度解析:ENQUEUE_EZPROGRAM_LOCK 的设计原理与实战指南 本文深度解析SAP ABAP中的程序锁机制,重点探讨标准锁函数ENQUEUE_EZPROGRAM_LOCK的设计原理与实战应用。文章从Enqueue Server分布式架构入手,详细分析锁表存储结构、锁对象创建规则(命名规范、激活要求等)以及共享锁/排他锁的区别。通过函数参数解析(如_SCOPE、_WAIT的作用)和代码示例,展示如何实现程序锁的申请、冲突检测与状态监控。文中还包含锁冲突处理流程图和实用代码模板,帮助开发者掌握SAP并发控制的核心技术,确保程序修改的安全性。(149字) 阅读详情

相关推荐

SAP-ABAP:SAP ABAP 深度解析:BAPI 从入门到精通 —— 原理、实战与自定义开发全指南

SAP ABAP BAPI 深度解析摘要 本文全面介绍了 SAP ABAP 中的 BAPI(业务应用程序编程接口)技术,涵盖以下核心内容: BAPI 定义与特点:BAPI 是 SAP 为业务对象提供的标准化编程接口,具有面向对象、封装业务逻辑、标准化错误处理和版本兼容性等特点。 BAPI 与 RFC 关系:所有 BAPI 都是 RFC,但需额外满足业务对象注册、标准化参数和错误处理等要求。 BAPI 核心作用:包括业务逻辑封装、系统集成、标准化错误处理、版本兼容和审计合规。 实战演示:通过创建销售订单的完整

baidu_35680696的博客 1027

SAP RFC回调白名单错误:原理、配置与排查全解析

在分布式系统集成中,远程函数调用(RFC)是实现跨系统通信的核心技术。其安全机制通过建立可信系统列表(Positive List)来管控反向回调操作,防止未授权的访问。这一机制在保障企业应用安全的同时,也带来了配置复杂性。当系统间需要进行双向数据交换时,例如在IDoc处理或BAPI调用场景中,若目标系统未在发起系统的白名单中注册,便会触发“RFC callback call rejected by positive list”错误。解决此问题的关键在于理解RFC通信中客户端与服务器角色的动态互换原理,并正确

weixin_30292745的博客 379

SAP ABAP异步通信:QRFC队列化RFC原理与实战开发指南

在分布式系统架构中,消息队列是实现系统解耦、异步通信和流量削峰的核心技术。其基本原理是将请求暂存于队列,由后台进程异步处理,从而提升系统响应速度和可靠性。SAP ABAP生态中的QRFC(Queued Remote Function Call)正是这一理念的原生实现,它通过将RFC调用请求持久化到数据库队列,保证了消息的可靠传递和事务一致性。在SAP ERP等核心业务系统中,面对`sap bapi_deliveryprocessing_exec`发货处理、`sap fico`财务过账等耗时或依赖外部系统的场

weixin_34342207的博客 346

SAP ABAP RFC函数外部调用Debug全攻略:从SE37设置到断点跟踪

本文详细介绍了SAP ABAP RFC函数外部调用Debug的全过程,从SE37设置到断点跟踪,帮助开发者解决跨系统集成中的调试难题。涵盖权限配置、外部断点设置、调试会话监控等关键步骤,并提供了高级调试技巧与常见问题解决方案,适用于与Java、.NET等系统的接口调试。

weixin_30399821的博客 448

SAP-ABAP:SAP BAPI技术原理与数据访问实战指南

SAP-ABAP:SAP BAPI技术原理与数据访问实战指南

baidu_35680696的博客 1142

SAP Application Server ABAP(AS ABAP)

AS ABAP 是 SAP 系统的核心,负责业务处理和数据交互。高可用系统(High Availability System)数据库复制(Database Replication)分布式系统(Distributed System)中央系统(Central System)集群(Cluster)

qq_36527581的博客 1155

在 ABAP 里优雅地构建 Dynamic RFC Destination:原理、代码拆解、Gateway 场景与 BTP 落地要点

本文介绍了SAP系统中动态RFC目的地的核心概念与应用场景。静态SM59配置在复杂集成环境下存在局限性,而动态目的地通过运行时决策实现了灵活路由。文章解析了动态目的地的本质特征(以%%为前缀)、创建方法(使用CL_DYNAMIC_DESTINATION类)及其三大典型应用场景:多后端系统路由、临时切换演练和特定实例连接。特别强调了安全边界问题,指出必须通过受控方式生成动态目的地以避免安全风险。最后提供了代码示例,展示如何动态配置连接参数并执行远程调用。动态RFC目的地是SAP系统集成的重要补充能力,在保证安

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

Excel 直接调用 ABAP RFC 的工作原理介绍

本文介绍了如何在Excel中创建按钮调用ABAP系统的RFC函数。通过启用开发者选项,添加按钮控件并关联VBA宏代码,实现了从Excel直接连接SAP系统并调用TH_USER_LIST函数获取登录用户信息的功能。文章重点讲解了使用VBA的CreateObject函数创建SAP.Functions对象的技术原理,以及如何通过COM接口与ABAP系统交互。这种方法无需安装额外SDK,利用Excel内置功能即可实现企业系统集成,为业务人员提供了便捷的数据访问方式。

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

在 SAP 系统间用 Trusted RFC 打通 Principal Propagation:一篇面向 ABAP 团队的深度实践笔记

本文系统梳理SAP系统间Trusted RFC信任关系的核心要点:从解决跨系统免密访问问题出发,明确Trusted/Trusting系统的单向信任角色,强调用户标识必须一致的关键前提。文章详细阐述了基于SM59/SMT1/SMT2的标准配置流程,重点分析S_RFCACL授权控制与SMTACL白名单机制,并探讨BTP场景下的身份传递实现。通过典型故障自检清单与安全加固建议,帮助ABAP团队高效落地Trusted RFC方案。所有内容均基于SAP官方文档,结合实践验证的配置步骤与案例经验,为系统间安全通信提供可

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

从协议到工程落地:SAP RFC 在 S/4HANA 与异构系统集成中的全景实践指南

本文为SAP工程师提供RFC集成实践指南,涵盖协议本质、角色定位、类型谱系及实现方案。文章详细解析了同步(sRFC)、异步(aRFC)、事务型(tRFC)、队列型(qRFC)和后台RFC(bgRFC)等调用方式的特点与适用场景,并给出ABAP代码示例。同时介绍了SM59配置要点和监控工具(SM58/SMQ1/SMQ2/SBGRFCCONF),帮助工程师构建可观测的RFC集成方案。文中强调在新项目中优先考虑bgRFC框架,并提供了常见问题的排查思路。

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

在 ABAP C1 合同下安全消费 SAP 结构类型:从 INCLUDE 到 RFC 的完整避坑指南

摘要: SAP结构类型在现代化开发中已成为系统认可的"契约",要求开发者正确处理API演进带来的变化。本文通过三个真实案例揭示常见问题:1)老报表将结构当作字符串切片导致升级报错;2)ABAP SQL中SELECT *语句因字段新增而语法错误;3)SAP_GWFND项目中INCLUDE结构导致命名冲突。针对这些问题,文章提出解决方案:使用RENAMING WITH SUFFIX避免命名冲突,采用CORRESPONDING进行安全映射,以及在ABAP SQL中避免直接使用本地自定义结构。这

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

SAP接口开发全解析:文档、工具与最佳实践

BAPI(Business Application Programming Interface)是SAP定义的一套标准业务接口,它允许其他系统以一种标准化的方式访问SAP系统内部的数据和功能。BAPI的优势在于它提供了一种统一的接口访问SAP的业务对象,无论这些业务对象是在ERP、CRM还是其他SAP模块中。通过使用BAPI,企业能够实现与SAP系统的无缝集成,而无需深入了解SAP系统的底层架构。BAPI遵循行业标准和最佳实践,允许开发者编写可重用的代码,并且支持多种开发平台和语言。

weixin_28771751的博客 1913

.NET调用SAP RFC实战:连接池、Unicode与ABAP参数映射

SAP RFC(Remote Function Call)是企业级系统集成中关键的二进制远程调用协议,不同于REST或WebService,它依赖非托管SDK、严格遵循ABAP参数契约,并深度耦合SAP登录会话与Unicode字符处理。理解RFC底层原理,掌握sapnco3.dll连接池管理、中文乱码根因(如注册表Codepage配置)及TABLES/IMPORTING参数在.NET中的精准映射,是保障ERP数据同步稳定性的技术基石。典型应用场景包括MES对接SAP ECC、BI工具定时抽取主数据、WMS与

weixin_32520095的博客 307

手把手教你用三极管搭建麦克风音频放大电路(附完整电路图)

本文详细介绍了如何使用三极管搭建麦克风音频放大电路,包括电路设计基础、元件选择、完整电路图及分步焊接指南。通过实际操作和调试技巧,帮助电子爱好者和学生深入理解模拟电路原理,实现音质清晰的音频放大效果。

Black的专栏 963

abaqus wcm插件下载_Abaqus随机短纤维增强复合材料建模插件

文末附Abaqus随机短纤维增强复合材料建模插件下载链接前言短纤维增强复合材料相对于长纤维增强复合材料来说更容易制备,且短纤维的填充性能略有改善,可制造复杂产品,广泛应用于车辆、航空航天、建筑等行业,对短纤维增强复合材料进行细观力学分析,可对其宏观力学性能进行预测、分析破坏机理等。接下来对随机短纤维增强复合材料建模插件进行介绍。NO.1 【算法简介】难点一:此插件核心在于判断生成的纤维是...

weixin_39974882的博客 2831

Frida Stalker实战:如何用指令级追踪破解OLLVM混淆的AES算法

本文深入探讨了如何使用Frida Stalker进行指令级追踪,破解经过OLLVM混淆的AES算法。通过动态分析技术,逆向工程师可以精准识别控制流平坦化等混淆手段,还原算法逻辑,特别适用于移动安全领域的加密算法分析。文章提供了详细的配置指南、核心机制解析和实战案例,帮助读者掌握对抗高级代码混淆的有效方法。

weixin_29325955的博客 470

Spring AI 实战:如何使用 MCP Server 搭建 MCP 天气查询服务

MCP(Model Context Protocol)是 Anthropic 提出的一种开放协议,它定义了AI 模型与外部世界交互的标准方式。通俗地说:大模型本身只拥有训练数据中的知识,它不知道今天的天气、无法查询你的数据库、不能调用你的内部 API。MCP 就是解决这个问题的"桥梁"——它让模型能够发现并使用外部工具(Tools),就像人用手去操作工具一样。角色职责对应依赖MCP Server暴露工具(Tool),供模型调用MCP Client连接 Server,让模型发现和使用工具本文我们先聚焦。

SmartSi 745

基于STM32+Qt上位机设计的智慧停车场管理系统(207)

本项目设计了一套基于STM32+Qt上位机的智慧停车场管理系统。该系统融合了先进的嵌入式技术、图像识别技术、数据库技术和移动互联网技术,通过STM32硬件端实时采集车库现场信息,包括车牌识别、车位占用状态监测等,并将数据上传至Qt上位机进行处理与展示。利用MySQL数据库存储车辆出入库记录及车位使用情况,确保数据的安全性和可追溯性;通过Android手机APP为用户提供查询、支付等功能,实现远程交互与便捷服务。

3932

【温室气体数据集】全球总碳柱观测网络 TCCON

【温室气体数据集】全球总碳柱观测网络 TCCON

WW、forever的博客 425

Ros入门 (十)----激光雷达避障 简易实现

本篇文章通过订阅/scan话题获取障碍物的距离信息,达到避障目的,提供部分代码,仅供参考。

weixin_51157015的博客 1万+

光学传播仿真软件:ASAP_(1).ASAP软件介绍与安装

ASAP(Advanced System for Analysis and Propagation)是一款强大的光学传播仿真软件,广泛应用于光学系统的设计、分析和优化。它提供了丰富的建模工具和仿真功能,可以帮助用户从简单的光学元件到复杂的光学系统进行仿真。:支持光学、机械、热学等多物理场的联合仿真。:采用高精度的算法,确保仿真结果的准确性。:内置了大量的光学元件,如透镜、反射镜、棱镜、光栅等。:提供直观的用户界面,支持多种建模和仿真方式。:支持使用脚本语言进行二次开发,增强软件的定制能力。

kkchenjj的博客 1583

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

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

上一篇: C++结构体应用:从洛谷P5744看编程竞赛中的数据处理与业务逻辑实现
下一篇: 数据中心建设热潮下算力交付周期拉长,技术团队如何应对?
weixin_34221276
博客等级 码龄11年 6209粉丝 1156原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值