技 术 FAQ-对象序列化(转自清华bbs)

SpringBoot+Vue+MySQL 高校学科竞赛平台 完整可运行版(源码+文档) 本项目基于SpringBoot+Vue+MySQL构建高校学科竞赛管理平台,覆盖学生、教师、领队教师、管理员四大角色,实现竞赛发布、报名、刷题、评分、公示等全流程闭环管理。系统架构清晰,技术主流,配套完整源码、数据库脚本、万字论文、开题报告、答辩PPT及部署文档,支持一键运行,适用于毕业设计、课程设计及院系二次开发,真正实现“开箱即用”。 阅读详情
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> 为了能够向ObjectOutputStream流中写入对象,该对象类必须标志为 Serializable,这是为什么? JDK1.1中哪些系统类被标记为serializable? 当我将AWT组件deserialize时出现问题,我如何能使其正常工作? 对象序列化支持加密吗? 对象序列化类是针对数据流进行操作的,我如何将一个对象写到一个随机存取文件 中? 当一个本地对象是序列化的并且被RMI调用做为参数传递,该本地对象方法的字节 码是否也可以被传递?当远程虚拟机保持该对象的句柄时,对象的一致性是怎样的? 我如何通过ObjectOutputStream对象创建一个ObjectInputStream对象,而且中间 不需要文件。 我创建了一个对象并在网络上用writeObject方法发送,用readObject方法接收。 如果我改变该对象中一个参数的值,并象过去那样发送接收时,发现readObject方 法接收到的是原来的对象,没有体现出参数数值的改变。这是为什么? 有支持可序列化线程对象的计划吗? 我可以计算diff(serial(x),serial(y))吗? 可不可以用我自己的zip和unzip方法压缩我的对象的序列化表示? 在我的对象的压缩版本上能否运行方法调用,例如isempty(zip(serial(x)))? 如果我尝试去序列化一个字体或图形对象,并且试着在另一个虚拟机中重建该对象 ,我的应用程序死掉了。为什么? 我如何对一个对象树进行序列化? 如果类A没有实现Serializable,但它的一个子类B实现了Serializable,类A中的 变量会因为类B序列化而序列化吗? 1.为了能够向ObjectOutputStream流中写入对象,该对象类必须标志为 Serializable,这是为什么? 答案:我们并不是随随便便要求该对象类实现java.io.Serializable接口的,这样 设计的目的是为了在开发者需求和系统需求之间求得一个平衡以提供一个可以预测 的安全机制。最困难的设计限制是要满足JAVA编程语言中类的安全要求。 如果类对象需要被标明是可序列化的,开发组担心某个开发人员会由于遗忘, 懒惰,或者是粗心等方面的原因没有将其标明为是可序列化的,从而使该类对象对 于RMI是不可用的,甚至失去保留的意义。我们担心这样的要求会使开发者需要付 出很大的精力去了解别人以后会如何使用该类对象,而这本来是不可事先知道的情 况。事实上,正如alpha API表现的那样,我们的初始设计是要求类对象缺省条件 下是可序列化的。在经过有关安全性和正确性的考虑后,我们修改了原来的设计, 因为我们确信类对象的缺省值只能是不可序列化的。 安全性的限制 促使我们改变缺省设置的首要因素是出于安全的考虑,尤其是考虑到那些用 private, package protected, 或 protected定义保护的私有区域,在程序运行 期间,JAVA平台限制对那些区域的读写操作从而提供必要的安全保护。 可是,上述的读写保护限制对一个可序列化的对象不起作用,对象序列化产生 的数据流可以被任何对该数据流有访问权限的对象读取或修改。允许任何对象存取 可序列化对象就违背了用户在安全方面的期望。并且在流中的数据可以被任意更改 ,这就有可能创建出在JAVA平台的保护下从来不许创建出的对象来,这不仅是用户 数据和程序的安全性保护要求没有满足,JAVA平台本身运行的稳定性安全性也受到 极大威胁。 这样的错误是没有办法避免的,因为序列化的目的就是允许一个对象被转换成 一种可以在JAVA平台外传输的形式(从而脱离了平台在安全性和完整性方面提供的 保护)。要求对象被定义成可序列化的就意味着类的设计者必须做出有背安全性和 完整性原则的决定。一个不知道序列化的开发者由于缺少相关的知识不能接受有关 安全性的开发工作。我们希望当开发人员将类对象定义为可序列化时,曾经仔细考 虑了这样定义有可能产生的后果。 需要说明的是,此类安全问题不是通过一个安 全管理程序机制就能够解决的。由于序列化本身就是允许一个对象在虚拟机之间传 送(或者经过一段空间,如在RMI中;或者经过一段时间,比如数据流被保存到一个 文件中),所使用的安全机制必须独立于任何JAVA虚拟机。我们要尽可能避免出现 对象在一个虚拟机中可以序列化而在另一个虚拟机中不能序列化的问题。由于安全 管理程序是虚拟机运行环境的一部分,用它来解决序列化的安全问题是不行的。 做出明智的判断 虽然安全问题是我们改变缺省设置的首要因素,我们认为另一个原因同样重要 的地方是只能序列化那些在设计阶段就进行了周密考虑的类。设计一个在序列化后 重新构造从而导致崩溃的类对象实在是太容易了。通过要求类的设计者声明实现 Serializable接口,我们希望设计者也能考虑一下序列化该类可能导致的结果。 很容易找到相应的例子。许多类对象管理着那些仅在对象运行时起作用的信息 ,比如文件句柄,开放socket连接,安全信息等等。这些数据可以通过关键字 transient将其定义为临时变量,但是那样的定义方式仅仅在对象将被序列化时才 是必需的。一个新手(或者是粗心的)程序员可能忘记做这样的标识,同样程序员也 可能忘记将类标识为支持serializable的。这种情况一般不会导致错误运行,只要 避免不要去序列化那些没有标识 serializable的对象。 另外一个例子是关于这样一个对象的,该对象位于某个RMI引用图的根部,向 下扩展出许多的其它对象。序列化这样的对象会导致许多其它对象的序列化,因为 序列化对整个引用图都起作用。如此做时必须考虑周全,不能随便就使用缺省设定 。 在定义JAVA API类库中的系统类为可序列化时(这是恰当的决定),我们考虑过 各种需求。我们本来认为那是非常简单的过程,就是大多数系统类被定义为可序列 化从而仅使用缺省设定不需要做任何更改。实际上我们发现远非原来所想。在大多 数类中,必须仔细考虑诸如是否要将变量定义为transient以及类序列化后对变量 是否有影响等等问题。 当然,没有办法保证程序员或类制定者在标记一个类是可序列化时确实考虑到 了这些问题。然而,当程序员定义某一个类实现了serializable接口,我们确实要 求程序员做出了一些考虑。让序列化是一个对象的缺省设置意味着考虑不周,可能 会对程序产生坏的影响,而这正是JAVA平台设计过程中竭力避免的。 2.JDK1.1中哪些系统类被标记为serializable? 答案:下面列出了被标记为serializable的类:(这些类的子类也都是可序列化的 ) java.lang.Character java.lang.Boolean java.lang.String java.lang.StringBuffer java.lang.Throwable-(包括所有Exception的子类) java.lang.Number-(包括Integer、Long等) java.util.Hashtable java.util.Random java.util.Vector-(包括Stack) java.util.Date java.util.BitSet java.io.File java.net.InetAddress java.rmi.server.RemoteObject AWT类 基本数据类型数组 对象数组是可序列化的(尽管对象有可能不是可序列化的)3.当我将AWT组件 deserialize时出现问题,我如何能使其正常工作? 答案:当你序列化AWT构件时,也同时序列化了那些将AWT功能模块与本地window建 立对应关系的peer对象。当你deserialize AWT构件时,那些原来的peer对象被重 新构造,但它们已经失效了。对于本地window系统来讲peer对象是本地的,并且在 本地地址空间拥有指向数据结构的指针,所以不能被移动。 为解决这一问题,你首先要把最上层的构件从它的容器中取走(从而构件不再 是"活动"的了)。这样Peer对象被丢弃,你可以仅保存AWT构件的状态。当你以后将 构件读回来并进行deserialize时,将顶层构件加入到窗口以使AWT构件可见。你可 能还需要增加一个show调用。 在JDK1.1以及更新的版本中,AWT构件是可序列化的。 java.awt.Component类 实现可序列化。但它们不可以与JDK1.0.2的构件互操作。 4.对象序列化支持加密吗? 答案:对象序列化本身不拥有任何加密/解密机制。它读写标准的JAVA API数据流 ,所以它可以和任何加密技术同时工作。对象序列化可以用在许多不同的领域。不 仅仅是对文件进行读写,它还可被RMI用来在主机间建立连接。当RMI使用序列化时 ,加密解密工作被交给更低的网络传输层。我们希望采用诸如SSL或类似的方式得 到一个安全的网络连接。 5.对象序列化类是针对数据流进行操作的,我如何将一个对象写到一个随机存取文 件中? 答案:当前还没有直接的方式将对象写入随机存取文件。你可以使用 ByteArrayInputStream 和ByteArrayOutputStream作为读写随机存取文件的中转站 ,并通过数据流创建 ObjectInputStreams和ObjectOutputStreams对象来完成对象 的传输工作。你只需保证在数据流中包含对象全部即可,否则对该对象的读写操作 会导致失败。 例如,可以用java.io.ByteArrayOutputStream接收来自ObjectOutputStream 的数据。通过它你会得到一个数组形式的结果。同样,可以用 ByteArrayInputStream对象做为ObjectInputstream的输入。 6.当一个本地对象是序列化的并且被RMI调用做为参数传递,该本地对象方法的字 节码是否也可以被传递?当远程虚拟机保持该对象的句柄时,对象的一致性是怎样 的? 答案:一个本地对象的方法代码并不在ObjectOutputStream中直接传送,但是如果 该对象的类不能在本地找到时,接收端要进行类装载。类文件本身没有序列化,序 列化的只是类的名字。在deserialization过程中,所有类都应当可以被正常的类 装载机制来载入。对于applet这意味着它们被AppletClassLoader装入。 对于传递 给远程虚拟机的本地对象不会有一致性保证,因为那样的对象是通过拷贝自身内容 的方式传递的(真正的按值传递方式)。 7.我如何通过ObjectOutputStream对象创建一个ObjectInputStream对象,而且中 间不需要文件。 答案: ObjectOutputStream 和 ObjectInputStream都是针对数据流对象工作的。 你可以使用ByteArrayOutputStream获得一个数组,并将该数组传递给 ByteArrayInputStream。你也可使用piped数据流类。任何由OutputStream和 InputStream类扩展得到的java.io类都可以使用。 8.我创建了一个对象并在网络上用writeObject方法发送,用readObject方法接收 。如果我改变该对象中一个参数的值,并象过去那样发送接收时,发现 readObject方法接收到的是原来的对象,没有体现出参数数值的改变。这是为什么 ? 答案: ObjectOutputStream类跟踪它序列化了的每一个对象,并且如果该对象又 一次出现,就只发送它的句柄。这是它处理对象引用图的方式。相应的 ObjectInputStream跟踪它创建的所有对象以及它们的句柄,从而当句柄再一次出 现时,它返回同一个对象。输入和输出数据流一直保持这种状态,直到它们被释放 为止。 另外, ObjectOutputStream类可以实现一个reset方法,在发出一个对象后清 空内存,从而又一次发送对象将产生新的拷贝。 9.有支持可序列化线程对象的计划吗? 答案:线程是不能序列化的。在当前的实现方式中,如果你试着去序列化接着并行 化(deserialize)一个线程,正常情况下不可能获得新的线程和堆栈,因为没有办 法为对象分配系统资源。简单地讲这样不可能正常工作,并且可能导致不可预测的 后果。 序列化线程的困难是因为它们的运行状态与虚拟机复杂地绑接在一起,几乎不 可能重新建立。例如,如果有本地方法调用了C过程,从而又去调用了JAVA平台中 的代码,导致JAVA编程语言结构与C语言指针管理之间令人难以置信的复杂组合, 这时仅保存虚拟机调用堆栈是不够的。并且对堆栈序列化也会影响到通过堆栈变量 可以到达的对象的序列化。 如果有一个线程(序列化后又并行化)在同一个虚拟机中被再次调度,它将和 原始线程共享许多相同的状态参数,正如两个C线程要去共享一个堆栈一样,这两 个线程如果都要立刻运行,将以不可预测的方式失败。当在不同的虚拟机中要并行 化时,几乎不可能判断出会发生什么样的事情。 10.我可以计算diff(serial(x),serial(y))吗? 答案:每当同一个对象序列化时,通过diff将产生出相同的流。为序列化每一个对 象,你都应该创建一个新的ObjectOutputStream。 11.可不可以用我自己的zip和unzip方法压缩我的对象的序列化表示? 答案: ObjectOutputStream创建一个输出流OutputStream;如果你的zip对象扩展 了OutputStream类,那么压缩它不成任何问题。 12.在我的对象的压缩版本上能否运行方法调用,例如 isempty(zip(serial(x)))? 答案:不是对所有对象都能运行方法调用,主要是由于对象编码问题。对于一个特 殊对象(例如一个字符串),你可以进行位流比较,因为压缩编码始终都是稳定的, 每次你对同一个对象进行压缩编码,都会得到相同的位流结果。 13.如果我尝试去序列化一个字体或图形对象,并且试着在另一个虚拟机中重建该 对象,我的应用程序死掉了。为什么? 答案:AWT的序列化并不很完善,因此在你传送字体或图象时会有问题。这是因为 每一个对象持有的内存指针都只在原始的虚拟机中有效,而当它传给新的虚拟机时 就会产生段错误。 目前字体已经可以被序列化,而图象序列化将会在今后的JDK版本中解决。 14.我如何对一个对象树进行序列化? 答案:接下来是一个显示如何序列化对象树的简单例子。 import java.io.*; class tree implements java.io.Serializable { public tree left; public tree right; public int id; public int level; private static int count = 0; public tree(int depth) { id = count ; level = depth; if (depth > 0) { left = new tree(depth-1); right = new tree(depth-1); } } public void print(int levels) { for (int i = 0; i < level; i ) System.out.print(" "); System.out.println("node " id); if (level <= levels && left != null) left.print(levels); if (level <= levels && right != null) right.print(levels); } public static void main (String argv[]) { try { /* Create a file to write the serialized tree to。 */ FileOutputStream ostream = new FileOutputStream("tree. tmp"); /* Create the output stream */ ObjectOutputStream p = new ObjectOutputStream(ostream); /* Create a tree with three levels。 */ tree base = new tree(3); p.writeObject(base); // Write the tree to the stream。 p.flush(); ostream.close(); // close the file。 /* Open the file and set to read objects from it。 */ FileInputStream istream = new FileInputStream("tree.tmp"); ObjectInputStream q = new ObjectInputStream(istream); /* Read a tree object, and all the subtrees */ tree new_tree = (tree)q.readObject(); new_tree.print(3); // Print out the top 3 levels of the tree } catch (Exception ex) { ex.printStackTrace(); } } }15.如果类A没有实现Serializable,但它的一个子类B实现了Serializable,类A 中的变量会因为类B序列化而序列化吗? 答案:只有可序列化的对象所包含的变量可以被写出和复原。仅当拥有一个无参数 构造函数从而初始化那些非可序列化的超类变量时,该该对象才是可以被复原的。 如果子类有存取超类状态的权限,它就能够实现writeObject和readObject方法从 而保存并复原那些状态。
Altium Designer20-柔性PCB绘制技巧 Altium Designer2020-柔性PCB绘制技巧 注:教程所用PCB随意找的,并没有完全绘制完,大家学习PCB折弯方法即可。 1.打开PCB,点击视图->板子规划模式1,如下图所示 2.点击设计->定义分割线,用两条分割线绘出要折弯的区域 3.点击设计->定义弯曲线(弯曲线呈现黄色) 4.用快捷键d,k进入layer manage stack(层叠管理器),在f... 阅读详情

相关推荐

500多种目标检测数据集下载地址汇总(YOLO、VOC)

【目标检测】红外物体检测-人、自行车、公交、小车、摩托车、骑行者、动物等15000张YOLO+VOC(含部分截取增强图).zip。【目标检测】医用个人防护装备检测数据集981张5类别(口罩、工作服、护目镜、手套、面罩检测数据集)VOC+YOLO格式.zip。【目标检测】车辆分类数据集1880张7类VOC+YOLO(含摩托车、救护车、消防车、警车、警用摩托车、轿车、大车).zip。【目标检测】隐翅虫数据集386张VOC+YOLO【目标检测】隐翅虫数据集386张VOC+YOLO【目标检测】隐翅虫数据集。

2401_85863780的博客 9167

InnoDB 内存结构总览:Change Buffer、AHI 与 Log Buffer

本文系统梳理InnoDB内存结构中的ChangeBuffer、Adaptive Hash Index(AHI)与LogBuffer。ChangeBuffer缓存二级索引页不在内存时的变更,减少随机IO,仅在页加载时合并;聚簇索引修改立即执行,因数据本身不可延后。AHI基于高频等值查询自动构建哈希索引,加速定位,仅支持等值操作。LogBuffer为redo log内存缓冲,配合磁盘日志实现崩溃恢复。三者均服务于性能优化,其中ChangeBuffer与AHI共享BufferPool空间,而LogBuffer独立

bksczm的博客 302

SPSS27 paired t-test 中的Cohen’s D – Effect Size for T-Test

两组数据是相关的且是连续的。

moonlightpeng的博客 910

第三篇 第 6 课

前置:第三篇第 1 课(stdx 引入),第二篇第 1 课(std.regex)。环境:仓颉 SDK 1.2.0。本文所有代码与输出均逐行实测。

weixin_41618057的博客 526

实战案例:用多智能体系统模拟房地产市场的架构设计

房地产市场是典型的复杂自适应系统:买方纠结“要不要上车”、卖方盘算“挂多少钱能快速成交”、中介忙着“撮合两边赚佣金”、政府琢磨“怎么调政策稳房价”——每一个参与者的微小决策,最终都会汇聚成“房价暴涨”“成交冰点”这样的宏观现象。传统的计量经济学模型(比如线性回归)假设“所有人都是理性人”,但现实中没人能算清所有变量——你可能因为“同事买了学区房”就跟风,也可能因为“怕失业”而放弃买房。这时候,多智能体系统(MAS)

移动开发前沿的博客 1125

实战分享:如何用YOLOv5s+BIFPN高效检测隧道裂缝(附数据集获取)

本文详细介绍了如何利用YOLOv5s结合BIFPN(双向特征金字塔网络)构建高效的隧道裂缝智能检测系统。文章从高质量数据集构建、针对性数据增强、模型架构选型与调优,到工程化部署全链路进行了实战分享,旨在为基础设施自动化巡检提供兼顾精度与速度的解决方案。

weixin_29062823的博客 382

V8 机制、手写核心函数与 TypeScript 类型体操

或固定初始化(如数组先定长、对象先给全字段)保持类型与形状稳定;这些都比"换框架"更基础。只能处理纯数据(丢函数、Date、RegExp、循环引用报错)。生产级深拷贝要处理:原始值短路、循环引用、V8(Chrome / Node 的 JS 引擎)不是"解释一行跑一行"那么简单,它用。图:V8 执行流程——解释执行 + 热点优化,优化失败会 Deopt 回退。JS 内存自动管理,但"自动"不等于"不会漏"。是"固定间隔最多执行一次"。手写 Promise 是"懂异步"的试金石。是"停下后才执行最后一次",

qq_38468358的博客 355

数学建模更新10(蒙特卡罗模拟)

蒙特卡罗模拟一.目录二.引例1:布丰投针实验1.投针步骤2.思路3. 历史实验者二.蒙特卡罗模拟概述1.定义2.提出3.原理4.讨论三.应用实例1.三门问题【1】问题【2】代码2.模拟排队问题【1】题目【2】引入参数【3】总结题目信息【4】过程可视化【5】一些推导公式【6】代码3.有约束的非线性规划问题【1】问题的分类【2】例子【3】推导过程【4】代码 一.目录 二.引例1:布丰投针实验 1.投针步骤 步骤: 1:取一张白纸,在上面画出许多条间距为a的平行线 2:去一根长度为l的针,随机的向纸张上投掷n次

沉晨尘宸的博客 3043

信创环境下PageOffice文档控件适配与实践

信创适配做到文档控件这一层,拼的已经不是"有没有国产版本",而是同一个功能在两类终端上是否真的等价。等价的标准很具体:同一次点击能得到同样的结果,同一份公文能得到同样的版式,同一个项目不需要维护两套代码。这背后是三件并不轻松的工作:服务端用一套接口同时支撑两类终端,客户端把两种系统与四种芯片的安装包分发清楚,文档内核层由产品侧跟着 WPS 的版本走。浏览器这一层的压力,则被收进了产品自己的窗口里——升级节奏由产品掌握,不再交给运气。

zi_wu_xian的专栏 331

STM32F103ZE驱动PMW3901光流模块,从SPI配置到数据读取的完整避坑指南

本文详细解析了STM32F103ZE驱动PMW3901光流模块的全过程,从SPI配置、硬件连接到数据读取与处理,提供了完整的避坑指南。重点介绍了SPI参数配置、初始化序列优化、运动数据滤波等关键技巧,帮助开发者快速实现精准的光流检测。

weixin_42631411的博客 516

K8s(二十二):k8s集群如何部署一个Spring Boot项目(依赖于MySQL和Redis外部服务)

🔴 K8s(二十二):k8s集群如何部署一个Spring Boot项目(依赖于MySQL和Redis外部服务)

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 2万+

【从零理解 Spring AI · 12】MCP 的两种角色:做客户端还是做服务端

上一篇讲了 MCP 的概念:标准协议、三大角色、M+N 替代 M×N。

nice_lcj520的博客 561

【AI Agent】Hermes Agent解析

Hermes Agent:一个具备持久化学习能力的开源AI Agent框架 核心特点: 突破传统Agent的"无状态困境",通过记忆系统(SQLite+FTS5全文检索)实现跨会话经验积累 支持200+模型自由切换,11种模型家族和15+平台接入 五层架构设计(入口层、编排层、推理层、工具执行层、存储层)实现平台无关性 47+内置工具和动态技能沉淀机制,支持从任务执行中自动提炼可复用Skill 独特的四层记忆体系(会话/每日/长期/向量索引)和辩证式用户建模 与传统Agent对比: 具备自我进化能力,通过A

sysu_lluozh 967

Java 集合容器高频面试题全解:HashMap 树化阈值、1.7 死循环与 ConcurrentHashMap 演进(2026 招聘 JD 真题复盘)

HashMap 树化阈值 8 的泊松分布依据、退化阈值 6 的防抖设计、JDK 1.7 头插成环死循环的排查与修复、1.8 尾插后为何仍线程不安全、ConcurrentHashMap 放弃分段锁的原因与 ForwardingNode 协作扩容、computeIfAbsent 死锁陷阱、大集合找重复的场景题选型,附三层追问链自测。题目来源为 38 期公开招聘 JD 样本与字节、拼多多、建行、美团、快手公开面经。

蒙眼过河 422

STM32F407中文手册

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

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

spdlog 同步日志库使用详解

spdlog是一个轻量级 C++ 日志库,支持同步日志、异步日志、多线程日志、日志文件轮转和自定义日志格式。对于嵌入式 Linux 应用开发,我建议先使用。它可以帮我们完成:日志级别过滤。时间戳和线程 ID 输出。日志格式化。终端和文件输出。多线程安全写入。日志文件按大小或时间轮转。我们不需要自己实现互斥锁、文件写入、日志格式化和轮转等底层功能。

zengjiajun2006的博客 1121

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

JavaSE通关手册:数据类型与变量

代码无需额外处理,编译时编译器自动完成转换。

xys_678的博客 231

efm32 入门.pdf

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

Java 多态 学习笔记

多态是面向对象编程的重要特性,指同一操作作用于不同对象时产生不同行为。其核心在于“父类引用指向子类对象”,结合方法重写实现运行时动态绑定。多态使代码更灵活、可扩展,如用Person p = new Student();统一处理各类人员注册,无需修改调用逻辑。但多态无法直接调用子类特有方法,需通过instanceof判断并强制转换。编译时看左边(类型),运行时看右边(实际对象),实现解耦与维护便利。

AA_AA114514的博客 368

IDEA 简介:从零认识 IntelliJ IDEA

IDEA 全称,是由 JetBrains 公司开发的一款主流 Java 集成开发环境(IDE)。它集代码编辑、编译、调试、测试、版本控制、构建管理等功能于一体,被大量 Java 开发者视为日常开发的首选工具。所谓 IDE(Integrated Development Environment,集成开发环境),就是把写代码所需的各类工具整合到同一个界面中。相比只用文本编辑器加命令行编译,IDE 能显著减少重复操作,让开发者把精力集中在业务逻辑上。

ztI10的博客 176

Java实现批量线段相交检测(跨积判定+扫描线优化与踩坑复盘)

【代码】Java实现批量线段相交检测(跨积判定+扫描线优化与踩坑复盘)

m0_64476639的博客 341

动态代理两大流派:JDK 代理与子类代理

业务类想加日志,最直白的写法是侵入式修改: 问题很明显:每个方法都要改一遍,改一个业务要动十处。代理模式的解法是:调用方不直接依赖 ,而是依赖一个代理对象。代理对象长得跟目标一模一样,调用它 → 代理先执行增强逻辑 → 再转调真实对象。 关键在于:代理对象的类型是哪来的?这就是"动态"二字的含义:代理类在运行时才诞生。两个角色: 承载增强逻辑, 负责生成代理类。 组装代理并调用: 输出: 业务代码 一行没动,增强逻辑全在 里。这就是 AOP 的味道。 内部四步: 第 2 步 内部:先查 (同一个接口

Android的专栏 603

c++ explicit关键字详解

explicit。

拒绝AI文,努力在AI时代写出感动人心的好文章 166

TRingBuffer两端都能增删(快递站版)

TRingBuffer 是一个支持两端增删、下标访问且容量动态增长的环形双端队列。它通过无符号索引的永不归零设计,利用减法自动模运算实现空满判断与元素计数,避免了传统环形缓冲浪费格子的问题。内部以票号(索引)标记首尾,扩容时重排元素为连续存储,保证 O(1) 操作与高缓存效率。虽不线程安全,但其高效性使其成为游戏开发中事件队列、命令缓冲等场景的理想选择。

u013768914的博客 312

Teamcenter Java SOA 开发:连接、查询与保存

本文介绍如何通过 Java 调用 Teamcenter SOA 接口实现外部系统对接,涵盖连接登录、查询保存等核心操作。以最小闭环示例展示 Connection、Service、ModelObject 等关键组件的使用,强调错误处理与事务管理要点。梳理了 DataManagement、Query、File Management 等 API 模块分工,并结合“工作移交WebService”案例,说明幂等性设计与流程状态返回的重要性。适用于 Web 门户、ERP 集成等场景,建议批量操作用 bulk 接口优化性

软件工程师文艺 256

Mac上装了最新版本的Android Studio,但是没找到jdk的设置选项也没找到jbr的目录

新版Android Studio(2025.3.1+)因三项变更导致常见问题:一、JDK设置移至“DaemonJVM criteria”,新项目默认自动探测或下载JDK;二、JBR目录改名为带版本号的jbr-21等,需进入.app/Contents/查看,或通过About窗口确认运行时;三、命令行缺adb因platform-tools未加入PATH,需在SDK Manager中勾选并配置~/.zshrc中的ANDROID_HOME及PATH。重装或清理残留可解决缺失问题,切勿手动设JAVA_HOME或安装冲

Programming is a highly artistic endeavor 387

Java Arrays.asList 常见坑详解|UnsupportedOperationException、数组联动、基本类型 bug

解析 Arrays.asList 常见开发陷阱,演示 UnsupportedOperationException、底层数组引用共享、基本类型数组问题,区分 Arrays 内部 ArrayList 与 java.util.ArrayList,给出数组转 List 的各种场景正确代码。

weixin_42617033的博客 503

建造者模式,就是“点套餐”而不是“背配方”

建造者模式如同点套餐:无需记住复杂配方,只需一步步选择配置,最后build()交付完整对象。它将复杂对象的构造过程解耦,通过链式调用实现清晰、灵活、可读性强的构建方式,广泛应用于奶茶点单、电脑组装、盖房建屋及Spring Boot等场景,有效避免参数爆炸与语义模糊问题。

weixin_51288065的博客 270
上一篇: 我的计算机认证之路——scjp 经历 !(转载网易社区)
下一篇: Linux下的多线程编程
java169
博客等级 码龄19年 27粉丝 2568原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值