checked or unchecked

【TestNG自动化测试框架详解】 TestNG是一款设计测试用例执行流程的测试框架。 阅读详情
 Java明确区分两种类型的异常.那些扩展了java.lang.Exception的异常称为checked exceptions, 编译器要求这些异常必须被捕获或者重新抛出.那些扩展了java.lang.RuntimeException的异常称为unchecked exceptions, 它们不是必须捕获的.当然, 也可以捕获这些异常并相应地扩展调用栈, 就像通常对checked exceptions做的那样. Java是唯一的支持checkedexceptions的主流语言, 而所有的C++和C#异常都相当于Java的unchecked exceptions.

首先,让我们考虑一下Java中接收异常时的行为. 在Sun提供的Java教程中提到了这一点,参见http://java.sun.com/docs/books/tutorial/essential/exceptions/runtime.html.其中的建议是在代码中使用checked exceptions:
"因为Java语言不要求一个方法捕获运行时异常或定义抛出何种运行时异常,对程序员来说, 仅抛出运行时异常或使所有的自定义异常都从RuntimeException继承就显得很有诱惑力.这两种编程的便捷方法都使得程序员可以这样写Java代码, 免于Java编译器的唠唠叨叨的错误提示, 也不用定义或捕获任何异常.这看上去很方便, 但是这种故意回避Java语言关于捕获异常和定义异常规范的要求的做法, 可能会对使用你的Java类的其他程序员造成问题.

Checked exceptions表示了关于一个操作的一些有用的信息, 这项操作调用者无法控制, 但是调用者又需要知道这些信息. 比如, 文件系统可能已满, 或者远端关闭了连接, 又或者访问授权不足以执行这项操作.

那么, 如果仅仅因为你不想定义异常规范就抛出一个RuntimeException或其子类, 你能得到什么呢? 很简单,你能够抛出一个没有明确定义的异常. 或者说, 这是一种避免文档化一个方法能抛出的每一项异常的方法. 这好吗?也许只比根本不文档化方法的语义好一点吧. 所以答案就是几乎从来都不应使用unchecked exceptions."

总结一下, 正统的Java做法是: 使用checked exceptions, 而运行时异常(RuntimeException)预示编程上的错误.

我曾经也同意这种观点. 但是, 在书写了成千上万个异常捕获代码块之后, 我得出这样的结论, 这种理论在实践中并不总是可行的.我并不是唯一这么想的人. 既然在这一点上慢慢形成我自己的观点, 我注意到Bruce Eckel, 他是经典的Thinking inJava的作者, 也改变了他的观点. 现在Eckel提倡使用运行时异常, 并且怀疑checkedexceptions是否只是一种不成功的试验, 应该从Java中抛弃.参见http://www.mindview.net/Etc/Discussions/CheckedExceptions.

Eckel声称观察表明, 当一个程序员关注一小段代码时, checked exceptions看上去是一种漂亮的想法, 可以避免很多错误. 但是,在大规模的代码中情况正好相反.可以参考http://www.octopull.demon.co.uk/java/ExceptionalJava.html上AlanGriffiths的"Exceptional Java", 这是另外一个关于checked exceptions引起的问题的研究.

使用checked exceptions引起以下一些问题:
1.代码膨胀. 程序员必须书写代码捕获并忽略那些他们并不能合理地加以处理的异常, 他们将变得很泄气. 这是一种糟糕的编程实践,经验表明它们发生得比我们想象的更为频繁. 即使是一个好的程序员也会偶尔忘记正确地将异常嵌套, 这意味着完整的调用栈将丢失,异常中包含的信息就不再那么有用.
2. 代码的可读性降低. 在例程中捕获那些不能合理加以处理的异常并马上重新抛出它们,使得很难找到那些真正做一些事情的代码. Java的正统观点认为这一点只困扰那些懒惰的程序员, 我们应该简单地忽略这个问题. 然而,这种观点忽略了事实. 例如, 设计Java核心库的人显然清楚地考虑过这个问题. 想象一下,如果象java.util.Iterator这样的界面抛出checked exceptions而不是unchecked exceptions,那么使用它们将是一场噩梦. JDO API是另外一个来自Sun自己的API的例子, 它使用unchecked exceptions. 相反,JDBC使用checked exceptions, 使用起来就很笨重.
3. 没完没了地包装异常. 一个checkedexceptions必须被捕获, 或者声明在可能遇到它们的那些方法的异常规范中. 这就造成一种选择, 可以重新抛出异常,也可以将一个低级别的异常包装在一个新的高级别异常中, 然后重新抛出. 如果我们加入了一些有用的信息, 包装并重新抛出异常是很值得的. 但是,如果原来的异常是不可恢复的, 包装它们就毫无价值. 如果使用unchecked exceptions, 在这种情况下将引起一个自动的栈回绕,而使用checked exceptions, 我们无非做了一个等价的手工栈回绕,并且在调用栈路径上的每一个方法中都要添加一些额外的毫无意义的代码, 只是为了包装异常. 主要是这个原因才促使我重新思考自己关于异常处理的态度.
4. 脆弱的原型声明. 如果很多代码都使用了某个界面, 那么要声明一条额外的异常规范就会导致修改大量代码.
5.定义接口时, Checked exceptions并不总是工作得那么良好. 考虑Java教程中文件系统满的例子.如果我们谈论的是一个使用文件系统的类, 这个例子没有问题. 如果我们处理的是一个仅仅承诺在某处(也许是数据库)存储数据的类, 情况又怎样呢?我们肯定不想在这个类的接口中硬编码进对Java I/O API的依赖, 因为这个接口很可能有许多不同的实现. 若使用checkedexceptions, 我们必须为这个接口创建一个新的存储介质无关的异常类型, 并且将文件系统异常包装其中.这样做是否值得依赖于发生的异常是不是可恢复的. 如果不可恢复, 我们又一次做了无用功.

很多这些问题归结于这样一个问题:我们捕获了一个无法处理的异常, 被迫重新抛出一个包装过的异常. 这很讨厌, 很容易引起错误(因为很容易丢失调用栈), 并且没有用.此时使用unchecked exceptions更佳. Unchecked exceptions会引发自动的栈回绕,而且也是在发生致命错误时的正确行为.

我相信checked exceptions在一种情况下是有用的, 这一点不象Eckel,也使我的观点不是那么的不正统. 当异常等同于方法的另外一个返回值时, 应使用checked exceptions,更棒的是语言将帮助强制必须检查这一返回值. 我只是认为通常的Java约定过分强调了这一点.
"Checked exceptions比许多老的语言中使用的错误返回值要好得多. 程序员迟早将不再检查错误返回值, 能使用编译器强制正确的错误处理真是太好了. 这样的checked exceptions应该象参数和返回值那样是API的一部分."

然而, 我不建议使用checked exceptions, 除非调用者能处理它们. Checked exceptions尤其不应用来标示发生了一些致命错误, 这些错误不应由调用者来处理.
"如果调用者代码能做一些有意义的事情, 使用checked exceptions. 如果异常是致命的, 或者调用者不能通过捕获异常而有所收获,使用unchecked exceptions. 记住你可以依赖于一个J2EE容器来捕获unchecked exceptions并记录它们."

以下是选择checked exceptions还是unchecked exceptions的指南:

问题 例子 肯定回答时的建议
----------------------------------------------------
所有调用者都应处理 定义和使用checked
这个问题吗? 异常是 exceptions, 以利用
否只是函数的另外一 Java提供的编译时支持
个返回值?
----------------------------------------------------
是否只有少数调用者 JDO异常 扩展RuntimeException.
需要处理这个问题? 这使得调用者可以捕获
异常, 但不强制所有调
用者都这么做
----------------------------------------------------
是否发生了致命错误? 扩展RuntimeException.
错误是不可恢复的吗?
----------------------------------------------------
还不清楚? 扩展RuntimeException.
将可能抛出的异常都写
进文档, 以便调用者决
定是否捕获和捕获哪些
异常
----------------------------------------------------

在包一级做一个决定, 决定每个包如何使用checked和unchecked exceptions. 将使用uncheckedexceptions的决定写进文档, 因为很多程序员还不习惯它. 使用unchecked exceptions的唯一危险是没有正确地写文档.使用unchecked exceptions时, 一定要将所有可能的异常写进文档, 让调用者选择是否捕获异常. 理想的情况下,编译器应该强制将所有的异常写进Javadoc. 当分配JDBC连接这样的在所有情况下都应释放的资源时, 不管你是否需要捕获异常,切记使用一个finalize块以保证正确的清除. 记住即使没有catch块, 仍然可以使用finalize块.

未捕获的运行时异常将杀死执行的线程, 有时这成为避免使用运行时异常的一个理由. 在一些情况下这是一个合理的论据, 但是J2EE应用中这通常不是一个问题,因为我们极少控制线程, 而是让应用服务器来做这个. 应用服务器将捕获和处理那些在应用代码中没有捕获的运行时异常,而不会让这些异常挂起整个Java虚拟机. 在EJB容器中发生的一个未捕获的运行时异常将导致EJB容器抛弃当前的EJB实例.如果发生的错误是致命的, 这通常没什么不对.

说到底, 使用checked exception还是uncheckedexception是一个观点的问题. 不光将采用的方式写进文档很重要, 尊重其他人的方法也很重要. 虽然我倾向于使用uncheckedexception, 当维护或修改其他喜欢只使用checked exception的程序员的代码时, 我将采用他们的方法.

异常处理的良好实践方法
无论使用checked exceptions还是unchecked exceptions, 我们总需要理异常嵌套的问题. 通常这发生在我们被迫捕获一个我们不能处理的异常, 而是重新抛出它们时. 这意味着我们必须将原始的嵌套的异常包装在一个新的异常中.

有一些标准的异常, 比如javax.servlet.ServletException, 提供了这样的包装功能. 在我们自己的应用的异常之中,我们需要定义或使用自定义的异常父类, 这些父类有一个以其原始异常为参数的构造函数,并且重载了printStackTrace()方法来显示完整的调用栈, 包括原始异常的调用栈在内. 通常我们需要两个这样的父类, checkedexceptions和unchecked exceptions各一个. (在JDK 1.4中不需要这么做, 因为它支持所有异常的嵌套.)

在本书的示例代码中,这两个类分别是com.interface21.core.NestedCheckedException和com.interface21.core.NestedRuntimeException.除了分别继承自java.lang.Exception和java.lang.RuntimeException, 它们没什么不同.这两个类都是抽象类, 它们的子类才有意义. NestedRuntimeException的定义如下:
package com.interface21.core;
import java.io.PrintStream;
import java.io.PrintWriter;
public abstract class NestedRuntimeException extends RuntimeException {
private Throwable rootCause;
public NestedRuntimeException(String s) {
super();
}
public NestedRuntimeException(String s, Throwable ex) {
super();
rootCause = ex;
}
public Throwable getRootCause() {
return rootCause;
}
public String getMessage() {
if (rootCause == null) {
return super.getMessage();
} else {
return super.getMessage() + "; nested exception is: /n/t" +
rootCause.toString();
}
}
public void printStackTrace(PrintStream ps) {
if (rootCause == null) {
super.printStackTrace(ps);
} else {
ps.println(this);
rootCause.printStackTrace(ps);
}
}
public void printStackTrace(PrintWriter pw) {
if (rootCause == null) {
super.printStackTrace(pw);
} else {
pw.println(this);
rootCause.printStackTrace(pw);
}
}
public void printStackTrace() {
printStackTrace(System.err);
}
}

Java1.4在异常处理领域引进了受欢迎的改进. 不再需要写链式异常, 同时那些已经存在的象上面那样的代码工作起来也没有问题.java.lang.Throwable和java.lang.Exception都有了新的构造函数, 支持异常的嵌套,并且java.lang.Throwable新增了一个方法void initCause(Throwablet)使得即使异常构造之后仍可以定义一个根异常. 这个方法应该只在构造函数没有定义嵌套异常的情况下被调用一次.

Java 1.4相关的异常应该实现一个以嵌套异常为参数的构造函数, 它再调用新的异常构造函数. 这意味着我们总是可以象下面那样在一行代码中创建和抛出异常:
catch (RootCauseException ex) {
throw new MyJava14Exception("Detailed message", ex);
}

如果异常没有提供这样的构造函数, 我们需要使用稍多一点的代码, 象这样:
catch (RootCauseException ex) {
MyJava13Exception mex = new MyJava13Exception("Detailed message");
mex.initCause(ex);
throw mex;
}
当使用象上面讨论的NestedRuntimeException那样的可嵌套异常时, 记得遵循它们自己的约定, 而不是Java 1.4那样的预定, 这样才能征程工作.

J2EE中的异常
当涉及J2EE应用时, 有几个特殊的问题需要考虑.

分布式应用将遇到许多checked exceptions. 这部分是应为在那些Java的早期历史中, Sun有意这么做,使得必须明确地使用远程调用. 所有的RMI调用, 包括那些EJB远程接口调用, 都抛出java.rmi.RemoteException,这使得不可能做到本地调用和远程调用的透明. 这种决定大概是正确的, 因为本地调用和远程调用的透明性是很危险的, 特别是对性能. 但是,这导致着我们经常书写代码来处理checked exceptions, 而这些异常仅仅意味着发生了致命的不值得重试的异常.

在servlets和JSP页面中, 从J2EE系统级异常如java.rmi.RemoteException保护接口代码是很重要的. 许所程序员没有认识到这一点,这导致很不幸的后果, 比如造成对系统框架层不必要的依赖和失去重试一些操作的机会, 这些操作本应该在更低的层次上已经重试过了.在那些认识到这些问题的程序员中间, 我看到两种策略:
1. 允许界面部分忽略这样的异常. 比如, 在所有处理呼入的WEB页请求的类的父类这样较高的层次上捕获异常, 这就允许子类在某个具有保护属性的抽象成员函数中抛出一类异常.
2.当业务逻辑而非远程过程调用引起异常时, 不管是checked还是unchecked的, 使用客户端方法来取消和远端系统的通讯并抛出异常.这就是说客户端方法不应该模拟远端组件的接口, 远端接口总是抛出java.rmi.RemoteException. 这种方法称为Businessdelegate J2EE pattern, 是核心J2EE模式的一种.

(九)DFI接口时序 文章目录一、DFI Interface 一、DFI Interface   DFI接口是连接DDR Controller与DDR_PHY之间的通用接口,其信号组如下表:        阅读详情

相关推荐

黑客渗透测试后门隐藏技术揭秘

本文介绍了在授权渗透测试中隐藏后门文件(muma.exe)的多种技术手段。主要包括:通过WinRAR自解压脚本将后门与正常程序捆绑实现双开;利用系统自动运行目录和注册表实现开机自启;修改文件图标伪装成常用软件;将文件存放在冷门系统目录;设置系统+隐藏双重属性增强隐蔽性。此外还涉及对抗安全软件的加壳(UPX)、免杀(msfvenom编码)技术,以及进程注入、日志清除等运行隐藏方法。所有技术仅限合法授权测试使用,未经授权使用将面临法律责任。

m0_60781580的博客 1040

Exception Handling – Checked or Unchecked Exceptions

Using checked exceptions exclusively leads to several problems: 使用checked异常会导致一些问题: Too much code 太多的代码Developers will become frustrated by having to catch checked exceptions that they can't r...

aisuozao7219的博客 213

从零到一:Mx_yolo本地训练与K210部署实战指南

本文详细介绍了从零开始进行Mx_yolo本地模型训练到K210部署的全流程实战指南。涵盖环境配置、数据准备、模型训练与调优、模型转换及K210部署等关键步骤,并提供了常见问题解决方案和性能优化技巧,帮助开发者高效完成AI模型在嵌入式设备的落地应用。

weixin_29081163的博客 252

checked or runtime or unchecked?

checked or runtime or unchecked?"MalformedURL-Exception, for instance, indicates that the address given for the service is notvalid. To recover from this exception, the application will at minimum nee...

rmn190 152

STM32F4 Flash数据的保存和读取。

STM32F4 Flash数据的保存和读取。

张一西的博客 9216

SAP-MM-供应商对账平台(功能集合)

(1)集成OA审批,线上核销,结果写入SAP; (2)集成SRM,线上与供应商对账确认,写入SAP; (3)集成财务付款结果确认写入,OA回传结果,定时同步SRM供应商平台。 欢迎留言交流,功能完善,如需要页面设计,请订阅专栏

qq_32198063的博客 748

【转自csdn blog】checked or unchecked

Java明确区分两种类型的异常.那些扩展了java.lang.Exception的异常称为checked exceptions, 编译器要求这些异常必须被捕获或者重新抛出.那些扩展了java.lang.RuntimeException的异常称为unchecked exceptions, 它们不是必须捕获的.当然, 也可以捕获这些异常并相应地扩展调用栈, 就像通常对checked exception

icesnows's blog 629

流媒体服务软件-LiveNVR channeltree 未授权访问

LiveNVR 能够通过简单的网络摄像机通道配置,将传统监控行业里面的高清网络摄像机 IPCamera、NVR 等具有 RTSP/Onvif 协议输出的设备接入到 LiveNVR,LiveNVR 能够将这些设备源的音/视频数据进行采集、转换、输出,进行全平台终端直播(PC、Android、iOS、微信、H5),并且LiveNVR能够将视频源的直播数据对接到第三方 CDN 网络,实现安防设备互联网级别的直播分发。对channeltree接口加上权限校验。直接访问接口即可获取数据。

iSee857的博客 1040

异常的使用-checked or unchecked

较之于unix系统和c-based系统中以返回值表示子程序的成功与否,其中返回值包括异常码与正常返回码(常用 负数 表示不同异常,0表示正常结束)。java提供了专门的异常机制,可以发生异常与程序返回值做分离。异常的抛出,可以让我们及时采用正确的策略做处理。     java中异常有两类:受检异常(checked exception)和非受检异常(uncchecked exception)。在实现

Just To Be 1283

第三方 API 调用 OpenClaw 出现 LLM request timed out 的解决方案

本文主要介绍了第三方 API 调用 OpenClaw 出现 LLM request timed out 的解决方案,希望能对使用OpenClaw的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 8万+

2026年华为od机试真题题库

OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)

面试高手的博客 19万+

190. Java 异常 - 绕过 Catch or Specify 要求?你真的想好了吗?

摘要:Java的受检异常(Checked Exception)要求必须捕获或声明,但部分开发者为简化代码改用运行时异常(RuntimeException)。这种做法虽能减少代码量,却隐藏了潜在错误,降低程序健壮性。受检异常通过编译器强制检查帮助开发者提前发现问题,而运行时异常可能导致程序在用户端崩溃。仅在逻辑错误(如参数非法)或明确文档说明时,才建议使用运行时异常。核心原则是:关键错误应明确处理,非关键错误可灵活处理,但需权衡代码简洁性与可靠性。

yaoxin521123的博客 1282

Qt6导航组件系列专栏:30+常见导航场景的实现

本文介绍了Qt6导航组件系列专栏,涵盖30+常见导航场景的实现方案。专栏分为7组:基础侧边栏系列、社交与协作导航系列、文件与项目导航系列、工业与车载导航系列、创意与扩展导航系列、办公与效率导航系列、流程与引导导航系列。

u011186532的专栏 1132

Unchecked Exception和Checked Exception的区别

Unchecked Exception:值得是程序的逻辑错误,程序的疵瑕,并且运行的时候无法恢复。 包括Error以及RuntimeException及其子类,如:OutOfMemoryError, UndeclaredThrowableException,IllegalArgumentException,IllegalMonitorStateException, NullPo...

weixin_30326515的博客 221

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

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

checked和unchecked的区别

int类型的最大值是2147483647,2个最大值相加就会超出int的最大值,即出现溢出。 class Program { static void Main(string[] args) { int y = 2147483647; int x = 2147483647; ...

weixin_33709364的博客 4885

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

详解Java中的checked异常和unchecked异常

Java中checked和unchecked异常的区分,以及java的异常层次结构,应该对哪些异常进行声明。

在地图上飞行 4万+

C# checked和unchecked详解

C# checked和unchecked详解 1、对基元类型执行的许多算术运算都可能造成溢出,有如下代码: 1 2 Byte b=100; b=(Byte)(b+200); 简单的解读上面的代码: 第一步,将所有的操作数都扩大至32位或者64位(根据操作系统的位数决定)。所以b和200(这两个值都不超过32位),首先转换成32位(假设...

cxu123321的博客 1574

Checked异常和Unchecked异常

从异常处理机制的角度可以分为两类,Unchecked Exceptions和Checked Exceptions。Unchecked Exceptions指的是被程序员check的异常,Checked Exceptions指的是被编译器check的异常。

qq_53508036的博客 2956

checked exception和unchecked exception区别

一、 Java 中定义了两类异常: 1) Checked exception: 这类异常都是Exception的子类 。异常的向上抛出机制进行处理,如果子类可能产生A异常,那么在父类中也必须throws A异常。可能导致的问题:代码效率低,耦合度过高。C#中就没有使用这种异常机制。 2) Unchecked exception: 这类异常都是RuntimeException的子类,虽然RuntimeException同样也是Exception的子类,但是它们是特殊的,它们不能通过client code来

yuefengyuan的专栏 9035

异常处理艺术:Checked vs Unchecked异常设计哲学

想象一下,你正在写一个程序读取文件,结果文件被隔壁老王删了;或者你调用了一个方法,结果参数传成了null。这些“翻车现场”就是异常!Java用异常机制让程序在翻车时优雅地喊一句:“老司机带带我!”而不是直接崩溃。

qq_37502042的博客 926

Java中的checked异常和unchecked异常

(一)Java的异常层次结构   要想明白Java中checked Exception和unchecked Exception的区别,我们首先来看一下Java的异常层次结构。   这是一个简化的Java异常层次结构示意图,需要注意的是所有的类都是从Throwable继承而来,下一层则分为两个结构,Error和Exception。其中Error类层次描述了Java运行时系统的内部错误和资源耗尽...

voodoo的博客 1万+

Java中的Checked和Unchecked异常

复习软件构造时涉及到了Checked和Unchecked类型的异常,给出他们的划分和处理准则; 图1:异常类的继承关系,其中Throwable类继承自Object Error类 Error类描述的是java运行时系统内部出现的错误和系统资源不足的异常情况,比如用户输入错误、设备错误或者物理限制(内存不足等),程序员对于这些内部错误通常是没有办法解决的,一旦发生需要想办法让程序优雅的结束; 图2:Error类 一些典型的Error: VirtualMachineError:Java虚拟机坏

weixin_50928233的博客 1801

77. Checked 与 Unchecked 区别

Java异常分为Checked Exception(受检异常)和Unchecked Exception(非受检异常)两类。Checked Exception如IOException等必须在编译时显式处理,通过try-catch捕获或throws声明抛出,适用于可恢复错误。Unchecked Exception如NullPointerException等继承自RuntimeException,编译时不强制处理,通常表示程序逻辑错误。Error类表示严重系统错误如内存溢出。

weixin_43484713的博客 744

定义时区分unchecked/checked异常Excetion

1.我们可以从英语的角度理解 unchecked/checked uchecked 这个词加了 ed 英文解释也就是 应该要被check但是没有check 也就是说这种错误就是你自身不谨慎仔细导致的 所以说像 NullPointException(NPE) ArrayIndexOutOfBoundsException (数组越界) ClassNotFoundException UnknowTy...

itjiandingshi的博客 1100

关于checked和unchecked的异常以及自定义异常

在学习Java的过程中食用以及自定义异常时,会面临checked异常和unchecked的异常的选择。

weixin_43960668的博客 1586

Checked和Unchecked Exceptions -- Java

在我们所从事的许多项目中,我们看到了各种不同的编码,代码格式,类的命名方式,数据库技术等等不同策略。但所有项目中相同的一件事是异常(Exception),它有很多种,而且我们还可能通过继承Exception类创建自定义异常。 在这篇文章中,我将讨论异常。我将讨论已检查异常(checked exceptions)和未检查异常(unchecked exceptions)。我将谈论什么是异常,以及异常处理的最佳实践。 本文中的章节: 什么是异常 checked 和 unchecked exceptions 最佳

bill的博客 704

C#学习——语法——checked unchecked 关键字

checked 和 unchecked关键字用来限定检查或者不检查数学运算溢出的

937
上一篇: JCA
下一篇: 使用XFire+Spring构建Web Service(一)——helloWorld篇
igate
博客等级 码龄20年 3粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值