Spring ActiveMQ 整合: JMS 事务管理

Spring ActiveMQ 整合(四): JMS 事务管理 1.为什么要用事务?        消息事务是在生产者producer到broker或broker到consumer过程中同一个session中发生的,保证几条消息在发送过程中的原子性。        可以在connection的createSession方法中指定一个布尔值开启,如果消息确认机制是事务确认,那么在发送message的过程中session就会开启事务(实际上broker的) 阅读详情

1.为什么要用事务?

       消息事务是在生产者producer到broker或broker到consumer过程中同一个session中发生的,保证几条消息在发送过程中的原子性。
       可以在connection的createSession方法中指定一个布尔值开启,如果消息确认机制是事务确认,那么在发送message的过程中session就会开启事务(实际上broker的),不用用户显示调用 beginTransaction,这时所有通过session发送的消息都被缓存下来,用户调用session.commit时会发送所有消息,当发送出现异常时用户可以调用rollback进行回滚操作,只有在开启事务状态下有效。
 

为什么commit之后,不会有持久的消息重新传送呢?

       原因在于commit操作会自动将为签收确认的消息进行签收确认,如果是当前接收但未签收确认的消息,都会被确认处理。因而在commit之后不会有持久化的消息出现。


2.activeMQ支持的事务:

ActiveMQ有支持两种事务,

  • JMS transactions - the commit() / rollback() methods on a Session (which is like doing commit() / rollback() on a JDBC connection)
  • XA Transactions - where the XASession acts as an XAResource by communicating with the Message Broker, rather like a JDBC Connection takes place in an XA transaction by communicating with the database.

在支持事务的session中,producer发送message时在message中带有transaction ID。broker收到message后判断是否有transaction ID,如果有就把message保存在transaction store中,等待commit或者rollback消息。所以ActiveMq的事务是针对broker而不是producer的,不管session是否commit,broker都会收到message。

如果producer发送模式选择了persistent,那么message过期后会进入死亡队列。在message进入死亡队列之前,ActiveMQ会删除message中的transaction ID,这样过期的message就不在事务中了,不会保存在transaction store中,会直接进入死亡队列。具体删除transaction ID的地方是在:org.apache.activemq.util.BrokerSupport的doResend,将transaction ID保存在了originalTransactionID中,删除了transaction ID。

       在下面的介绍中我用的是JMS transactions.

JMS transactions事务的配置:

      ①建立JMS事务,并引入关联链接事务。

         ②.设置一个jmsTamplat,并关联监听容器。

[html]  view plain  copy
  1. <!-- jms事务 -->  
  2.     <bean id="jmsTransactionManager"  
  3.         class="org.springframework.jms.connection.JmsTransactionManager">  
  4.         <property name="connectionFactory" ref="connectionFactory" />  
  5.     </bean>  
  6.     <tx:annotation-driven transaction-manager="jmsTransactionManager" />  
  7.   
  8.   
  9. <!-- 消息监听容器 消息接收监听器用于异步接收消息 -->  
  10.     <bean id="jmsContainerOne" class="org.springframework.jms.listener.DefaultMessageListenerContainer">  
  11.         <property name="connectionFactory" ref="connectionFactory" />  
  12.         <property name="destination" ref="destinationOne" />  
  13.         <property name="messageListener" ref="consumerMessageListenerOfOne" />  
  14.         <!-- <property name="sessionTransacted" value="true"/> -->  <!-- 给listener添加事务,只负责接收消息的回滚 (有了transactionManager就不用这个了,这个功能不全) 设置后好像并没有起作用 不知道为啥 -->  
  15.         <!-- <property name="transactionManager" ref="jtaTransactionManager"/> --> <!-- 接收消息和数据库访问处于同一事务中 jta -->  
  16.         <property name="transactionManager" ref="jmsTransactionManager" /> <!--jms事务 -->  
  17.         <property name="sessionAcknowledgeMode" value="4"></property>   <!-- 应答模式是 INDIVIDUAL_ACKNOWLEDGE http://blog.youkuaiyun.com/yueding_h/article/details/54944254 -->  
  18.         <!-- ActiveMQ:设置多个并行的消费者 -->  
  19.         <property name="concurrency" value="2-3" />  
  20.     </bean>  

上面配置文件配置完成后,在接收着那边接受消息失败后,进行事务回滚。
[html]  view plain  copy
  1. session.rollback();  
   具体实现:
[html]  view plain  copy
  1. public void onMessage(Message message, Session session) {     
  2.       TextMessage textMsg = (TextMessage) message;  
  3.         try {  
  4.                 System.out.println(1);  
  5.                 String endStr = textMsg.getText();  
  6.                 Integer endInt = Integer.parseInt(endStr);  
  7.                 System.out.println("消息:==="+endInt);  
  8.                 //只要被确认后   就会出队,接受失败没有确认成功,会在原队列里面  
  9.                     textMsg.acknowledge();  
  10.   
  11.         } catch (Exception e) {    
  12.             try {  
  13.                 session.rollback();  
  14.                 System.out.println("测试回滚");  
  15.                                      e.printStackTrace();  
  16.                              System.out.println("异常信息是:===:" + e.getMessage());  
  17.                   }  
  18.     }  
  这就介绍完了。
  另外,activeMQ还有一种JtaTransactionManager 事务控制。
  事务控制: (这里让接收消息和数据库访问处于同一事务中)我们就可以配置一个外部的事务管理同时配置一个支持外部事务管理的消息监听容器(如DefaultMessageListenerContainer) 。要配置这样一个参与分布式事务管理的消息监听容器,我们可以配置一个JtaTransactionManager,当然底层的JMS ConnectionFactory需要能够支持分布式事务管理, 并正确地注册我们的JtaTransactionManager。这样消息监听器进行消息接收和对应的数据库访问就会处于同一数据库控制下,当消息接收失败或数据库访问失败都会进行事务回滚操作。 
   这种事务控制,我在配置的时候,失败了,所以选用了JMS事务控制。
   待我详细了解JtaTransactionManager 后,再说吧。
Spring Boot整合ActiveMQ:从配置到实战的完整指南 消息队列作为现代分布式系统中的核心组件,其核心价值在于实现系统解耦、异步通信和流量削峰。JMS(Java Message Service)作为Java平台的消息服务标准API,为不同消息中间件提供了统一的编程模型,确保了代码的可移植性。ActiveMQ作为Apache旗下老牌且完全兼容JMS规范的开源消息中间件,以其部署简单和社区活跃著称,常被用于构建可靠的企业级异步通信架构。Spring Boot通过其“约定大于配置”的理念和强大的自动配置能力,极大地简化了应用的初始搭建与开发过程。将ActiveMQ整合 阅读详情

相关推荐

Spring整合ActiveMQ之监听器配置

简介 在EJB世界里,JMS消息最常用的功能之一是用于实现消息驱动Bean(MDB)。Spring提供了一个方法来创建消息驱动的POJO(MDP),并且不会把用户绑定在某个EJB容器上。 通常用消息监听器容器从JMS消息队列接收消息并驱动被注射进来的MDP。消息监听器容器负责消息接收的多线程处理并分发到各MDP中。一个消息侦听容器是MDP和消息提供者之间的一个中介,用来处理消息接收的注册,事务...

Hern(宋兆恒) 2937

Spring整合Jms学习(四)_事务管理

Spring提供了一个JmsTransactionManager用于对JMS ConnectionFactory做事务管理。这将允许JMS应用利用Spring的事务管理特性。JmsTransactionManager在执行本地资源事务管理时将从指定的ConnectionFactory绑定一个ConnectionFactory/Session这样的配对到线程中。JmsTemplate会自动检测这样的

yuanlaishini2010的专栏 984

Spring与ActiveMQ集成实现企业级消息传递

Spring 框架是一个全面的编程和配置模型,用于现代Java-based企业应用程序。在众多特性中,依赖注入(DI)是Spring最核心的概念之一,也是构建松耦合和可测试代码的基础。Java消息服务(JMS)是Java平台上关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。JMS是一种提供标准的产生、发送、接收消息的API,旨在跨越不同的平台和消息服务提供商。JMS定义了以下概念:消息代理(Message Broker)

weixin_42509507的博客 1032

Activemq的消息事务

消息事务 消息事务,是保证消息传递原子性的一个重要特征,和JDBC的事务特征类似。 一个事务性发送,其中一组消息要么能够全部保证到达服务器,要么都不到达服务器。 生产者、消费者与消息服务器直接都支持事务性; ActionMQ的事务主要偏向在生产者的应用。 ActionMQ 消息事务流程图: 一、生产者事务: 没有加入事务的时候,会有部分信息过去,结果如图: 方式一: /** ...

qq_29860591的博客 988

ActiveMQ与Spring全栈整合实战示例

ActiveMQ 是 Apache 提供的一个开源消息中间件,支持多种协议(如 AMQP、STOMP、MQTT)和消息模型(如点对点和发布/订阅)。它基于 JMS(Java Message Service)规范,适用于高并发、分布式系统中的异步通信场景。组件说明Broker消息代理,负责消息的接收、存储和转发Producer消息生产者,负责发送消息到队列或主题Consumer消息消费者,负责从队列或主题接收消息。

weixin_29050829的博客 351

Spring Boot 2与ActiveMQ整合实战:Queue与Topic消息处理

消息服务是一种应用间通信的机制,其中一个应用将消息发送到消息服务器,其他应用从服务器接收消息。这种方式可以解耦应用程序组件,有助于系统构建的灵活性和可扩展性。消息服务的好处在于,发送方和接收方不需要同时在线,消息服务器负责暂存消息,直到接收方准备就绪。消息服务的使用场景非常广泛,从简单的应用间通信到复杂的分布式系统集成都有涉及。消息服务是一种允许应用之间异步传递消息的通信机制,它提供了一种可靠的方式来发送和接收数据,无论接收者是否立即可用。

weixin_33670640的博客 664

JMS工作原理

为什么需要JMS 用RPC中间件技术已广泛应用于分布式系统之间的通信,但是这些技术也显示出了局限性: 同步通信:客户发出调用后,必须等待服务对象完成处理并返回结果后才能继续执行 客户和服务对象的生命周期紧密耦合,客户端进程和服务端进程都必须正常运行,如果由于服务对象崩溃或者网络故障导致客户的请求不可达,客户会接收到异常。 点对点通信:客户的一次调用只发送给某个单独的目标对象。面向消息的中间件较好的

p_zick的博客 6810

Spring整合JMS(四)——事务管理

NULL 博文链接:https://elim.iteye.com/blog/1983532

分布式事务实践(二)--Spring的事务机制

1 Spring事务管理机制 1.1 Spring框架的介绍 Spring框架是开发人员使用的最流行的一个框架. 1.2 Spring事务管理的优点 提供统一的API接口支持不同的数据源 Sring本身没有提供任何事务支持,只是对外提供统一的编程API接口,让数据源驱动方来对Spring事务进行实现,Spring事务的核心是PlatformTransactionManager接口. 提供了声明式的事务管理 Spring的事务实现可以是编程式和声明式,声明式的事务管理运用的是SpringAOP的思想

2012年开始工作,全栈开发老兵,目前已是一个老师,分享这么多年的心得体会 383

atomikos-transactions-jms.jar.zip

标签:atomikos-transactions-jms.jar.zip,atomikos,transactions,jms,jar.zip包下载,依赖包

从零构建2.4G无线通信系统:MSPM0G3507与NRF24L01的深度协同设计

本文详细介绍了基于MSPM0G3507微控制器与NRF24L01射频模块构建2.4G无线通信系统的深度协同设计方案。内容涵盖系统架构、SPI通信优化、功耗管理、抗干扰机制及中断/DMA高效利用,为工业物联网应用提供高可靠、低功耗的无线传输解决方案。

rice5的博客 819

spring activeMQ 整合(四): JMS 事务管理

1.为什么要用事务?        消息事务是在生产者producer到broker或broker到consumer过程中同一个session中发生的,保证几条消息在发送过程中的原子性。        可以在connection的createSession方法中指定一个布尔值开启,如果消息确认机制是事务确认,那么在发送message的过程中session就会开启事务(实际上broker的)

romantic_PK的专栏 835

从零开始:STM32C011开发板的硬件生态与快速验证

本文全面解析STM32C011开发板的硬件生态与快速验证方法,帮助开发者从零开始掌握这款基于ARM Cortex-M0+内核的微控制器。内容涵盖硬件架构解析、开发环境搭建、基础功能验证及性能优化技巧,为嵌入式开发提供实用指导。

swift5iosmith的博客 480

Spring整合JMS——基于ActiveMQ实现

目录 1.1 JMS简介 1.2 Spring整合JMS 1.2.1 activeMQ准备 1.2.2配置ConnectionFactory 1.2.3配置生产者 1.2.4配置消费者 1.3消息监听器MessageListener 1.3.1MessageListener 1.3.2SessionAwareMessageListener 1.3.3...

yk10010的博客 401

CMOS锁相环核心:四种鉴频鉴相器(PFD)结构深度剖析与选型指南

本文深入剖析了CMOS锁相环中四种鉴频鉴相器(PFD)的结构与性能,包括传统RS触发器型、非时钟型、预充电型和边沿触发型PFD。通过详细的电路分析、实测数据和工程案例,提供了PFD选型的实用指南,帮助工程师根据速度、功耗和精度需求选择最优方案,提升锁相环设计效率。

weixin_42530458的博客 586

LDA主题模型简介及Python实现

一、LDA主题模型简介 LDA主题模型主要用于推测文档的主题分布,可以将文档集中每篇文档的主题以概率分布的形式给出根据主题进行主题聚类或文本分类。 LDA主题模型不关心文档中单词的顺序,通常使用词袋特征(bag-of-word feature)来代表文档。词袋模型介绍可以参考这篇文章:文本向量化表示——词袋模型 - 知乎 了解LDA模型,我们需要先了解LDA的生成模型,LDA认为一篇文章是怎么形成的呢? LDA模型认为主题可以由一个词汇...

weixin_41168304的博客 20万+

Spring 核心技术解析【纯干货版】- XIV:Spring 消息模块 Spring-Jms 模块精讲

Spring JMS 模块,是为了简化在 Spring 应用中使用消息传递服务而设计的模块。它提供了对 JMS(Java Message Service)规范的支持,使得开发者能够方便地发送和接收消息,与消息代理(如 ActiveMQ、RabbitMQ 等)进行交互。Spring JMS 模块简化了消息生产者和消费者端点的配置,同时也集成了 Spring 的事务管理机制,使得消息驱动的架构变得更加易于实现和管理。

2509_92430413的博客 698

一个AI Agent顶十个软件,toB赛道正在大洗牌

一个AI Agent顶十个软件,toB赛道正在大洗牌

ith321的博客 1330

JMS + ActiveMQ 精萃

– Start ActiveMQ 简介 JMS 点对点消息 JMS 发布/订阅消息 – 声 明:转载请注明出处 – Last Updated on 2017-06-24 – Written by ShangBo on 2017-06-20 – End

千里之行始于足下 878

利用OrthoFinder做泛基因家族聚类分析

这条命令会将 Arabidopsis_thaliana.TAIR10.59_longest_trans.pep.fa 文件中的所有序列ID,去掉ID中的空格后面的部分,只保留 > 后第一个空格之前的基因ID,并将结果保存在 An1.fasta 文件中。muscle 是一种常用的多序列比对工具,用于基因组或蛋白质序列的比对。基因家族(Gene family),是来源于同一个祖先,由一个基因通过基因重复而产生两个或更多的拷贝而构成的一组基因,它们在结构和功能上具有明显的相似性,编码相似的蛋白质产物。

qq_64400864的博客 2746

如何完全卸载axure软件以及解决安装axure后打不开的问题【2023年】

如何完全卸载axure软件以及解决安装axure后打不开的问题【2023年】

念兮为美 5138

Spring与JMS集成实战:异步消息处理与企业级应用开发

异步消息处理是企业级应用开发中的关键技术,通过解耦系统组件提升吞吐量。JMS(Java Message Service)作为Java生态的标准消息规范,提供了跨厂商的统一API接口。Spring框架通过JmsTemplate等组件简化了JMS的使用复杂度,支持连接管理、模板封装和监听容器等功能。在实际应用中,JMS常用于订单系统与库存系统的异步通信、耗时操作的队列化处理等场景。结合Spring Boot,可以快速配置ActiveMQ等消息中间件,实现高效的消息生产和消费。本文深入讲解Spring与JMS的集

weixin_31528001的博客 224

Qt入门教程【高级控件篇】QModelIndex索引

QModelIndex索引

小鱼酱的博客 4465

Java框架!mysql添加用户并授权

一、掀起Spring的盖头来 Spring框架的由来 Spring框架概述 二、Spring的IoC容器 重头开始认识loC的基本概念:(构造方法注入+scttcr方法注入+接口注入) 运筹帷幄的秘密loC Service Provider:(直接编码方式+配置文件方式) Spring 的loC容器之BeanFactory:(直接编码方式+出外部配置文件方式+注解方式+BeanFactorY的XML之旅) Spring loC容器之App1icationContext:(统一资源加载策略+国际化信

m0_56169789的博客 179

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Spring整合JMS(一)——基于ActiveMQ实现

Spring整合JMS(一)——基于ActiveMQ实现 博客分类:  SpringJms SpringJMS整合integrateActiveMQ      1.1     JMS简介        JMS的全称是Java Message Service,即Java消息服务。它主要用于在生产者和消费者之间进行消息传递,生产者负责产生消息,而消费者负责接收消息。把它应

gaoqiao1988的专栏 559

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

上一篇: Apache XBean 简单介绍
下一篇: spring 事务 @Transactional注解参数 tx:annotation-driven
hxpjava1
博客等级 码龄19年 1365粉丝 511原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值