RocketMQ中的消息存储结构及删除机制

从源码角度聊聊RocketMQ 消息(文件)删除机制 总的来说RocketMQ执行文件清理操作主要是在设置的凌晨4点(4:00-5:00),要清理的文件也是我们常见的CommitLog、consumequeue、Index. 清理的条件就是三个磁盘超过设置的默认85%到达设置的清理时间默认凌晨4点手动执行清理操作三个条件满足一个即可至于一些文件操作比如MappedByteBuffer等不在本次探讨范围内,限于篇幅我们这次是看整理的逻辑。后续会基于单个点深入分析。 阅读详情

RocketMQ的存储设计

Message

Message是Rocket中很重要的组成部分,也就是消息本身。Message中有messageId,messageKey。message和Topic是多对一的关系,一个主题下边可以有多个消息。

Topic

Topic中有tags和subTopics。每条消息都有对应的Topic,一个Topic下会有多个消息。生产者生产消息的时候会指定Topic,消费者读取消息的时候,会获取指定Topic的消息。

Group

Group,一般会有生产者分组,消费者分组,一个Group可以消费多个Topic,一个Topic也可以被多个Group消费。一般同一个分组的消费者拥有同样的消费行为。

Queue

Queue是队列,也就是存储尚未消费的消息的地方,一般会设置多个,所以一个Topic下边一般会有多个Queue

Offset

Offset是消息偏移量。

消息存储结构

RocketMQ是高可用的,也是因为其对消息等数据进行了持久化存储,对应的存储文件如下所示。

RocketMQ 消息的存储是由 ConsumeQueue 和 CommitLog 配合完成的,消息真正的物理存储文件是 CommitLog,ConsumeQueue 是消息的逻辑队列,类似数据库的索引文件,存储的是指向物理存储的地址。每 个 Topic 下的每个 Message Queue 都有一个对应的ConsumeQueue 文件。

Commitlog

Commitlog是消息存储的目录,所有的消息写入的时候,都会写入到commitlog文件中,并且会存储消息的元数据,也就是消息的Topic,Message,Queueid等信息都会被保存。

CommitLog消息存放的时候,每条消息的前边四个字节存储该消息的总长度。由于消息其他信息长度不固定,所以一个消息的存储长度是不固定的。

每个CommitLog的文件大小为1G,第一个文件的起始偏移量为0,第二个则为1073741824,因为1G=1073741824byte。当写入的时候,会先往同一个文件写,等写满之后,再写入下一个。

CommitLog这样顺序写,会大大的提高写入的效率。

当消息到达Commit文件之后,会有专门的线程产生消息转发任务,从而构建ConsumeQueue文件与Index文件。

ConsumeQueue

消息的逻辑队列,是CommitLog的索引文件,存储的是指向物理存储的地址。每个Topic下的每个MessageQueue都有一个ConsumeQueue文件。在ComsumeQueue文件中,每个节点内包含该消息在Commitlog的偏移量,对应消息的大小,Tag的HashCode。

ConsumeQueue中存储的并不是消息的全量数据,是为了增加查询速度的索引文件。

因为ConsumeQueue的占用内存很小,一般可以全部读入到内存中,这样对ConsumeQueue的操作是极快的。

IndexFile

消息索引文件,当使用messageKey检索消息的时候,就是读取的IndexFile文件,这个文件的存在大大提高了检索消息的速度,是RocketMQ专门为消息订阅构建的索引文件。

Config

Broker配置信息

  • topics.json : topic 配置属性,RocketMQ创建了几个topic,每个主题有多少队列,每个队列又是怎么样的,都会存储在这个文件中。
  • subscriptionGroup.json :消息消费组配置信息。
  • delayOffset.json :延时消息队列拉取进度。
  • consumerOffset.json :集群消费模式消息消进度。
  • consumerFilter.json :主题消息过滤信息。

其他文件

abort

记录Broker是否正常关闭,这是一个空文件,当Broker正常关闭的时候,会删除abort文件。但是当异常宕机或其他原因关闭的时候,则不做删除处理。

checkpoint

文件检查点,记录Commit最后一次刷盘的时间,consumequeue最后一次刷盘时间,index索引文件最后一次刷盘时间

消息删除机制

为了避免内存与磁盘的浪费,RocketMQ有专门的删除机制来删除过期的文件。

消息消费队列文件与消息存储文件( Commitlog )共用一套过期文件机制。

清理的逻辑是:如果非当前写文件在一定时间间隔内没有再次被更新,则认为是过期文件,可以被删除, RocketMQ 不会关注这个文件上的消息是否全部被消费。

通过在 Broker配置文件中设置 fileReservedTime 来改变过期时间,默认为48,单位为小时。

触发文件清除操作的是一个定时任务,而且只有定时任务可以执行这个操作,默认每 10s 执行一次。

过期判断

fileReservedTime是允许文件保留的最长时间,当文件最后一次更新的时间到现在的时间超过这个时间了。那么这个文件将被删除。

还有两个参数:

  • deletePhysicFilesInterval:删除间隔默认100ms,若是有多个文件同时过期,并不会同时删除多个文件,而是间隔deletePhysicFilesInterval时间后继续删除。

  • destroyMapedFileIntervalForcibly:当删除某个文件的时候,若是该文件还在被引用,将阻止删除操作。destroyMapedFileIntervalForcibly则表示当第一次删除拒绝之后,删除免疫的时间,在这个时间内将一直拒绝删除,超过这个时间之后,则可以被删除。

删除条件

指定时间删除

可以通过deleteWhen设置一天执行一次删除文件的操作,默认是凌晨4点。

磁盘满删除

DiskSpaceCleanForciblyRatio参数是磁盘占用的阈值。

检查磁盘是否充足,若是磁盘占用超过百分之85(默认),则会触发过期文件删除操作。

【RocketMQ】数据的清理机制 Broker在启动的时候会注册定时任务,定时清理过期的数据,默认是每10s执行一次,分别清理CommitLog文件和ConsumeQueue文件: CommitLog文件清理 CommitLog文件清理的逻辑主要在CleanCommitLogService中,它是DefaultMessageStore的内部类,调用了deleteExpiredFiles方法删除过期文件: 在执行清理任务之前,首先会获取一些配置参数,然后通过isTimeToDelete方法判断是否到了清理文件的时间,通过isSpaceToDe 阅读详情

相关推荐

RocketMQ源码分析之CommitLog消息存储机制

上面这些属性,是整个消息存储的核心,也是我们需要重点关注与理解的(将会在本系列一一介绍到)。接下来,先从 putMessage 为入口,一起探究整个消息存储全过程。

qq_33291299的博客 607

RocketMQ 常见面试题(一)

RocketMQ 的消息存储是基于 CommitLog 实现的。CommitLog 是 RocketMQ 中最重要的组件之一,它是一个类似日志的存储系统,所有的消息在被存储之前都要写入到 CommitLog 中。具体来说,当一个生产者生产一条消息时,该消息会首先被写入到内存缓冲区中,然后再被异步刷写到磁盘上的CommitLog文件中。同样的,当消费者消费一条消息时,该消息的偏移量也会被记录在CommitLog文件中,以便于Broker在后续的消费中能够准确地判断该消息是否已经被消费过。

m0_51431003的博客 4910

互联网全景消息(5)之RocketMq快速入门(下)

零拷贝(英语: Zero-copy) 技术是指计算机执行操作时,CPU不需要先将数据从某处内存复制到另一个特定区域。这种技术通常用于通过网络传输文件时节省CPU周期和内存带宽。➢零拷贝技术可以减少数据拷贝和共享总线操作的次数,消除传输数据在存储器之间不必要的中间拷贝次数,从而有效地提高数据传输效率➢零拷贝技术减少了用户进程地址空间和内核地址空间之间因为上:下文切换而带来的开销可以看出没有说不需要拷贝,只是说减少冗余[不必要]的拷贝。

jokeMqc的博客 1207

RocketMQ-消息清理

介绍 消息被消费过后会被清理掉吗?这个RocketMQ是不会的。 消息是被顺序存储在commitlog文件中的,且消息大小不定长,所以消息的清理是不可能以消息为单位进行清理的,而是以commitlog文件为单位进行清理的,否则会急剧下降清理效率,并实现逻辑复杂,commotlog文件存在一个过期时间,默认为72小时,即三天,除了用户手动清理外,在一下情况下也会自动清理,无论文件中的消息是否被消费过 文件过期,且达到清理时间点(默认为凌晨4点)后自动清理过期文件 文件过期,且磁盘空间占用率达到清理接线(默认

程序员劝退师的博客 2302

RocketMQ存储设计CommitLog和零拷贝等

RocketMQ操作CommitLog、ConsumeQueue是基于内存映射MMAP技术实现的,在Broker启动的时候就会加载这两个目录下的所有文件,所以不可能消息永久性的保存在服务器上。RocketMQ清除过期文件的方法是如果某个文件在一定间隔时间内没有被更新,则认为是过期的文件,可以被删除,默认每个文件的过期时间是72小时,可以配置。每个ConsumeQueue中存储的消息条目都不是全量数据,而是消息的一部分信息,包括消息在CommitLog中的偏移量、消息大小、消息Tag的哈希值。...

Minor的Java技术博客 852

RocketMQ --- 高级篇

一、高级功能 1.1、消息存储 分布式队列因为有高可靠性的要求,所以数据要进行持久化存储。 消息生成者发送消息 MQ收到消息,将消息进行持久化,在存储中新增一条记录 返回ACK给生产者 MQ push 消息给对应的消费者,然后等待消费者返回ACK 如果消息消费者在指定时间内成功返回ack,那么MQ认为消息消费成功,在存储中删除消息,即执行第6步;如果MQ在指定时间内没有收到ACK,则认为消息消费失败,会尝试重新push消息,重复执行4、5、6步骤 MQ删除消息 1.1.1、存储介质 关系型数据库DB

shuai_h的博客 1606

RocketMQ学习笔记:消息存储模型,持久化文件,过期文件删除

这是本人学习的总结,主要学习资料如下马士兵教育。

sinat_38393872的博客 1709

深入解析RocketMQ的存储设计艺术(一)

deletePhysicFilesInterval:删除物理文件的时间间隔(默认是100MS),在一次定时任务触发时,可能会有多个物理文件超过过期时间可被删除,因此删除一个文件后需要间隔deletePhysicFilesInterval这个时间再删除另外一个文件,由于删除文件是一个非常耗费IO的操作,会引起消息插入消费的延迟(相比于正常情况下),所以不建议直接删除所有过期文件。ConsumeQueue 是消息的逻辑队列,类似数据库的索引文件,存储的是指向物理存储的地址。messageId是全局唯一的。

10年老JAVA大数据技术人的专栏 1154

二、RocketMQ的存储设计

本文介绍了RocketMQ的核心领域模型和消息存储结构。在领域模型部分,详细说明了Message、Topic、Queue、Offset、Group等核心概念及其相互关系,阐述了消费并发度、热点问题(顺序、重复)的处理机制。在存储结构部分,解析了CommitLog、ConsumeQueue、IndexFile等关键组件,其中CommitLog实现物理存储,ConsumeQueue作为逻辑索引,IndexFile提供高效查询。

weixin_44063529的博客 1052

汇川EASY系列之以太网通讯(套接字socket做从站)

汇川EASY系列的以太网通讯中的Socket字通讯,不能使用配置的方式实现,只能通过指令完成,本文将详细说明

这是一个长期关注工控行业技术的博客,实现0-1的突破,期待您的关注和留言 2990

SuccessFactors入门篇

SuccessFactors入门篇—— Employee Central(一)最近通过一个月左右的学习,拿到了SF EC(SuccessFactors Employee Central )模块SAP认证,所以打算把自己学习SF的整个过程以及相关资料和大家分享一下,相互切磋,共同进步。Employee Central简单了解Employee Central简单了解新的改变功能快捷键合理的创建标题,有...

qq_42288853的博客 1万+

RocketMQ深入分析(消息存储 消息进度管理 刷盘机制)

RocketMQ深入分析RocketMQ深入分析1 消息存储三级目录 RocketMQ深入分析 1 消息存储 三级目录

m0_46690280的博客 637

MATLAB新手也能懂:用MATPOWER 8.0b搞定电力系统潮流计算(附case9实战代码)

本文详细介绍了如何使用MATPOWER 8.0b在MATLAB中进行电力系统潮流计算,特别适合新手入门。通过case9实战案例,讲解了从安装配置到运行牛顿-拉夫逊法潮流计算的全过程,包括结果分析和常见问题处理,帮助读者快速掌握这一电力系统分析的核心技能。

weixin_26757925的博客 379

RocketMQ高手之路系列之三:RocketMQ之路由中心

引言 在SOA分布式服务体系架构中,注册中心担任了服务注册以及服务调用解析的任务。那么在RocketMQ中,NameServer则负责了类似的职责。它是整个RocketMQ体系中的中枢系统,负责体系中的消息调度以及控制。 路由管理 服务注册 服务发现 路由删除 总结 一、路由管理 在介绍NameServer的工作任务流程之前,我们先一起来看下RocketMQ物理部署的架构图,如下所示: (图...

1万+

白话讲解帕累托前沿点(Pareto Frontier)基础知识与实例解析

排除所有“劣解”,缩小决策范围;量化目标间的“权衡关系”(如“每增加1千元成本,续航提升多少小时”);支持不同场景下的个性化选择,平衡冲突目标。无论是手机选购、汽车设计,还是城市规划,帕累托前沿都是从“混乱的多目标”到“清晰的权衡”的关键桥梁,是现代决策科学中不可或缺的工具。通过数学建模,工程很多问题都可以建模成帕累托前沿求解问题,通过线性规划CPLEX、Gurobi 等优化工具,可以方便进行求解。

2137

1 初识智能化测试

非常感谢您可以和我一起来聊一聊智能化测试的一些事。智能化测试是一个新鲜又老旧的问题,说新鲜是因为很多人当听到智能化测试都会联想到人工智能、机器学习、深度学习等高大上的技术,很多时候觉得离我们的实际工作还很远;说老旧,是因为智能化测试的一些技术的发展在行业里面已经很久了,例如符号执行、静态分析等技术已经有很长的历史了。近些年,随着测试技术的的飞速发展,智能化测试也有了越来越多的实践,优秀的开源项目慢慢的被行业推行并且落地。那么在这里我们就一起来聊聊智能化测试以及智能化测试好的思路、实践、方法以及技术落地过程。

Criss@陈磊 2623

RocketMQ-核心原理

Producer发送消息时,默认会轮询目标Topic下的所有MessageQueue,并采用递增取模的方式往不同的MessageQueue上发送消息,以达到让消息平均落在不同的queue上的目的。如果有一个消费者被分配的是这些没有消息的读队列,那这些消费者就无法消费消息,造成消费者空转,极大的浪费性能。如果写队列大于读队列,就会有一部分写队列无法写入到读队列中,这一部分的消息就无法被读取,就会造成消息丢失(消息存入了,但是读不出来)引入DMA拷贝之后,在读写请求的过程中,CPU不再需要参与具体的工作。

姜希成的博客 1078

C语言中errno与perror()函数

宏errno和perror()函数都是在stdlib.h中定义的。 1 stdlib.h头文件 stdlib.h头文件即standard library标准库函数头文件,包含了C、C++语言的最常用的系统函数,该文件中还包含了C语言标准库函数的定义。 2 errno宏 errno宏在stdlib.h中的定义为 #define errno (*_errno()) errno宏用于保存程...

hou09tian的博客 1万+

RocketMq源码-broker(五)

RocketMQ 主要存储的文件包括Commitlog 文件、ConsumeQueue 文件、IndexFile。RocketMQ 将所有主题的消息存储在同一文件,确保消息发送时顺序写文件,尽最大的能力确保消息发送的高性能与高吞吐量。但由于一般的消息中间件是基于消息主题的订阅机制,这样便给按照消息主题检索消息带来了极大的不便。

qq_40228720的博客 1293

低照度与极端天气环境中的YOLOv8优化:CPA-Enhancer网络的应用与分析

为了克服上述问题,本文提出了一种名为的网络改进方案。CPA-Enhancer通过引入链式思考机制和改进的注意力机制,有效地提升了YOLOv8在低照度和复杂天气下的表现。本文提出了针对低照度和恶劣天气条件下目标检测的YOLOv8改进方案——CPA-Enhancer链式思考网络。通过引入低照度图像增强和多尺度特征融合技术,CPA-Enhancer显著提高了YOLOv8在低光照、雾霾、雨雪等环境下的检测性能。实验结果表明,CPA-Enhancer相较于原始YOLOv8,在多个指标上都有显著的提升,尤其是在mAP。

博客 1563

Apollo Control——超详细入门教程(六):MPC二次规划问题转化

专栏文章列表 Apollo Control——超详细入门教程(一):基于道路误差的车辆动力学模型 Apollo Control——超详细入门教程(二):连续状态空间方程离散化与离散LQR公式推导 Apollo Control——超详细入门教程(三):基于Frenet坐标系及XY坐标系的多项式轨迹生成 Apollo Control——超详细入门教程(四):控制模块轨迹误差计算 Apollo Control——超详细入门教程(五):油门刹车标定表之双线性插值算法 ...

凉了鸭的博客 2233

RocketMQ 底层原理

RocketMQ底层原理

ALLWE的博客 2103

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

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

图文结合详细介绍RocketMQ

消息中间件,英文Message Queue,简称MQ。它没有标准定义,一般认为:消息中间件属于分布式系统中一个子系统,关注于数据的发送和接收,利用高效可靠的异步消息传递机制对分布式系统中的其余各个子系统进行集成。高效:对于消息的处理处理速度快,RocketMQ可以达到单机10万+的并发。可靠:一般消息中间件都会有消息持久化机制和其他的机制确保消息不丢失。异步:指发送完一个请求,不需要等待返回,随时可以再发送下一个请求,既不需要等待。一句话总结:消息中间件不生产消息,只是消息的搬运工。

a1374469523的博客 1044

深度学习工具包 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语言编程规范.pdf

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

RocketMQ消息存储及NameServer特性

RocketMQ消息存储及NameServer特性消息存储存储方式存储结构刷盘机制NameServer特性功能特性重试机制顺序消费 消息存储 存储方式       RocketMQ 使用文件系统持久化消息。性能要比使用DB产品要高。文件顺序读写的速度大概是3G左右。       RocketMQ在消息存储时使用了数据零拷贝技术来发送数据文件数据。    &nb

weixin_49442658的博客 519

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

RocketMQ基础-源码分析

1.源码仓库 https://github.com/apache/rocketmq 2.NameService启动流程 启动类:org.apache.rocketmq.namesrv.NamesrvStartup 3.NameService路由信息(HashMap) 3.1路由数据结构 代码:RouteInfoManager private final HashMap<String/* topic */, List<QueueData>> ...

你是小新吗 345
上一篇: 聊聊RocketMQ Rebalance负载均衡触发机制浅析
下一篇: CountDownLatch翻车后,我建议用CompletableFuture改造下
Java_ttcd
博客等级 码龄4年 198粉丝 190原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值