C-Store: A Column-oriented DBMS(1)

【信息科学与工程学】计算机科学与技术——第二百二十五篇 架构设计 01 RTOS架构01 好的,根据您的要求,我将为您构建一个关于“实时系统设计方案中的知识体系”的详细纵向输出。内容将严格遵循您提供的格式,并重点扩展“核心知识点/其他知识点列表”和“数学表达式与方程式列表及详细数学建模与数值设计”这两个部分,确保其内容均超过1000字。本知识模块是实时系统设计的基石。它确保了系统能够在严格的时间约束内完成指定计算任务,是保障系统和的核心。在航空航天、自动驾驶、工业控制、金融交易等对时间敏感的应用中,正确的调度策略与分析是避免灾难性后果(如错过截止时间导致系统失效)的关键。 阅读详情
  1.介绍

大部分的DBMS实现都采用面向记录(record-oriented)的存储方式,即把一条记录的所有属性(列)存储在一起。在这种行存储(row store)体系里,单次磁盘写操作就能把一条记录的所有列刷到磁盘里。这样能优化写操作,我们称这种存储体系为写优化(write-optimized)系统。

与之相反的是,面向ad-hoc大数据量查询的系统应该是读优化(read-optimized)的。例如数据仓库,常常是短时间内写入大批新数据,然后长时间的进行ad-hoc查询操作。其他以读操作为主的应用系统包括customer relationship management (CRM)系统,electronic library card catalogs和其他ad-hoc查询系统。在这些系统里,采用列存储体系,把同一列(或属性)的数据连续存储在一起,会更有效率。现有的数据仓库产品如Sybase IQ [FREN95, SYBA04],Addamark[ADDA04]和KDB [KDB04]都能证明这个观点。在本文里,我们讨论一种叫做C-Store的列存储系统的设计,以及它的一些新颖特性。

在列存储体系里,DBMS只需要读取指定列的数据,避免了把不相干的数据带到内存里。在数据仓库里,查询一般是针对大量数据元素的集合型操作,列存储就有很大的性能优势。不过,还是需要仔细看看读优化系统和写优化系统之间的一些本质区别。

当前的关系型DBMS都把属性(列)填充到字节或双字节的边界,以本地格式存储数据。原因是他们认为在处理时进行数据的移位操作太耗时了。但是,CPU越来越快,而磁盘速度却没怎么增长。所以,用CPU时间交换磁盘带宽是有意义的,特别是在以读为主的环境里。

采用列存储,一般有2种途径用CPU时间交换磁盘带宽。第一种方法是采用高效的编码技术。比如存储一个客户的住址,可以用6bits来编码所有的US州名,如果采用州名缩写,则需要16bits;如果用全称则更多。第二种方法是浓缩存储的数据。比如把N个数据,每个K bits,直接打包成N*K bits。列存储里,编码和浓缩技术比在行存储里更有效,这一点[FREN95]已经指出来了。当然DBMS还是需要一些未压缩的数据副本(即cache),尽量避免解压操作。

商用关系型DBMS一般单独存储一行数据的所有列,用B树来索引。索引可以是主的(primary),记录会尽量按这个索引的顺序、接近的存储;或副的(secondary),记录不需要任何特殊的顺序。这些索引在OLTP的写优化系统里是高效的,但是在读优化系统里则不是。后者使用其他的数据结构会更好,比如bit map indexes [ONEI97],cross table indexes [ORAC04],和and materialized views[CERI91]。在读优化的DBMS里,只能使用读优化的数据结构,而完全不进行写优化。

所以,C-Store在物理上存储列的集合,每个集合都按照一些属性来排序。以同一个属性进行排序的列,组成“projections”(不知道翻译成什么,就用“列族”吧)。同一个列可能在多个列族里,按照不同的属性进行了排序。我们用强力的压缩技术,在得到多种排序方式的同时,避免存储空间的激增。多种排序方式还为我们打开了优化的大门。

显然,大计算量和大存储量应用系统最廉价的硬件和体系结构,就是普通PC机集群。所有,任何新的DBMS体系都要支持网格环境,支持拥有自己磁盘和内存的G nodes。我们建议在“shared nothing”体系下对磁盘数据进行水平分区。未来的网格计算机集群可能有成千上万个节点,所以任何新系统都需要支持这样的规模。当然,网格中的一个节点可能重合或由另一个计算机集群组成。优化网格环境已经给数据库管理员造成了很大压力,所以为网格节点分配资源必须要自动进行。在水平分区基础上,我们按照Gamma[DEWI90]的方法实现了内部的并行查询。

许多数据仓库系统(比如Walmart [WEST00])维护2份数据拷贝,因为通过DBMS的日志来恢复TB级的数据代价太高了。这个方案随着磁盘效率的提高而越来越有吸引力。在网格环境里,可以在多个节点里放置数据副本,所以也支持Tandem风格的高可靠系统[TAND89]。但也不是非要这样存储多个备份。C-Store允许多余对象按照不同的排序形式存储,以得到好的读取效率和高的可靠性。基本上,在列族里存储多余的列能很好的改善性能,即使某个G site挂了也能从多余的数据里寻找。一个系统允许K个失败,我们称之为K-safe。C-Store通过可配参数调整K的范围。

即使在读频繁的系统里,也需要更新数据。数据仓库需要在线更新来更正错误数据,同样也不断有数据需要加入实际的数据仓库里,而且数据更新的反应时间要尽量接近0。最终的需求就是数据仓库的在线更新。显然,读频繁的世界,比如CRM,需要通用的在线更新方案。

在“提供更新”和“优化读取”之间,有一个矛盾。比如,在KDB和Addamark里,数据列按照插入的顺序排列,这样插入新元素就非常高效。但是代价就是读取效率的下降,因为更有效的读取只有在另一种顺序下才能达到。不过,如果不按照插入顺序排列数据列,又会导致插入操作非常耗时。

C-Store用一种全新的视角解决了这个问题。我们结合了读优化的列存储系统和写优化的存储系统,用一个tuple mover来联系它们,如下图所示。在顶层,有一个小的可写存储组件(WS),支持高性能的插入和更新。还有一个大些的读优化组件(RS),支持大数据量读取。RS对数据读取进行了优化,只能进行特殊的插入,比如从WS到RS的批量记录转移。这个转移工作就是由tuple mover来完成的。

 

 

 

 

当然,数据访问操作需要2个存储系统的合作。插入操作交给WS,删除操作则在RS里做标记,然后由tuple mover来清理。更新操作分离为插入和删除2个操作。为了提高tuple mover的速度,我们应用了LSM树理论[ONEI96]的一个变体,采用merge out操作来从WS向RS移动大量数据。merge out用有效的方式把排好序的WS数据对象合并到大的RS块中,生成新的RS拷贝,在操作完成的时候使用。

上图的体系必须支持多ad-hoc复杂查询事务,小的更新事务,和可能的连续插入。显然盲目的支持动态锁定会导致阻塞和死锁,进而导致读写冲突和性能下降。

所以我们希望只读的查询运行在historical模式下。在这种模式下,查询操作选择一个时间戳T,它应该比最后提交的事务时间戳小,然后查询操作能保证产生的结果在那个时间点是正确的。为了提供这种snapshot isolation [BERE95]特性,C-Store需要在元素插入时标记时间戳,并在程序里小心的处理时间戳在T以后的元素。

最后,大部分商用的优化器和执行器(executors)都是建立在行存储体系之上的,而WS和RS都是面向列的,于是有必要实现面向列的优化器和执行器。我们将看到,这样的软件与当前的传统设计完全不同。

本文描述一个可更新的列存储系统,C-Store。它对数据仓库式的查询达到高性能的同时,还能在快速处理OLTP式的事务。C-Store是一个面向列的DBMS,旨在减少查询时的磁盘访问次数。C-Store的革新点包括:

1.  一种由WS和RS混合的架构,前者优化频繁的插入和更新,后者优化查询;

2.  同一列以不同的顺序在多个列族里存在,这样查询能选择最有效的顺序;

3.  强力的列压缩技术;

4.  面向列的优化器和执行器,和独有的特性;

5.  通过列族的重叠调整K-safe级别,达到高可靠性和高性能;

6.  使用snapshot isolation避免2PC和查询阻塞;

这里需要强调的是,虽然这些特点在过去可能被独立的研究过,但是现在我们把它们合在了一起,于是让C-Store变得有趣和与众不同。

本文第2部分展示C-Store的数据模型,第3部分介绍RS组件,第4部分介绍WS组件,第5部分考虑对网格节点的数据结构分配,第6部分是C-Store的更新和事务处理,第7部分介绍tuple mover组件,第8部分介绍查询优化器和执行器。第9部分给出C-Store和流行的商用行存储系统和列存储系统之间的性能比较。对于TPC-H式的查询,C-Store比其他系统明显要快。不过需要指出的是性能比较并不完整,我们没有整合WS和tuple mover,他们的耗时不可忽略。最后,第10和11部分讨论未来的改进工作和结论。

2.数据模型

C-Store支持标准的关系型逻辑数据模型(logical data model),即一个由表格组成的数据库,每个表格都有一些属性(列)。和其他多数关系型系统一样,C-Store里的属性(或属性集合)能作为唯一的主键,或作为外键引用其他表的主键。C-Store的查询语言是标准的SQL语言。但是C-Store里的数据在物理上不是按逻辑数据模型存储的。大多数行存储系统以直观的方式实现表格,然后加入许多索引来提高访问速度,但是C-Store只实现列族。比如,一个C-Store列族由一个逻辑表格T锚定,且包含一个或多个T的属性(列)。一个列族甚至可以包含任意个表格里的任意个属性,只要从锚定表格到包含其他属性的表格之间有一系列的n:1(即外键)关系。

生成列族时,我们从T里选出感兴趣的属性,保留重复的行,然后通过外键从非锚定表格里得到相应的属性。这样,一个列族和它的锚定表格有相同数目的行。当然,可以有多个精心设计的列族。我们相信这个简单的方案能满足高性能的要求。同时要说明的是,我们对锚定表格并不进行存储。

 

 

 

我们把对表格t的第i个列族记为ti,后面跟列族里的属性名称。其他表的属性名称前还要加上逻辑表名。我们使用一个经典的表格组合:EMP(name,age,salary,dept)和DEPT(dname,floor)。EMP的示例数据在Table 1里。下面是一种可能的列族分布:

EMP1 (name, age)

EMP2 (dept, age, DEPT.floor)

EMP3 (name, salary)

DEPT1(dname, floor)

列族里的元素按列存储,所以如果列族里有K个属性,则有K个数据结构,每个结构存储一列,并按照同样关键字排序。关键字可以是列族里的任意列或列的组合。列族元素按照关键字排序,并从左到右排列。

我们在列族后面用竖线加属性名的方式表示排序关键字。例如下面的表示方式:

EMP1(name, age| age)

EMP2(dept, age, DEPT.floor| DEPT.floor)

EMP3(name, salary| salary)

DEPT1(dname, floor| floor)

最后,每个列族都水平分区成一个或多个组,每组都有标示符Sid,Sid > 0。C-Store只支持基于关键字的分区,所以一个列族的每个组都对应了一个关键字范围,而关键字范围的集合则把整个关键字空间进行了“分区”。

显然,为了完成一个SQL查询,C-Store需要一个覆盖集合(covering set),比如某个表的某个列在哪些列族里。同时,C-Store也必须能从不同的存储组合里重现表格的整个行。所以它需要利用storage keys和join indexes来联合不同列族里的不同组。

C-Store a column-oriented DBMS 此论文是面向列数据库查询优化技术的文档。 立即下载

相关推荐

开源列存储数据库C-Store源码

开源列存储数据库C-Store的源代码,能够在安装了C++插件的Eclipse中打开。

C-Store: A Column-oriented DBMS

今天看了一篇CStore论文,笔记记录一下,后续内容待补充~目录1.C-Store: A Column-oriented DBMS 1.1 Proposal 1.2 Why C-Store? 1.3 Architecture 1.4 Innovative 1.5 Projections 1.6 Segments and Storage Keys 1.7 Join Indices ...

Francis的博客 407

DICOM 常用服务C-STORE C-ECHO等代码实例

DICOM 常用服务C-STORE C-ECHO等代码实例

C-Store:一个列存数据库

今天介绍《C-Store: A Column-oriented DBMS》,这篇文章是VLDB 2005的,作者 Mike Stonebraker,2015年图灵奖获得者...

乔的博客 2115

别再为PCB和散热器文件发愁了!手把手教你用ADS导出DWG文件给工厂(附单位转换避坑指南)

本文详细解析了从ADS设计到PCB/散热器加工的DWG文件导出全流程,重点介绍了单位转换、分层导出策略及散热器文件处理等关键步骤,帮助射频工程师避免加工误差和返工。特别提供了mil与mm单位转换的精确处理方法,确保设计文件与工厂加工需求无缝对接。

weixin_30814329的博客 616

单片机OTA升级:Bootloader如何多重校验保障APP完整性?

本文详细介绍了单片机OTA升级中Bootloader如何通过CRC校验、数字签名、版本比对和存储位置检查等多重校验机制保障APP完整性。CRC校验作为快速检测数据完整性的核心手段,结合其他安全措施有效防止设备变砖和安全漏洞,确保远程升级的可靠性。

l3m4n的博客 981

列式存储系列(一)C-Store

列式存储系列(一)C-Store 序 本文是列式存储系列的第一篇。在这个系列中,我们将介绍几个典型的列式存储系统。这些列式系统的出现都有各自的时代背景。在介绍这些系统的同时,我们也尽量介绍一下它们的背景,以便大家有一个更宏观的认识,理解这个系统为什么会出现,它要解决的问题,以及它如何影响后来类似系统的发展。 列式存储不是一个新概念,它最早可以追溯到上个世...

测试0901-1 2257

R数据分析:潜在剖面分析LPA的做法与解释

Latent Profile Analysis (LPA) tries to identify clusters of individuals (i.e., latent profiles) based on responses to a series of continuous variables (i.e., indicators). LPA assumes that there are unobserved latent profiles that generate patterns of resp.

Codewar的博客 1万+

列存储数据库C-Store介绍

C-Store是一个为了快速查询而设计的关系型数据库,它的论文发表于2005年的VLDB。 为了达到更快的查询性能,C-Store按列存储数据,同一个表中的不同列可能被存在不同的、可能有重叠的Projection中。 虽然C-Store没有提出什么新的技术,但它是第一次将与列存储相关的技术整合到一起,成为一个真正理论上可用的系统,所以其设计和系统架构仍被广泛借鉴。

Hansen先生的博客 6504

在 ABAP 中把变量一次写对:深入理解 FINAL 内联声明与不可变变量

摘要:ABAP中的FINAL声明操作符用于定义不可变变量,强调"当前上下文中的唯一写位置",能有效防止变量被意外修改,提升代码健壮性和可读性。官方建议优先在单次赋值的场景使用FINAL替代DATA。其核心规则包括:1)写位置唯一但可多次执行(如循环内);2)不创建块级作用域;3)对引用变量仅约束引用本身而非对象内容。典型适用场景包括:结果值只读、输入快照保存和中间结果保护。例外情况如游标变量不适用,因需多次写操作。正确使用FINAL可显著降低代码维护风险。

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

KoboldCpp vs Ollama vs llama.cpp 全面对比(2026工程视角)

本文对比分析了KoboldCpp、Ollama和llama.cpp三大本地AI推理工具的核心差异。llama.cpp作为基础引擎性能最强但上手困难;KoboldCpp在其基础上增加了UI界面,适合娱乐创作;Ollama则提供最简化的模型管理和API服务。性能实测显示:llama.cpp>KoboldCpp>Ollama。选型建议:新手用Ollama快速入门,玩家选KoboldCpp获得交互体验,工程师用llama.cpp追求极致性能。三者定位清晰:性能极限、使用体验和开发效率各有所长。

刘一说的IT专栏 908

dicom 影像通信(scu、scp)的c-echo、c-store、c-find、c-move

dicom通信的scu,scp的c-echo、c-store、c-find、c-move的使用。

你的信任,就是我最大的动力! 3761

(2-2-2)位置控制算法:常用的位置控制算法(2)

例如下面是一个使用滑模控制算法实现机器人位置控制的例子,在该例子中,假设机器人在一维空间中移动,目标是使机器人的位置迅速、鲁棒地达到设定的目标位置。自适应控制算法通过实时地调整控制器参数,可以适应系统的变化,从而提高系统的鲁棒性和性能。模型预测控制(Model Predictive Control,MPC)是一种先进的控制策略,通常应用于动态系统,以实现对系统状态的优化控制。(6)迭代优化:随着时间推移,MPC迭代执行上述步骤,持续优化控制输入,以适应系统动态和外部扰动,实现对系统状态的稳健控制。

码农三叔 1608

Row-Oriented Database 、Column-Oriented Database 、Key-Value Store Database 、Document-Oriented Databas...

Row-Oriented Database 、Column-Oriented Database 、Key-Value Store Database 、Document-Oriented Database Row-Oriented Database 、Column-O...

214

【三维激光扫描】第二章:国内外三维激光扫描设备简介

地面三维激光扫描仪是地面激光扫描系统中最主要的硬件设备,近年来得到了快速发展,主要体现在品牌数量、性能指标、类型等方面的变化。本章主要介绍国内外主要设备的基本情况,对国内外研究现状进行分析,最后指出目前存在的问题与未来的发展趋势。 2.1 国外地面三维激光扫描仪简介 目前,生产地面三维激光扫描仪的公司比较多,随着地面三维激光扫描技术应用普及程度的不断提高,国外产品在中国的市场目前还占主导地位。它们各自的产品在性能指标上有所不同,以下简要介绍有代表性的公司产品。 2.1.1 奥地利 Riegl公司的.

智慧空间实验室 4643

晶体管-二极管三极管MOS管选型参数总结

二极管三极管和MOS管,是电路中常用的控制电流电压的基本电子元器件。电路世界中晶体管的选型,需要考虑的参数多种多样,这些参数的选择会直接影响到电路的性能、稳定性、成本等多个方面。本文对二极管三极管和MOS管的选型参数进行详细介绍并总结。

fydar的博客 889

《The Design and Implementation of Modern Column-Oriented Database System》读书笔记

Overview Database system performance is directly related to the efficiency of the system at storing data on primary storage (e.g., disk) and moving it into CPU registers for processing. Data transfer costs from storage are often the major performance bot..

漫步量化 1135

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Row-Oriented Database 、Column-Oriented Database 、Key-Value Store Database 、Document-Oriented Databas

Row-Oriented Database 、Column-Oriented Database 、Key-Value Store Database 、Document-Oriented Database chuanliang 于 2009-10-4,20:50 Comments (0)   归类于:技术相关  Tags: Column-Oriented Database, 

三少GG 3555

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

efm32 入门.pdf

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

Delta lake第一稿个人翻译和注释(第四章)

亚马逊S3等云对象存储是全球规模最大、最具成本效益的存储系统之一,因此成为存储大型数据仓库和数据湖的理想之选。遗憾的是,它们作为键值存储的实现使得实现ACID事务和高性能变得困难:元数据操作(如列出对象)成本高昂**(解释:对象存储在云上面list操作费用是get操作的10倍,并且抽取类似元数据次数多了,费用很贵;所以整体思想是减少list操作,有个元数据管理文件,然后从文件抽取必要文件然后采取 get操作),一致性保证也有限。

knowcai126的博客 291

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

Web安全入门三件套:SQL注入、代码审计与文件包含实战解析

在Web安全领域,理解核心漏洞原理是构建防御体系的基石。SQL注入、代码审计和文件包含作为三种基础且关键的漏洞类型,分别代表了数据交互、逻辑审查和文件处理层面的安全风险。SQL注入通过操纵数据库查询语句,揭示了应用程序对用户输入信任不足的问题;代码审计则要求开发者或安全人员深入分析源代码,识别危险函数和逻辑缺陷,例如变量覆盖、弱类型比较及反序列化漏洞;文件包含漏洞利用程序加载文件的机制,可能引发本地或远程文件包含,甚至通过PHP伪协议实现代码执行。掌握这三项技术,不仅能有效发现和利用漏洞,更能从本质上提升W

weixin_33882452的博客 803

DICOM服务中的C-STORE、 C-FIND、C-MOVE、C-ECHO、Worklist

DICOM服务中的C-STORE、 C-FIND、C-MOVE、C-ECHO、Worklist

wangnaisheng的专栏 2762

Dicom 学习笔记-Dicom 消息服务(DIMSE-C/DIMSE-N)

引言   DICOM(Digital Imaging and Communications in Medicine)医学数字成像与通信,是医疗影像领域一个非常重要的标准,本文主要简单介绍 DICOM 标准中的消息交换服务。在介绍之前先声明一下,有关一些名词和概念,都是笔者自己翻译和理解的意思,如有误解,还请大家指正。 名词简介   在正式介绍前我们需...

weixin_34405557的博客 736

数据库基本概念概述

从本篇起,我们就开始对『数据库』相关概念内容的介绍,除了介绍基本的名词概念以及他们的使用情况外,我们还会深入到源码层面去探究一些底层实现,例如索引、视图、触发器等技术在数据库引擎层是如何支持的。 那么第一篇,我们将针对『数据库』做一个最基本的介绍,弄清楚什么是数据库?数据库的类型有哪些?以及使用数据库解决了哪些已知问题?等等。 数据管理的发展历史 数据库概念的演变与诞生经历了漫长的发展过程,从最开...

weixin_34143774的博客 309

[转载] 【每周推荐阅读】C-Store:列式存储数据库

Record-based与column-based是数据库和存储系统里面两种不同的data layout。我们的思维逻辑是基于行记录的,即Record-based data layout,数据记录都是一行一行来存储和访问。但在很多数据库应用中发现(尤其是读请求为主要数据访问的数据库),人们往往只是访问一行记录中的某些属性数据,而不得不将整行数据读取出来,其中很多冗余的IO操作和数据其实没...

weixin_30387339的博客 207

DICOM医学图像处理:fo-dicom网络传输之 C-Echo and C-Store

背景: 上一篇博文对DICOM中的网络传输进行了介绍,主要参照DCMTK Wiki中的英文原文。通过对比DCMTK与fo-dicom两个开源库对DICOM标准的具体实现,对理解DICOM标准有一个更直观的认识。此篇博文是对上一篇博文的补充,因为专栏前面的示例大多是利用DCMTK工具包来进行的,此次借着分析fo-dicom源码结构的机会,参照fo-dicom的README.md,给出C-ECHO 和C-STORE服务的具体实现。在实现的同时给出DICOM3.0标准中的相关介绍,帮助我们理解。

只要踏出一步,路就在前方——zssure 2万+
上一篇: DBMS一种设计方案(原)
下一篇: acovea安装完全指南
daidodo
博客等级 码龄22年 43粉丝 37原创
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值