JVM与Spring Boot精讲

基于Simulink进行微电网中DC-DC变换器的仿真建模 微电网:包括可再生能源发电设备、储能系统和负载,可以独立于大电网运行,也可以并网运行。重要性提高能源可靠性:通过本地化供电减少对外部电网的依赖。促进可再生能源利用:支持高效整合多种可再生能源。挑战多源管理:不同类型的能源产生方式各异,需设计灵活的电源管理系统。能量转换效率:需要高效的能量转换装置来确保能源的有效利用。首先明确要模拟的任务内容。设计一个能够在不同输入条件下为微电网提供稳定输出电压的DC-DC变换器。根据微电网的工作状态调整控制策略以维持最佳性能。 阅读详情

📕我是廖志伟,一名Java开发工程师、《Java项目实战——深入理解大型互联网企业通用技术》(基础篇)、(进阶篇)、(架构篇)清华大学出版社签约作家、Java领域优质创作者、优快云博客专家、阿里云专家博主、51CTO专家博主、产品软文专业写手、技术文章评审老师、技术类问卷调查设计师、幕后大佬社区创始人、开源项目贡献者。

📘拥有多年一线研发和团队管理经验,研究过主流框架的底层源码(Spring、SpringBoot、SpringMVC、SpringCloud、Mybatis、Dubbo、Zookeeper),消息中间件底层架构原理(RabbitMQ、RocketMQ、Kafka)、Redis缓存、MySQL关系型数据库、 ElasticSearch全文搜索、MongoDB非关系型数据库、Apache ShardingSphere分库分表读写分离、设计模式、领域驱动DDD、Kubernetes容器编排等。不定期分享高并发、高可用、高性能、微服务、分布式、海量数据、性能调优、云原生、项目管理、产品思维、技术选型、架构设计、求职面试、副业思维、个人成长等内容。

Java程序员廖志伟

🌾阅读前,快速浏览目录和章节概览可帮助了解文章结构、内容和作者的重点。了解自己希望从中获得什么样的知识或经验是非常重要的。建议在阅读时做笔记、思考问题、自我提问,以加深理解和吸收知识。阅读结束后,反思和总结所学内容,并尝试应用到现实中,有助于深化理解和应用知识。与朋友或同事分享所读内容,讨论细节并获得反馈,也有助于加深对知识的理解和吸收。💡在这个美好的时刻,笔者不再啰嗦废话,现在毫不拖延地进入文章所要讨论的主题。接下来,我将为大家呈现正文内容。

优快云

一、JVM知识体系

  1. 类加载机制 类加载机制在JVM中扮演着至关重要的角色。在Java程序执行前,JVM的类加载器负责将类文件从文件系统或网络中读取到JVM内部,并转换成运行时数据结构,以便JVM执行。这个过程涉及到多个技术细节,如下:

    • 加载过程:类加载器通过读取类文件的内容,构建出Class对象,并将其存储在方法区中。这一步涉及到文件读取、二进制解析和符号引用解析等。

    • 连接过程:包括验证、准备和解析三个阶段。验证是为了确保加载的类信息符合JVM规范;准备阶段是为类变量分配内存并设置默认初始值;解析阶段是将符号引用转换为直接引用。

    • 初始化过程:初始化类变量,执行静态初始化器、静态初始化块以及构造函数中的代码。

  2. 类加载过程 类加载过程可以细分为以下几个阶段:

    • 加载阶段:通过类加载器将类文件读取到JVM内存中,并为类的数据结构分配内存空间。

    • 连接阶段:验证类文件格式,准备类变量,解析方法句柄,并将类添加到JVM的运行时环境中。

    • 初始化阶段:执行类的初始化代码,包括静态变量赋值、静态代码块和构造函数。

  3. 双亲委派模型 双亲委派模型是Java类加载机制的一种实现方式,其核心思想是,除了顶层的启动类加载器外,其余类加载器都应当有自己的父类加载器。当一个类加载器需要加载一个类时,它会首先委托给父类加载器进行加载,只有当父类加载器无法完成加载任务时,才自己尝试加载。

  4. 自定义类加载器 自定义类加载器可以实现对特定类加载的控制。例如,可以创建一个网络类加载器,用于从网络中加载类文件。自定义类加载器需要继承ClassLoader类,并重写findClass方法。

  5. 模块化系统(JPMS) Java Platform Module System(JPMS)是Java 9引入的模块化系统,它通过模块来组织代码,提高了代码的可维护性和安全性。模块化系统将代码划分为多个模块,每个模块包含自己的类和资源,并定义了模块间的依赖关系。

  6. 内存模型 JVM内存模型包括以下几个数据区域:

    • 堆:用于存储对象实例,是动态分配的内存区域,垃圾回收主要针对这部分。

    • 栈:用于存储局部变量和方法调用的参数,是线程私有的内存区域。

    • 方法区:用于存储类信息、常量、静态变量等数据,是所有线程共享的内存区域。

    • PC寄存器:用于存储当前线程所执行的字节码的地址。

  7. 内存溢出场景分析 内存溢出是指程序在运行过程中消耗的内存超过了JVM的最大内存限制。内存溢出的常见场景包括:

    • 对象过多:创建大量对象,导致堆空间不足。

    • 循环引用:对象之间存在循环引用,导致垃圾回收器无法回收对象。

    • 静态变量过大:静态变量占用大量内存空间。

  8. 直接内存管理 直接内存是指JVM堆之外的内存区域,用于存储数据缓冲区等。直接内存可以通过java.nio包中的ByteBuffer类进行管理。

  9. 垃圾回收 垃圾回收是指JVM自动回收不再使用的对象所占用的内存空间。垃圾回收算法包括:

    • GC Roots可达性分析:从GC Roots开始,遍历可达对象,回收不可达对象。

    • 分代收集理论:将对象分为新生代和老年代,分别采用不同的垃圾回收策略。

    • 引用类型:包括强引用、软引用、弱引用和虚引用,用于控制对象的生命周期。

  10. 垃圾回收算法 常见的垃圾回收算法有:

    • 标记-清除:先标记所有可达对象,再清除未被标记的对象。

    • 复制:将对象复制到其他区域,回收原区域的对象。

    • 整理:将内存中的对象移动,回收碎片空间。

  11. 并发收集器 并发收集器包括CMS(Concurrent Mark Sweep)和G1(Garbage-First)等,它们在垃圾回收过程中尽量减少对应用程序的干扰。

  12. 停顿时间控制策略 停顿时间控制策略包括:

    • 目标停顿时间:设置一个目标停顿时间,尽量让垃圾回收在目标时间内完成。

    • 自适应停顿时间:根据应用程序的运行情况动态调整停顿时间。

  13. 性能调优 性能调优主要包括以下方面:

    • JVM参数配置:通过设置JVM参数,如-Xms、-Xmx等,优化内存使用。

    • 内存泄漏诊断:通过分析内存泄漏原因,修复代码,避免内存泄漏。

  14. JIT编译优化 JIT编译器将Java字节码编译成本地机器码,以提高程序执行效率。JIT编译优化包括:

    • 即时编译:将Java字节码编译成本地机器码。

    • 动态优化:根据程序运行情况,动态调整代码执行计划。

二、Spring Boot知识体系

  1. 自动配置 自动配置是Spring Boot的核心功能之一,它可以根据项目的依赖情况自动配置所需的Bean。@EnableAutoConfiguration注解是自动配置的关键。

  2. @EnableAutoConfiguration原理 @EnableAutoConfiguration原理是利用Spring的类路径扫描和自动配置原理,通过条件化配置,自动配置所需的Bean。

  3. 条件化配置(@Conditional) 条件化配置用于根据特定条件判断是否配置某个Bean。例如,@ConditionalOnClass注解表示只有当指定类存在时,才配置该Bean。

  4. 自定义Starter开发 自定义Starter可以帮助开发者快速集成第三方库。创建自定义Starter需要创建一个Maven项目,并添加依赖关系。

  5. 起步依赖 起步依赖是指包含一系列依赖的Maven坐标,用于简化依赖管理。Spring Boot提供了丰富的起步依赖。

  6. 依赖管理机制(BOM文件) BOM(Bill of Materials)文件用于统一管理项目中的依赖版本,确保项目稳定性。

  7. 版本冲突解决 解决版本冲突的方法包括:

    • 排除依赖:通过排除指定依赖的版本,避免版本冲突。

    • 升级依赖:升级有冲突的依赖版本,以解决冲突。

  8. 第三方库集成模式 集成第三方库的方法包括:

    • 手动添加依赖:手动添加第三方库的依赖到项目中。

    • 使用起步依赖:使用Spring Boot起步依赖,自动添加第三方库的依赖。

  9. Actuator Actuator是Spring Boot的监控和管理工具,它提供了健康检查、度量指标、自定义端点等功能。

  10. 健康检查端点 健康检查端点用于检查应用程序的健康状况,例如/actuator/health端点。

  11. 度量指标收集 度量指标收集用于收集应用程序的性能数据,例如内存使用、线程数等。

  12. 自定义Endpoint开发 自定义Endpoint允许开发者扩展Actuator的功能,实现自定义的监控和管理功能。

  13. 配置文件管理 Spring Boot使用application.yml或application.properties配置文件管理应用程序配置。多环境配置可以通过application-{profile}.yml实现。

  14. 配置加载优先级 配置加载优先级如下:

    • 命令行参数
    • 系统环境变量
    • application.yml或application.properties
    • application-{profile}.yml或application-{profile}.properties
  15. 动态配置刷新 动态配置刷新允许在应用程序运行过程中修改配置,并立即生效。

  16. 监控与日志 Spring Boot提供了多种监控和日志工具,例如Micrometer、Logback/SLF4J等。

  17. 分布式链路追踪 分布式链路追踪是指追踪应用程序在分布式环境中的执行过程。Spring Boot支持分布式链路追踪,例如Zipkin、Jaeger等。

  18. 扩展机制 Spring Boot提供了丰富的扩展机制,例如自定义AutoConfiguration、Bean生命周期扩展点等。

  19. 响应式编程支持 Spring Boot支持响应式编程,例如Spring WebFlux等。

总结: 本文详细介绍了JVM和Spring Boot的相关知识点,从类加载机制、内存模型、垃圾回收到Spring Boot的自动配置、依赖管理、配置文件管理等。通过这些知识点的串联,读者可以更好地理解Java程序运行原理和Spring Boot框架的使用。在实际开发过程中,灵活运用这些知识点,可以开发出高效、稳定、可维护的应用程序。

优快云

📥博主的人生感悟和目标

Java程序员廖志伟

希望各位读者大大多多支持用心写文章的博主,现在时代变了,信息爆炸,酒香也怕巷子深,博主真的需要大家的帮助才能在这片海洋中继续发光发热,所以,赶紧动动你的小手,点波关注❤️,点波赞👍,点波收藏⭐,甚至点波评论✍️,都是对博主最好的支持和鼓励!

- 💂 博客主页: Java程序员廖志伟
- 👉 开源项目: Java程序员廖志伟
- 🌥 哔哩哔哩: Java程序员廖志伟
- 🎏 个人社区: Java程序员廖志伟
- 🔖 个人微信号: SeniorRD

Java程序员廖志伟

📙经过多年在优快云创作上千篇文章的经验积累,我已经拥有了不错的写作技巧。同时,我还与清华大学出版社签下了四本书籍的合约,并将陆续出版。这些书籍包括了基础篇、进阶篇、架构篇的📌《Java项目实战—深入理解大型互联网企业通用技术》📌,以及📚《解密程序员的思维密码--沟通、演讲、思考的实践》📚。具体出版计划会根据实际情况进行调整,希望各位读者朋友能够多多支持!

🔔如果您需要转载或者搬运这篇文章的话,非常欢迎您私信我哦~

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

相关推荐

Proteus 8.17安装部署全指南:避坑、汉化与STM32库配置

Proteus是一款广泛用于单片机仿真与电路设计的EDA工具,其核心价值在于支持嵌入式系统原型验证与教学实践。Proteus 8.17版本重构了许可证机制(LIC Engine)、依赖环境(VC++ 2019/NET 4.8)及路径加载逻辑,导致传统安装方法失效。掌握正确安装部署流程,是保障原理图绘制、VSM仿真(如51/STM32/ESP32)及外设波形观测(OLED、SPI、ADC)稳定运行的前提。本文聚焦Windows平台下零失败安装路径选择、权限配置、汉化实施与高频器件(如STM32F103)元件库

weixin_33377602的博客 403

JVM & Spring Boot精讲

自定义类加载器允许开发者控制类的加载过程,这在实现热部署、模块化、资源隔离等方面非常有用。自定义类加载器需要实现接口。类路径定位:通过重写findClass方法来定位类文件。资源读取:通过重写和方法来读取资源文件。类转换:通过重写asSubclass方法来处理子类加载。自定义Starter可以帮助开发者快速集成第三方库。起步依赖:定义了Starter的依赖关系,通过Maven或Gradle的方式管理。依赖管理机制:通过BOM文件(Bill of Materials)管理依赖版本,解决版本冲突。

AIHacksCash的博客 1078

PyTorch多机训练Loss不一致问题排查指南:基于算子级一致性验证

比较二次训练过程中所有算子的误差,定位存在一致性问题的pytorch算子

Hi20240217的博客 1159

JVM与Spring Boot知识精讲

自定义类加载器允许开发者实现自己的类加载逻辑,例如,从特定的文件系统、网络或数据库加载类。自定义类加载器需要继承自java.lang.ClassLoader类,并重写findClass方法。

JavaCodePro的博客 778

IC/FPGA笔试/面试题分析(七)建立时间和保持时间类型考题汇总分析

自从召集2020届校招同行加入新建立的“IC/FPGA校招笔试面试交流群“,见识到了很多关于建立时间和保持时间分析的题目,在为别人解答疑惑,以及别人为自己解答疑惑的同时,自己对于知识的理解更加深刻了。 对于建立时间而言,从单独的对触发器的建立时间和保持时间的分析到了对电路(系统)的建立时间到保持时间的分析,前者是核心,后者是扩展,后者建立在前者的基础之上进行推到得到,同时也是芯片内部实际遵循的时...

Reborn Lee 1万+

手把手教你学Simulink——基于Simulink的PMSM MTPA + FW 全速域平滑切换策略

本文提出一种基于Simulink的PMSM全速域平滑切换控制策略,通过融合MTPA和弱磁控制(FW)实现基速附近的无冲击过渡。在过渡区采用加权融合电流给定方法,使电流超调<5%、转速波动<2%,全速域效率>90%。文章详细介绍了系统架构、核心算法及Simulink建模步骤,包括融合控制器设计、切换逻辑实现和参数优化。仿真结果表明,该方法相比传统硬切换显著改善了动态性能,并扩展了调速范围。同时提供了可直接复用的工程模板和MATLAB代码,为电机控制工程师提供了实用的全速域控制解决方案。

MHD0815的博客 81

Java JVM & Spring Boot精讲

自定义类加载器允许开发者控制类的加载过程,这在模块化系统(JPMS)中非常有用。开发者可以通过继承类或实现接口来创建自定义类加载器。自定义Starter可以简化依赖管理,提高项目的可重用性。创建Starter:创建一个包含所有必需依赖的jar包。添加依赖:在Starter的pom.xml文件中添加所有必需的依赖。添加自动配置:在Starter中添加自动配置类,自动配置与Starter相关的Bean。自定义Endpoint允许开发者添加自定义的端点,提供额外的监控信息。实现Endpoint接口:实现。

我是Java程序员廖志伟,感谢朋友们的支持!不定期贡献一篇高品质、过万文字、图文并茂且附有视频解说、满载代码示例注释的良心之作,坚决杜绝粗制乱造。 895

深度强化Q学习-基于微软AirSim仿真环境的自动驾驶案例(原理代码详解简易可行)

最近在学习《强化学习原理与Python实现》,肖智清著。参考第十二章的自动驾驶案例,写一篇总结,尽量做到简单可行,让有志于自动驾驶的小伙伴可以通过此篇博客可以管中窥豹,初步了解自动驾驶的强化学习训练过程。 本篇将自动驾驶问题转化为回合制的强化学习任务,设计以车辆观察图像和运行状态为输入的自动驾驶算法,并在AirSim仿真环境中进行训练和测试。本篇使用带经验回放和目标网络的基于深度Q网络算法设计并实现智能体,对经验回放、目标网络和深度Q学习算法进行简单介绍,并用代码实现。

shao918516的博客 8600

JVM & Spring Boot知识精讲

在实际应用中,有时需要自定义类加载器来加载特定的类,如模块化系统(JPMS)。自定义类加载器可以通过继承类或实现接口来实现。在自定义类加载器中,可以重写findClass方法来加载特定的类文件。自定义Starter可以让其他开发者更容易地使用你的库。创建Maven项目,添加Spring Boot依赖。编写自动配置类,实现自动配置逻辑。编写Starter POM,将自动配置类和依赖打包成Starter。发布Starter到Maven中央仓库。

AIHacksCash的博客 981

【无人机编队】基于matlab虚拟leader无人机编队仿真【含Matlab源码 3279期】

虚拟leader无人机编队仿真 完整代码,包运行;可提供运行操作视频!适合小白!

订阅付费专栏Matlab(奶茶价版),可赠送奶茶价版付费专栏指定代码1份; 837

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

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

博客 1569

Java秋招突击:高频考点与实战策略精讲

在Java后端开发领域,掌握核心原理是构建高性能、高可用系统的基石。理解JVM内存模型、垃圾回收机制、并发编程模型以及数据库事务与索引原理,是每一位开发者必须跨越的技术门槛。这些底层知识不仅决定了代码的执行效率,更直接关系到系统的稳定性和扩展性。从技术价值来看,深入理解Java并发中的AQS同步器框架和synchronized锁升级机制,能够帮助开发者编写出更安全、高效的多线程程序;而精通MySQL的B+树索引结构与事务隔离级别,则是进行数据库性能优化和保证数据一致性的关键。在实际应用场景中,无论是应对高并

weixin_34396103的博客 386

IGCT 测试原理概述

IGCT(Integrated Gate-Commutated Thyristor,集成门极换流晶闸管)是一种高功率半导体器件,基于门极可关断晶闸管(GTO)的原理,但通过集成门极驱动单元和优化结构(如硬驱动技术),实现了更低的导通损耗、更快的开关速度和更高的可靠性。它适用于中高压大功率应用,如高压直流输电(HVDC)、中压变频器和模块化多电平变换器(MMC)。IGCT 的结构为四层 p-n-p-n 器件,门极电流控制导通和关断,阳极电流在关断时快速换流至门极,通常在 1 μs 内完成。

专注于前沿技术的探索与实践,热衷于从代码逻辑、架构设计到行业应用等多维度深挖技术本质。期待在技术之路上与你共同成长~ 239

JVM与Spring Boot解析

自定义类加载器允许开发者在特定的类加载场景下,实现自己的类加载逻辑。例如,实现URL类加载器,用于从特定的URL加载类。自定义Starter可以帮助我们快速集成第三方库。例如,我们可以创建一个名为my-starter的Starter,将第三方库的依赖添加到Starter的pom.xml文件中,并提供一个自动配置类。自定义Endpoint允许我们扩展Actuator的功能。例如,我们可以创建一个自定义的Endpoint,用于获取应用的特定信息。

JavaCodePro的博客 835

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

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

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

JVM与Spring Boot深度解析

开发者可以通过继承类或实现接口来创建自定义类加载器。自定义类加载器可以用于实现特定的类加载逻辑,例如实现热部署功能。自定义Starter可以提供项目所需的依赖和自动配置。创建一个Maven项目,添加必要的依赖。编写文件,定义自动配置类。编写自动配置类,实现自动配置逻辑。打包Starter为jar包。自定义Endpoint可以扩展Actuator的功能,例如添加自定义的健康指标、度量指标等。通过自定义@Bean的生命周期扩展点,可以扩展Spring Boot的自动配置功能。

我是Java程序员廖志伟,感谢朋友们的支持!不定期贡献一篇高品质、过万文字、图文并茂且附有视频解说、满载代码示例注释的良心之作,坚决杜绝粗制乱造。 1095

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

JVM与Spring Boot详解

Java虚拟机(JVM)是Java程序的运行环境,它负责将Java字节码转换为机器码,实现跨平台运行。JVM的这种设计允许Java程序在任意硬件和操作系统上运行,只要存在对应的JVM实现。JVM由以下几个主要部分组成:类加载器、运行时数据区、执行引擎、本地库接口和垃圾回收器。类加载器负责将Java源代码编译成的.class文件加载到JVM中,这个过程称为类加载。运行时数据区是JVM在运行过程中使用的内存区域,包括方法区、堆、栈、程序计数器、本地方法栈等。

我是Java程序员廖志伟,感谢朋友们的支持!不定期贡献一篇高品质、过万文字、图文并茂且附有视频解说、满载代码示例注释的良心之作,坚决杜绝粗制乱造。 924

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Java JVM与Spring Boot深度解析

开发者可以通过继承类或实现接口来创建自定义类加载器。例如,可以创建一个URL类加载器,用于加载位于特定URL路径下的类文件。每个模块都由一个描述文件定义,其中包含了模块的名称、所需模块、导出模块、打开的包等信息。开发者可以通过创建Maven项目并添加依赖来开发自定义Starter。自定义Starter需要实现接口,并定义所需的依赖。开发者可以通过实现Endpoint接口来开发自定义端点。自定义端点可以用来提供应用程序的特定信息。开发者可以通过实现接口来自定义AutoConfigurationBean。

我是Java程序员廖志伟,感谢朋友们的支持!不定期贡献一篇高品质、过万文字、图文并茂且附有视频解说、满载代码示例注释的良心之作,坚决杜绝粗制乱造。 1123
上一篇: Spring框架核心技术解析
下一篇: JVM与Spring Boot核心解析
Java廖志伟
博客等级 码龄2年 3609粉丝 1517原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值