读《后端技术面试38讲》--学习笔记和读后感 (二)

MIT 6.S191深度学习实战路径:从课堂到产线的闭环能力构建 深度学习不是数学公式堆砌,而是解决真实数据缺陷、模型行为诊断与业务可解释性的系统工程。其核心原理在于建立‘数据—模型—评估—部署—监控’的完整反馈闭环,技术价值体现在降低工业场景中的调试成本、提升模型可信度与上线效率。典型应用场景包括图像分类中的注意力偏差定位、NLP鲁棒性测试、金融风控可审计决策生成,以及边缘设备上的传感器级模型漂移检测。本文基于MIT 6.S191官方课程与Towards AI生态整合实践,聚焦Grad-CAM热力图分析和Shapash可解释性框架两大关键能力,揭示如何将学术内容转化为可 阅读详情

学习笔记和读后感

主要记录阅读《后端技术面试38讲》课程的学习笔记和一些自己的工作和学习体会。
课程所讲的内容是比较系统性的讲了后端技术开发的技术理论,比较适合于有六七年以上开发工作经验的软件开发人员,如已经从事过一些项目的架构设计工作,则能够更系统的理解课程内容;在阅读过程中将自己的工作感悟和既往的技术学习内容,不断地表达出来,则能更充分的提升对软件工程的系统认知和表达能力。

本篇接续上一篇笔记
读《后端技术面试38讲》–学习笔记和读后感 (一)

继续对课程的软件的设计原理部分,做笔记的整理输出并表达自己的理解和看法

08丨软件设计的方法论:软件为什么要建模?

软件建模的必要性: 领域问题 --> 模型 --> 软件系统
4+1视图 :
逻辑视图:功能逻辑 , 模块关系
开发视图:系统层次划分 、包管理 、依赖的第三方包 ,一个程序包一般对应一个功能模块
过程视图:动态的描述程序运行期 进程、线程、对象实例 ,以及并发、同步、通信等
物理视图: 部署架构 服务器间的通信
场景视图:业务角度的功能流程, 展现如何被技术方式的视图解决
UML: 统一建模语言 便于沟通 帮助自己思考设计

感想:
建模主要是将对领域问题的抽象化思考想法表达出来,通过建模的过程也能够促进对问题的分析理解;其次架构师在工作过程中需要将设计方案呈现给开发人员和业务人员,需要采用合适的方案表现形式,模型起到了呈上启下的指导作用,另外在对软件系统的后续测试和验证也起到关键作用;再次对于复杂系统往往会逆向的建模 以便更好的理解软件系统;最后讲模型组织成一份有价值的设计文档是架构设计的主要工作 。

09丨软件设计实践:如何使用UML完成一个设计文档?

UML的常用模型图:
类图 关联、依赖、组合、聚合、继承、泛化
序列图 生命线 、激活条;交互
组件图 依赖关系
部署图 了解系统运行的样子,和现有及第三方服务器的关系, 估算成本
用例图 角色 、 功能(调用依赖 、扩展)
状态图 状态及变迁关系(转化条件)
活动图 圆角矩形 活动 、 菱形 判断 , 泳道
需求分析阶段: 用例图、时序图、类图
概要设计阶段:部署图、组件图、时序图、活动图
详细设计阶段: 类图、时序图、活动图

感想:
UML精粹 那本书还是不错的 ,讲的更详细,这块的使用比较熟练

10 | 软件设计的目的:糟糕的程序员比优秀的程序员差在哪里?

描述什么是糟糕的设计 ,反向对比 :
僵化性 小改动会引起大范围改动
脆弱性 小改动会引莫名其妙的bug
牢固性 无法进行快速有效的拆分 ,无法轻易实现低耦合
粘滞性 阻碍改进 糟糕的方案 更容易实施
晦涩性 难以看懂理解
对应的正向特性 : 灵活、强壮、易于使用、阅读和维护
应对需求变更最好的办法就是一开始的设计就是针对需求变更的,并在开发过程中根据真实的需求变更不断重构代码,保持代码对需求变更的灵活性。

11丨软件设计的开闭原则:如何不修改代码却能实现需求变更?

软件实体(模块、类、函数等等)应该对扩展是开放的,对修改是关闭的
使用哪些模式可以实现开闭原则:
策略模式
适配器模式
观察者模式
模版方法
感想:
实现开闭原则的关键在于抽象 ,利用好面向接口编程 、抽象方法 、模版方法(小框架)

12 | 软件设计的依赖倒置原则:如何不依赖代码却可以复用它的功能?

依赖倒置原则:
高层模块不应该依赖底层模块,二者都应该依赖抽象
从高到低的传递依赖: 高层申明所需的服务接口 底层对接口进行实现 ,接口所有权的倒置
抽象不应该依赖具体实现,具体实现应该依赖抽象
遵循依赖倒置原则有这样几个编码守则:
1、应用代码中多使用抽象接口,尽量避免使用那些多变的具体实现类。
2、不要继承具体类,如果一个类在设计之初不是抽象类,那么尽量不要去继承它。对具体类的继承是一种强依赖关系,维护的时候难以改变。
3、不要重写(override)包含具体实现的函数。
感想:
依赖倒置 使得代码的复用和依赖关系变得灵活,框架的设计、对第三方服务的调用等场景中包含较多依赖倒置原则的使用 ; 对于现实生活或工作中也可以使用依赖倒置的模式 来处理协作,理清责任和工作范围, 如前后端对接接口时 可以让前端负责提出接口需求,对输入输出做好限定, 后端对给定的限定 可以做扩展,但不应变更,如变更则需要前端的同意 。
另一个例子 来源这个课程的评论: 老板就是找个写代码的人,别把自己看的那么重。你们每天写那么多bug,别怪老板说要换人。他们才理解! 老板定义了诉求 需要写代码的人, 特定员工-如程序员甲 可以写代码 ; 其他人也是可以写, 这样在满足条件的情况下 可以更换写代码的人。

13丨软件设计的里氏替换原则:正方形可以继承长方形吗?

继承的使用
里氏替换原则
子类型必须能够替换掉它们的基本型 ,即:所有使用基类的地方,可以使用子类代替

在具体使用继承时,需要依据场景将子类带入到基类的行为场景中进行验证,看是行为结果是否能符合基类预期,如不符合特性,则继承可能并不合适。 如 课程举例 正方形继承长方形的例子,长方形计算面积 之前设置了长和宽, 3,4 面积12; 正方形 其实只能设置一个边长 4, 计算面积会是16, 特性不相符 ,因而不适合继承。

通常来说,子类型不能比父类型更严格,是违反里氏替换原则的,对于不是抽象类或者接口,一般不建议继承
组合优于继承: 通常说的是如果只是为了使用这个类的方法,则推荐使用组合方式,这种也是对象适配器模式

14 | 软件设计的单一职责原则:为什么说一个类文件打开最好不要超过一屏?

Servlet 做请求响应 内部直接拼接输出 html
JSP 做请求响应 , 再去调用业务模型 ,动态组合结果输出
MVC 模式 控制器做请求响应 , 调用视图层 和 业务层(业务层 -> 服务层 -> 数据持久层)
逐步拆解分离

感想:
对复杂业务功能 需要做好拆解分析 ,分步骤分模块来实现

15丨软件设计的接口隔离原则:如何对类的调用者隐藏类的公有方法?

接口隔离原则 :调用接口 而不是直接调用实现类, 实现类可以实现多个接口, 每个接口有不同的侧重面, 调用者依据自身场景 选择合适的侧重面的接口,从而实现隔离保障。
多重集成 :继承某个类 并实现某个接口, 达到复用和扩展的目的,之后注册到某个管理类中, 实现一个隔离性
接口隔离原则在迭代器设计模式中的应用 // for(var meta : collections){}

16 | 设计模式基础:不会灵活应用设计模式,你就没有掌握面向对象编程

对多态的理解和使用 面向对象本质是多态,设计模式的精髓是灵活使用多态

17 | 设计模式应用:编程框架中的设计模式

框架是对某一类架构方案复用的设计与实现,
层次:
软件应用程序
软件编程框架
面向对象的设计模式
面向对象的设计原则
面相对象的设计目标(低耦合、高内聚)
Web容器主要使用了策略模式 ,多个策略实现同一个策略接口

public interface Servlet {
    public void init(ServletConfig config) throws ServletException;
    public void service(ServletRequest req, ServletResponse res)
            throws ServletException, IOException;
    public void destroy();
}

HttpServlet 实现 Servlet 这个策略接口, 并只给出模板方法service 便于开发

   protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
   {
       String method = req.getMethod();
       if (method.equals(METHOD_GET)) {
               doGet(req, resp);
       } else if (method.equals(METHOD_HEAD)) {
           long lastModified = getLastModified(req);
           maybeSetLastModified(resp, lastModified);
           doHead(req, resp);
       } else if ...

JUnit 中的设计模式: 模版方法模式 、组合模式

架构师如何确保自己的架构设计被整个团队遵守、执行? 通过开发框架,约定开发的规范,写Demo ,让其他人理解架构意图 。

18 | 反应式编程框架设计:如何使程序调用不阻塞等待,立即响应?

反应式编程:
即时响应
回弹性
弹性
消息驱动
RxJava、Reactor 基于观察者设计模式的异步编程方案
框架Flower 的基本原理:
1、使用极少的容器线程就可以处理较多的并发用户请求 ,容器线程不会阻塞
2、Service之间通过AKKA Actor进行消息通信 , 只需要几个线程就可完成大量的Service处理和消息传输,这些线程不会阻塞等待
3、数据库的访问是提交给异步数据库驱动 ,也不会有线程阻塞
总结:有限的线程可以完成大量的并发用户请求,从而大大提高了系统的吞吐能力和响应时间;由于线程不会阻塞,应用就不会因为并发量太大或者数据库处理缓慢而宕机,从而提高了系统的可用性。
说明:Flower 框架实现异步无阻塞,一方面是利用了 Web 容器的异步特性,主要是 Servlet3.0 以后提供的 AsyncContext,快速释放容器线程;另一方面是利用了异步的数据库驱动以及异步的网络通信,主要是 HttpAsyncClient 等异步通信组件。而 Flower 框架内,核心的应用代码之间的异步无阻塞调用,则是利用了 Akka 的 Actor 模型实现。
说明:Akka Actor 的异步消息驱动实现:Sendor(也是Actor) 通过ActorRef 发送Message , Message 进入Mailbox 就返回 , Recevier(也是Actor) 从Mailbox 拿消息进行处理。
Flower的设计方法 :
只要实现一些细粒度的Service即可, Service 会被包装到Actor里面; 通信关系通过流程编排
Flower 的落地效果也十分的优秀,课程举了两个例子 重构服务和网关应用
感想:
异步编程在高并发场景、物联网场景 会有更多的应用

19 | 组件设计原则:组件的边界在哪里?

组件内聚原则:
	复用发布等同原则  
	共同封闭原则  将那些会同时修改且为了相同目的而修改的类放到同一个组件
	共同复用原则  不要强迫一个组件的用户依赖他们不需要的东西 
组件耦合原则:
	无循环依赖原则
	稳定依赖原则
	稳定抽象原则 
组件的边界与依赖关系划分,不仅要考虑技术问题,也要考虑业务场景问题,甚至有时候还要考虑人的问题(如组件的职责和部门的职责相关)

感想:
JDBC 就是个组件设计的很好例子,java定义好接口,其他厂商提供具体实现,利用JNDI和反射加载使用。SLF4J 也是很好的例子, log4j \ logback 是具体实现

20 | 领域驱动设计:35岁的程序员应该写什么样的代码?

领域模型模式:
业务逻辑的组织方式主要是事务脚本模式, 也就是面向过程方式 , 贫血模型
领域模型是合并了行为和数据的领域的对象模型 充血模型
领域驱动设计 DDD
从领域出发,分析领域内模型及其关系,进而设计软件系统的方法
领域 、 子域 、限界上下文、集成关系
上下文映射图 、 实体(实体设计 , 值对象-描述性的)
分层架构 : 用户接口层 - 应用层 - 领域层
六边形架构:适配器 - 应用程序 - 领域模型
* CQRS 命令查询责任分离 、事件驱动 、事件溯源 *
感想:
领域驱动设计 是在更大范围将系统当做对象,进行内聚设计,聚焦核心功能,描述出系统边界

答疑丨对于设计模式而言,场景到底有多重要?

《UML精粹》马丁 这本书个人感觉对UML的学习理解确实很好,看了这本书确实能收获很多
《敏捷软件开发原则、模式与实践》 设计原则和模式在工作中基本常见,但理念的理解还是有些偏差,个人之前对敏捷管理是小步快跑,但是未将敏捷管理和敏捷软件设计紧密联系,看了李老师的解读,才发现敏捷的关键点; 另外想说的就是,有时候未读原著真是会错失一些东西 。
书的作者Bob认为,我们能够进行敏捷开发,能够快速响应需求变更,不在于什么敏捷开发过程和敏捷项目管理,而在于敏捷的软件设计
《架构整洁之道》 Bob 的又一作 ,
《企业应用架构模式》马丁

参考资料:

极客时间上李智慧老师的 《后端技术面试38讲》

手把手写C++服务器(0):专栏文章-汇总导航【持续更新】 手把手写C++服务器(1):网络编程常见误区 手把手写C++服务器(2):C/C++编译链接模型、函数重载隐患、头文件使用规范 手把手写C++服务器(3):C++编译常见问题、编译优化方法、C++库发布方式 手把手写C++服务器(4):Linux四大必备网络分析工具 手把手写C++服务器(6):编译实操——打开gcc/g++世界 手把手写C++服务器(7)——给C语言程序员看的C++科普 手把手写C++服务器(8):常用boost之program_options命令行参数解析 阅读详情

相关推荐

《UE4游戏开发》之 《查cook资源失败,问题记录》

当项目打包时,cook出错,但是从原始引擎提供的信息中,没有提示具体的那个资源出错,要查到出错资源,还是非常麻烦。 下面就材质cook出错,增加一些日志,方便查找问题做简单记录 材质cook的一个阶段,是收集MaterialShaderMap,如果在这个阶段收集的信息出错,将会在FShaderMapContent::GetOutdatedTypes函数中,因为Shaders指针指向的内存有问题而出错,通过断点发现,FShaderMapContent这个类对象指针为null,而这个类对象的来源于AllMat.

qq_21919621的博客 2580

后端技术面试38讲

内容来自极客时间专栏课 01-程序运行原理:程序是如何运行又是如何崩溃的? 存在磁盘上的代码没有价值, 运行起来才有价值 先要编译 堆是无序的内存空间 执行上下文信息 因为CPU的分时共享技术, 可以分时处理进程的信息, 多核架构也可以实现并发. CPU有运行, 就绪, 阻塞状态 当进程在CPU上运行就处于运行状态 当进程获得了除了CPU以外的资源就是CPU就绪状态, 就等他了 服务为什么会变...

qq_44291044的博客 1602

GMSL Strapping Pins CFG0/CFG1 应用

如果 0x13.bit3 = 0, 则是链路没有 Locked,需要去排查下具体问题(通常是工作模式配置问题)如果遇到 Link 无法建立(Locked),电源没有问题的情况下,多半是加串器和解串器的工作模式不匹配。芯片在上电时,会检测这两个管脚的电压,根据不同的电压值,芯片进入到不同的工作模式。一对加串器和解串器,只要工作模式匹配得当,Link Locked,便能够正常工作。ADI 已经充分考虑了用户的需求,尽可能的降低的芯片的使用和配置复杂度。GMSL 的解串器也是类似的配置,具体请参考对应的规格书。

iStoneWalker的博客 1269

读《后端技术面试38讲》--学习笔记和读后感 (一)

主要记录阅读李智慧编写的《后端技术面试38讲》课程的学习笔记和一些自己的工作和学习体会。 课程所讲的内容是比较系统性的讲了后端技术开发的技术理论,比较适合于有六七年以上开发工作经验的软件开发人员,如已经从事过一些项目的架构设计工作,则能够更系统的理解课程内容;在阅读过程中将自己的工作感悟和既往的技术学习内容,不断地表达出来,则能更充分的提升对软件工程的系统认知和表达能力。

wangchaodee的博客 293

uniapp 基于单选框多选框实现上拉触底多选/单选、回显

showPickerCheckbox弹层显示 label和value 类似下拉框的label和value一个意思 键和值。结果:可以传接口(接口只能post请求) 可以搜索 下面是结果图片展示 单选多选都可以。fieldValue回显传的值 传的是字符串 数组的话[1,2]转为1,2格式传入。mode是控制的单选还是多选 true为多选默认值 其余参数 单选多选一样。fieldName字段名 确定后会返回该字段名 根据字段名找对应的传入值。问题:在uniapp上 实现分页多选的操作。下面是组件的完整代码。

2301_76607997的博客 2936

【嵌入式DIY实例ESP32篇】-步数计数器

在本项目中,我们将使用 ESP32 微控制器和博世的 BMI160 加速度计陀螺仪模块构建一款便携式计步器

视觉与物联智能 801

后端技术面试38讲 笔记

极客时间 后端技术面试38讲 笔记1 软件的基础原理1 程序运行原理:程序是如何运行又是如何崩溃的? 1 软件的基础原理 1 程序运行原理:程序是如何运行又是如何崩溃的? 不管是文本格式的代码还是可执行的代码,都被称为程序,程序是静态的,安静地呆在磁盘上,什么也干不了。要想让程序处理数据,完成计算任务,必须把程序从外部设备加载到内存中,并在操作系统的管理调度下交给 CPU 去执行,去运行起来,才能真正发挥软件的作用,程序运行起来以后,被称作进程。 一台计算机如何同时处理数以百计的任务 我们自己日常使用的 P

qq_33898609的博客 3497

点云去噪:基于点云拟合的方法

点云处理是计算机视觉中的重要任务之一,而点云去噪是点云处理的关键步骤之一。在实际应用中,由于采集设备的噪声、运动估计误差或者环境干扰等因素,点云数据中常常包含有噪声点,这些噪声点会对后续的点云分析和处理造成不良影响。一种简单的方法是计算点到拟合曲面的距离,并将距离超过某个阈值的点定义为噪声点,进行过滤。一种简单的方法是计算点到拟合曲面的距离,并将距离超过某个阈值的点定义为噪声点,进行过滤。该方法通过拟合点云数据的曲面模型,对噪声点进行识别和过滤,从而得到更加干净的点云数据。

AuSwift的博客 638

《后端技术面试 38 讲》学习笔记 Day 01

通过学习一门覆盖面较广的课程,来夯实基础,完善自己的知识体系 总结性的学习,不求快,而求稳。这门课程的学习,我将跟随专栏的章节所讲,结合工作内容进行思考,记录并分享。欢迎大家对我的思考发起质疑,共同探讨。

过了这个村没这个老王的博客 590

YOLOv11的多任务学习:检测+分割+姿态估计-(扩展模型头部分支,实现多任务联合训练)

YOLOv11作为Ultralytics团队于2024年9月发布的最新YOLO系列模型,在前代版本基础上进行了多项架构创新,使其成为支持多任务学习的理想框架。其核心改进包括引入C2PSA(跨阶段局部自注意)模块,将跨阶段局部网络和自注意机制优势结合,使模型能够更有效地跨多层捕获上下文信息。C3k2模块取代了之前的C2f模块,作为CSP Bottleneck的自定义实现,使用两个较小卷积核而非一个大卷积核,在保持准确性的同时提高了效率。 多任务学习(Multi-Task Learning, MTL)在YOL

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 653

SpringAI系列 - MCP篇(二) - MCP Server Boot Starter

此处需注意之前的。

罗小爬的技术宝书 1316

《后端技术面试 38 讲》学习笔记 Day 08

主要手段就是使用消息队列的异步架构,有时候也被称为事件驱动架构。消息队列异步架构的主要角色包括消息生产者、消息队列和消息消费者。根据消息消费方式又分为点对点模式和发布订阅模式两种。在中,多个消息生产者向消息队列发送消息,多个消息消费者消费消息,每个消息只会被一个消息消费者消费。在发布订阅模式中,开发者可以在消息队列中设置主题,消息生产者的消息按照主题进行发送,多个消息消费者可以订阅同一个主题,每个消费者都可以收到这个主题的消息拷贝,然后按照自己的业务逻辑分别进行处理计算。

过了这个村没这个老王的博客 710

特殊通信领域场景应用:基于Simulink的数字预失真(DPD)算法仿真建模示例

增益压缩:高功率输入时输出信号的增益下降。相位失真:输入信号的相位随功率变化而改变。带外干扰:非线性失真会引入额外的频谱分量,影响邻道信号。多项式模型:用多项式拟合功率放大器的非线性特性。查找表(LUT):通过离线训练生成预失真映射表。自适应算法:实时调整预失真参数以动态补偿失真。发送端:生成随机比特流并调制为射频信号。预失真模块:对输入信号进行预失真处理。功率放大器模块:模拟非线性失真。接收端:解调信号并评估误码率(BER)。

xiaoheshang_123的博客 272

读《后端技术面试38讲》--学习笔记和读后感 (三)

主要记录阅读《后端技术面试38讲》课程的学习笔记和一些自己的工作和学习体会。 课程所讲的内容是比较系统性的讲了后端技术开发的技术理论,比较适合于有六七年以上开发工作经验的软件开发人员,如已经从事过一些项目的架构设计工作,则能够更系统的理解课程内容;在阅读过程中将自己的工作感悟和既往的技术学习内容,不断地表达出来,则能更充分的提升对软件工程的系统认知和表达能力。 本篇对架构的核心原理部分做笔记记录和随笔感想。

wangchaodee的博客 155

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

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

《软技能》读后感

前前后后花了两个月,终于挤牙膏式的把这本书读完了,书籍写的不是技术能力深入的事项, 而是以轻松文字叙述方式列出了软件开发人员所需要额软技能。这些软技能是作者根据自己经历:从参加工作到后续财务自由所积累的一些能力。作者介绍的内容比较全面,涉及范围包括如何学习、高效工作产出、营销自己、如何创业、理财、锻炼自身、强化思想等方面。 其中印象最深、感觉比较正确的有以下方面。 如何学习 当了这么

MUTOUYIHAO的专栏 864

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

读后感——只是为了好玩(Just for Fun)-Linux之父林纳斯自传

请原谅我以这么一个不知如何形容的名字作为标题,实在是不知道叫什么好。用这个比较传统的方式命名反而感觉不叫好。这本书周四到的,也就是2019年1月20日,用了昨天一天加上今早刚刚过去的这一个小时把这本书看完了。本来想昨天一口气看完的,不过晚上部门年终晚会,时间上不允许,也就只能今天收尾并写这篇文章。 就是这本书,花了我38.6.虽然不便宜,但是并经是林纳斯的自传,再加一百也没毛病。不知英文版是什么...

We do not claim to have achieved that goal in every aspect of the software, but we strive for it. 2073

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

代码之谜(四)- 浮点数(从惊讶到思考)

在『代码之谜』系列的前几篇文章中,很多次出现了浮点数。 浮点数在很多编程语言中被称为简单数据类型,其实,浮点数比起那些复杂数据类型(比如字符串)来说, 一点都不简单。 单单是说明 IEEE浮点数 就可以写一本书了,我将用几篇博文来简单的说说我所理解的浮点数,算是抛砖引玉吧。 一次面试 记得多年前我招聘 Java 程序员时的一次关于浮点数、二分法、编码的面试, 多年以后,他已经称为

justjavac(迷渡) 18万+

python 经典图书排行榜_书榜 | 计算机书籍(8.12-8.18)销售排行榜

原标题:书榜 | 计算机书籍(8.12-8.18)销售排行榜鸟欲高飞先振翅,人求上进先读书。——李苦禅"书榜"栏目是脚本之家每周推出计算机书籍销量排行榜!数据来源于京东网、当当网、有赞微小店的计算机类书籍销量排行1京东销量排行排名书名豆瓣封面1Python编程 从入门到实践( 埃里克·马瑟斯 )9.12Python从入门到项目实践(全彩版)( 明日科技)暂无3零基础学Python(全彩版)( 明日...

weixin_39942397的博客 306

python 经典图书排行榜_书榜 | 计算机书籍(8.26-9.1)销售排行榜

原标题:书榜 | 计算机书籍(8.26-9.1)销售排行榜读书贵神解,无事守章句。——徐洪钧"书榜"栏目是脚本之家每周推出计算机书籍销量排行榜!数据来源于京东网、当当网、有赞微小店的计算机类书籍销量排行1京东销量排行排名书名豆瓣封面1Python编程 从入门到实践( 埃里克·马瑟斯 )9.12机器学习( 周志华 )8.73漫画算法:小灰的算法之旅( 魏梦舒)9.04Python从入门到项目实践(全...

weixin_39544333的博客 226

小米的营销

从一家创业型公司到成为中国国产智能手机巨头,小米是如何做到五年飞速发展?也许下面的46张图能告诉我们答案!这46张图是领居小编从小米《参与感》这本书中提炼出来的精华。读懂46张图,读懂小米口碑营销。 1. 互联网思维就是口碑为王。 2.口碑的铁三角:关系链、加速器、发动机。 3. 参与感三三法则。 4. 用户模式大于一切工程模式。 5. 优先处理浮出水面的需求。 6. 用户体...

weixin_30312563的博客 187

与大象共舞:向IBM学转型(第2版)

《与大象共舞:向IBM学转型(第2版)》 基本信息 作者: 许正 [作译者介绍] 丛书名: 新经济必读丛书 出版社:机械工业出版社 ISBN:9787111412991 上架时间:2013-3-21 出版日期:2013 年4月 开本:16开 页码:272 版次:2-1 所属分类:经济管理 更多关于 》》》《与大象共舞:向IBM学转型(第2版) 》 内容简介 经济...

weixin_34161029的博客 219

KNN算法的感受 1

本来预计的打算是一天一个十大挖掘算法,然而由于同时要兼顾数据结构面试的事情,所以 很难办到,但至少在回家前要把数据挖掘十大算法看完,过个好年,在course上学习老吴的课程还是帮了我很大的忙,虽然浪费了时间,但是也无形中帮助我 很多,所以说还是很值得的,今天就总结KNN算法的一部分,这部分老吴的课程中没有太多涉及到,所以我又重新关注了一下,下面是我的总结,希望能对大家有 所帮组。 介绍...

weixin_30664615的博客 143

《后端技术面试 38 讲》学习笔记 Day 02

今日笔记,主要在于软件设计的原则理解。结合自身工作经验、感悟,希望能与读者共鸣。

过了这个村没这个老王的博客 561

《后端技术面试 38 讲》学习笔记 Day 04

接口隔离原则:不应该强迫用户依赖他们不需要的方法。通过使用接口隔离原则,我们可以将一个实现类的不同方法包装在不同的接口中对外暴露。应用程序只需要依赖它们需要的方法,而不会看到不需要的方法。使用接口隔离原则,通过多重继承的方式进行接口隔离。**使用接口隔离原则,就是定义多个接口,不同调用者依赖不同的接口,只看到自己需要的方法。**而实现类则实现这些接口,通过多个接口将类内部不同的方法隔离开来。Java5 以后版本对所有实现了 Iterable 接口的类都可以使用这种简化的 for 循环进行遍历。

过了这个村没这个老王的博客 660

《后端技术面试 38 讲》学习笔记 Day 11

程序要升级,必须要关闭进程重新启动,这段时间应用也是不可用的互联网的高可用是说,在上面各种情况下,应用都要是可用的,用户都能够正常访问系统,完成业务处理但不管是哪种方案,实现高可用需要投入的技术和设备成本都非常高。因此可用性并不是越高越好,而是要根据产品策略寻找高可用投入产出的最佳平衡点:冗余备份、失败隔离、限流降级、异地多活失败隔离的主要架构技术是消息队列。

过了这个村没这个老王的博客 369
上一篇: 读《后端技术面试38讲》--学习笔记和读后感 (一)
下一篇: 读《后端技术面试38讲》--学习笔记和读后感 (三)
 汪超
博客等级 码龄17年 65粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值