ArangoDB-存储引擎分析

ArangoDB 学习笔记(一)简介 | ArangoDB 数据模型和概念 | ArangoDB在Windows下的安装与使用 | Web界面的增删改查 ArangoDB是一个本地多模型数据库,具有针对文档、图形和键值的灵活数据模型。使用方便的类似SQL的查询语言或JavaScript扩展构建高性能应用程序。ArangoDB 是一个为用户提供文档的数据库。这些文档通过 TCP 连接使用 JSON 传输,使用 HTTP 协议。提供了一套 REST API 来与数据库系统进行交互。ArangoDB 的组成:参考文档参考资料,数据模型主要有 Databases,Collections 和 Document,还有Graph(下章学习中记录)...... 阅读详情

当今很多主流DB都使用了 LSM Tree 的存储模型,包括 LevelDB,HBase,Google BigTable,Cassandra,InfluxDB 等。

ArangoDB果断采用了RocksDB做的底层存储引擎,RocksDB存储模型使用的是LSM-Tree数据结构,老规矩先上图。

在这里插入图片描述
在这里插入图片描述

存储模型

  • WAL(Write Ahead Log)

    在设计数据库的时候经常被使用,当插入一条数据时,数据先顺序写入 WAL 文件中,之后插入到内存中的 MemTable 中。这样就保证了数据的持久化,不会丢失数据,并且都是顺序写,速度很快。当程序挂掉重启时,可以从 WAL 文件中重新恢复内存中的 MemTable。WAL文件结构如下图,按照写入的顺序来存储变长的K-V,按照固定长度来分组存储(可能一个K-V跨多个分组)的目的是便于读取。

在这里插入图片描述

  • MemTable

    MemTable 对应的就是 WAL 文件,是该文件内容在内存中的存储结构,通常用 SkipList 来实现。MemTable 提供了 k-v 数据的写入、删除以及读取的操作接口。其内部将 k-v 对按照 key 值有序存储,这样方便之后快速序列化到 SSTable 文件中,仍然保持数据的有序性。

  • Immutable Memtable

    顾名思义,Immutable Memtable 就是在内存中只读的 MemTable,由于内存是有限的,通常我们会设置一个阀值,当 MemTable 占用的内存达到阀值后就自动转换为 Immutable Memtable,Immutable Memtable 和 MemTable 的区别就是它是只读的,系统此时会生成新的 MemTable 供写操作继续写入。之所以要使用 Immutable Memtable,就是为了避免将 MemTable 中的内容序列化到磁盘中时会阻塞写操作。

在这里插入图片描述

(跳表结构可以简单理解为有序支持近似二分查找的时间复杂度为log2(N))

  • SSTable

    SSTable 就是 MemTable 中的数据在磁盘上的有序存储,其内部数据是根据 key 从小到大排列的。通常为了加快查找的速度,需要在 SSTable 中加入数据索引,可以快读定位到指定的 k-v 数据。

    SSTable 通常采用的分级的结构,例如 LevelDB 中就是如此。MemTable 中的数据达到指定阀值后会在 Level 0 层创建一个新的 SSTable。当某个 Level 下的文件数超过一定值后,就会将这个 Level 下的一个 SSTable 文件和更高一级的 SSTable 文件合并,由于 SSTable 中的 k-v 数据都是有序的,相当于是一个多路归并排序,所以合并操作相当快速,最终生成一个新的 SSTable 文件,将旧的文件删除,这样就完成了一次合并过程。

在这里插入图片描述
(上图为按照多块来存储的结构。每块的K-V都是有序的,多块也是有序的)

​ 随着K-V的写入,会生成很多的SST文件,这部分文件需要被合并到一起。从而降低打开文件数量,并且移除已经不存在的记录。通常可以 配置两种方式,通用合并(下图左侧)与level合并(右侧)

在这里插入图片描述

  • Compaction

    当数据不断从 Immutable Memtable 序列化到磁盘上的 SSTable 文件中时,SSTable 文件的数量就不断增加,而且其中可能有很多更新和删除操作并不立即对文件进行操作,而只是存储一个操作记录,这就造成了整个 LSM Tree 中可能有大量相同 key 值的数据,占据了磁盘空间。为了节省磁盘空间占用,控制 SSTable 文件数量,需要将多个 SSTable 文件进行合并,生成一个新的 SSTable 文件。比如说有 5 个 10 行的 SSTable 文件要合并成 1 个 50 行的 SSTable 文件,但是其中可能有 key 值重复的数据,我们只需要保留其中最新的一条即可,这个时候新生成的 SSTable 可能只有 40 行记录。

  • 读取

    LSM Tree 的读取效率并不高,当需要读取指定 key 的数据时,先在内存中的 MemTable 和 Immutable MemTable 中查找,如果没有找到,则继续从 Level 0 层开始,找不到就从更高层的 SSTable 文件中查找,如果查找失败,说明整个 LSM Tree 中都不存在这个 key 的数据。如果中间在任何一个地方找到这个 key 的数据,那么按照这个路径找到的数据都是最新的。

    在每一层的 SSTable 文件的 key 值范围是不重复的,所以只需要查找其中一个 SSTable 文件即可确定指定 key 的数据是否存在于这一层中。Level 0 层比较特殊,因为数据是 Immutable MemTable 直接写入此层的,所以 Level 0 层的 SSTable 文件的 key 值范围可能存在重复,查找数据时有可能需要查找多个文件。

  • 优化读取

    因为这样的读取效率非常差,通常会进行一些优化,例如 LevelDB 中的 Mainfest 文件,这个文件记录了 SSTable 文件的一些关键信息,例如 Level 层数,文件名,最小 key 值,最大 key 值等,这个文件通常不会太大,可以放入内存中,可以帮助快速定位到要查询的 SSTable 文件,避免频繁读取。

小结

LSM Tree 的思想非常实用,将随机写转换为顺序写来大幅提高写入操作的性能,但是牺牲了部分读的性能。总的来说就是通过将大量的随机写转换为顺序写,从而极大地提升了数据写入的性能,虽然与此同时牺牲了部分读的性能。只适合存储 key 值有序且写入大于读取的数据,或者读取操作通常是 key 值连续的数据。

  • 所有记录在业务上是有序的,对key的查询其实会执行类似二分查找。
  • 持久化是通过写入有序文件来实现的。高性能的写入是通过先写入内存结构来保证的(写满的内存结构刷到持久化文件)。
  • 提供了level机制对数据做分层,优先查询最新写入的level来优化查询性能。

问题

write-ahead logs,预写日志;分布式很常见的WAL机制,为了提升写入性能,一定是先写缓存后刷磁盘的,不会直接写磁盘的,那样性能会非常低,但先写内存后写磁盘会带来一个问题,一旦机器挂掉了,内存数据没有刷到磁盘中,那这部分数据就会丢失。因此大部分分布式系统,比如:HBase、Elasticsearch、Dgraph等都是数据写内存之前,先预写日志,日志会实时刷到磁盘上,然后再将数据写内存,一旦内存中数据丢失了,可以通过磁盘上的日志回放这些数据,从而保证高可用性。

思考

ArangoDB之所以支持的索引花样多一些,其中很大的原因是来自于底层数据模型的支持。那么我们如何基于底层的数据模型,来映射到DB给用户开放的API层的写入机制和查询索引呢:)感兴趣的同学可在评论区谈谈自己的观点。

【专业数据库探索 05】ArangoDB多模数据库革命:一个数据库解决文档图关系三大数据模型 在微服务和数据多样化的时代,企业经常面临"数据孤岛"问题:用户信息存在MySQL,产品评论在MongoDB,社交关系在Neo4j,不同数据库之间的数据同步和查询成为开发噩梦。ArangoDB作为革命性的多模数据库,在同一个引擎中原生支持文档、图、键值三种数据模型,让开发者告别多数据库运维困扰。本文通过费曼学习法,从"为什么电商平台需要5个数据库才能搞定用户画像"这个现实痛点出发,深入解析ArangoDB的核心原理和实际应用。我们将构建一个完整的社交电商平台,展示如何用一个ArangoDB替代传统的MySQL 阅读详情

相关推荐

快速入门ArangoDB:理解图数据库及其在AI中的应用

ArangoDB是一款多模型数据库,支持图、文档和键值存储。它提供了灵活的存储选项和强大的查询能力,尤其在处理连接数据时表现尤为突出。ArangoDB提供了强大的功能来处理复杂的连接数据。结合AI,可以实现智能化的数据库查询。通过正确的设置和优化,开发者可以在各种场景中充分发挥ArangoDB的优势。

adfyvatbia的博客 820

图数据库之ArangoDB

ArangoDB 是一个多模型、开源的分布式数据库,支持文档、图和键值存储三种数据模型。它以其灵活性和强大的查询能力而著称,特别是在需要处理复杂数据关系的场景下。ArangoDB 的设计目标是提供一个统一的、高效的数据存储解决方案,适合于各种应用场景,如实时分析、内容管理系统、物联网(IoT)和社交网络等。

youziguo的专栏 2697

【ArangoDB教程2】ArangoDB社区版功能

ArangoDB的开源版本采用宽松的Apache 2.0许可证,提供了广泛的功能集,包括免费的集群支持。以下是社区版的功能概述。更多信息请参见arangodb.com/community-server/。

wang2leee的博客 1457

ArangoDB——图遍历 Graph

图遍历 Graph

分享学习路线、运维调优与故障等解决方案 1699

【ArangoDB教程4】ArangoDB各个版本亮点介绍

# 【ArangoDB】ArangoDB各个版本亮点介绍

wang2leee的博客 1235

【ArangoDB教程1】ArangoDB应用案例

ArangoDB是一个数据库系统,它将图形、文档、键值、搜索引擎和机器学习结合在一起,因此具有广泛的解决方案空间。

wang2leee的博客 1188

ArangoDb存储引擎分析_v1

先抛砖 做任何事情之前,我们往往都会去想一个问题, 为什么我们要去做? 为了选型一款优秀的图数据库,我们之前针对大名鼎鼎的 Neo4j,Janus Graph,ArangoDB,DGraph,Tiger Graph等,都进行了一些技术预研, 针对我们项目的实际应用场景,最终选择了ArangoDB,我们今天暂不谈图数据库的技术选型,也不去码代码,我们先聊一聊ArangoDB底层的存储引擎。 So Why ? 往往一款成熟热门的产品,其社区活跃度、代码版本迭代的速度都是很快的。比如ClickHouse,在我之

Java小虎 1134

数据库领域图数据库的存储引擎选型

本文旨在为技术决策者提供图数据库存储引擎的全面选型指南。我们将聚焦于存储引擎的核心技术实现,分析不同架构在性能、扩展性和功能完整性方面的权衡,不涉及具体的查询语言比较或应用层API讨论。文章首先介绍图数据库的基本存储模型,然后深入分析三种典型存储引擎架构,接着提供性能对比和选型框架,最后给出实际应用案例和未来趋势预测。顶点(Vertex): 图数据模型中的基本实体单元边(Edge): 顶点之间的关系连接属性图(Property Graph): 支持顶点和边带属性的图模型。

2502_91592937的博客 833

开源NoSQL数据库ArangoDB浅析

参考文章:开源NoSQL数据库ArangoDB浅析 https://www.arangodb.com/2017/02/arangoexport-tool-exporting-data-arangodb/ 一、ArangoDB简介 ArangoDB(https://www.arangodb.com/)是一个开源的分布式多模型NoSQL数据库,支持Key-Value、Document、Graph...

justlpf的专栏 1623

PSI5协议技术文档与驱动开发指南

• 供电与数据复用:ECU通过双绞线为传感器提供稳压(典型值5V-11V),同时检测线路电流变化实现数据传输。• 同步信号:ECU发送3.5V电压脉冲(上升沿触发传感器响应),用于时序同步。• 安全气囊:PSI5-P模式实现多碰撞传感器同步采样(响应时间<10ms)• CRC-3(3位):ASIL-B以上功能安全要求(如动力总成传感器)• 奇偶校验(1位):适用于低安全等级场景(如PSI5-P10P模式)• 典型应用:PSI5-P(并行总线)、PSI5-U(通用总线)

u012733413的博客 2867

别再折腾框架了!用华为应用市场官方渠道搞定GBOX,安全安装谷歌全家桶(鸿蒙HarmonyOS 3/4实测)

本文详细介绍了如何在鸿蒙系统上通过华为应用市场官方渠道安全安装GBOX,实现谷歌全家桶的无损使用。该方法避免了传统破解方式的安全风险,利用沙箱技术隔离运行环境,确保系统稳定性和数据安全。特别适合鸿蒙HarmonyOS 3/4用户安全使用谷歌生态应用。

weixin_29305313的博客 4780

多模型数据库:统一数据架构,告别数据库分类困境

数据库作为现代应用的核心基础设施,其设计理念正从单一模型向多模型演进。传统架构中,关系型、文档型、图数据库等各司其职,导致数据冗余、一致性维护复杂、跨系统查询困难等工程痛点。多模型数据库通过统一的存储引擎或API层,原生支持文档、图、键值等多种数据模型,实现了数据在单一平台内的融合存储与联合查询。其技术价值在于大幅降低系统复杂度,保障跨模型事务一致性,并通过原生跨模型查询能力提升开发效率与性能。这一特性在社交网络、内容推荐、物联网等需要同时处理强关联与灵活结构的应用场景中优势显著。本文以ArangoDB和P

weixin_30443731的博客 358

转录组分析中的Fastp和FastQC:如何快速检测数据质量并优化流程

本文深入探讨了转录组分析中数据质量控制的核心流程,重点介绍了Fastp和FastQC两款工具的组合应用。FastQC负责对原始测序数据进行全面质量评估,生成可视化报告;Fastp则能一站式完成接头切除、低质量序列过滤、长度筛选等关键质控步骤。文章提供了详细的参数解读、实战脚本和自动化流程构建指南,帮助研究人员快速检测数据质量并优化预处理流程,为下游的差异表达等分析奠定可靠基础。

weixin_28452161的博客 182

五子棋AI算法第一篇-我对谷歌Alphago的看法

最近Google宣布他们的围棋AI以5:0的战绩打败欧洲围棋三冠王。我一直对人工智能比较感兴趣,正好趁年前空闲的几天用JS写了一个五子棋的AI。其实很久以前就用自创的算法写过一个JAVA版的五子棋AI,不过棋力很不理想。这次用的是JS写的,所以无论任何平台上只要能打开网页的都可以玩。google爆出这个新闻之后,很多人觉得这是不是意味着电脑智商已经在人类之上了,围棋已经没有意义了之类的。甚至觉得这是

言川的博客 2万+

什么是 SAP ABAP AMDP?

SAP HANA是SAP开发的一种内存数据库管理系统,它具有出色的性能和处理大规模数据的能力。为了充分利用SAP HANA的性能,SAP引入了AMDP技术,以便将数据库操作推送到数据库服务器执行,从而减少数据传输和处理时间。AMDP方法通常需要输入参数和输出参数。输入参数用于传递数据到SQLScript代码,而输出参数用于接收SQLScript代码的结果数据。ENDMETHOD.ENDCLASS.我们定义了一个输入参数来传递销售订单数据,以及一个输出参数来接收计算结果。ENDMETHOD.

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

融合RocksDB, Pregel, Fault-Tolerent Foxx & Satellite Collections 怎样使数据库性能提升35%?...

摘要: 经过数月的研发测评,开源多模型数据库ArangoDB (findArangoDB on Github)终于发布了其 3.2 正式版,该版本消除了两个重大的障碍,添加了一个期待已久的功能,还集成了一个有趣的功能。此外,官方团队表示新版本将 ArangoDB 的性能平均提高了 35%。同时,与 3.1 版本相比,还减少了内存的占用。集群管理方面也有了大幅度的改进。 具体如下: Rocks...

weixin_30808253的博客 78

SAP Fiori Launchpad 概述

SAP Fiori launchpad 是托管 SAP Fiori 应用程序的 shell,并为应用程序提供导航、个性化、嵌入式支持和应用程序配置等服务。SAP Fiori Launchpad 是移动和桌面设备上 SAP Fiori 应用程序的入口点。启动板显示带有图块的主页,其中可以显示实时状态指示器,例如打开的任务数量。每个图块代表用户可以启动的业务应用程序。这包括 SAP Business Suite 事务应用程序和 SAP Smart Business 分析应用程序。

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

ArangoDB---存储引擎(RocksDB)

存储引擎位于ArangoDB数据库的最底层。存储引擎负责将文档保存在磁盘上,在内存中保存副本,提供索引和缓存以加快查询速度。

呦 ^v^-, 写Bug呢? 3128

手把手教你学simulink实例--基于Simulink的船舶动力定位系统建模与仿真

船舶动力定位系统(Dynamic Positioning System, DPS)是一种通过控制推进器来保持船舶在指定位置和航向的技术。它广泛应用于海上钻井平台、海洋调查船、起重船等需要精确位置控制的场景。DPS的核心任务是实时感知环境干扰(如风、浪、流),并通过闭环控制算法调整推进器输出,以抵消外界扰动并维持船舶的位置和姿态。本项目旨在基于MATLAB/Simulink平台,构建船舶动力定位系统的数学模型,并进行仿真分析,验证其性能和稳定性。

MHD0815的博客 1084

Qt | linux+openCV+Qt6.5.3环境搭建成功版(带例子)

opencv安装 Qt 实战举例

Qt历险记,专注Qt技术,三年医疗设备研发经验,1年机器视觉研发经验,半年柔性传感研发经验。 1885

ArangoDB 中集成的 RocksDB 存储引擎常见问题解答[已翻译]

参考文章:ArangoDB 中集成的 RocksDB 存储引擎常见问题解答[已翻译] 原文 译文 操作 The new release of ArangoDB 3.2 is just around the corner and will include some major improvements like distributed graph processing w...

justlpf的专栏 1192

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

ArangoDB教程(一)-ArangoDB Linux 安装

1.下载安装包 https://www.arangodb.com/download/ 2.安装arangodb 这边下载的Centos,rpm安装包 rpm -ivh arangodb3-3.4.1-1.0.x86_64.rpm 3.设置root密码 运行arango-secure-installation 4.为了能在局域网中访问WEB界面,修改配置文件/etc/arangodb3/arango...

u011311291的博客 5363

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

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

上一篇: 01-为什么要学习分库分表?
下一篇: ArangoDB-AQL简单操作
Java小虎
博客等级 码龄19年 9粉丝 17原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值