js--编写可维护的JavaScript-2.编程实践

掌握JavaScript异步操作:then.js实践 在JavaScript中,异步编程是处理耗时任务如网络请求、文件读写等不可或缺的一部分。它允许程序在等待一个耗时操作完成时,继续执行其他任务,而不是让整个程序停滞不前。这提高了程序的响应性和效率,因为用户界面在操作进行时能够保持响应。为了更好地管理异步操作,传统的回调函数虽然简单,但它们导致了代码难以维护和理解,尤其是在多个异步操作相互依赖时。这时,Promise作为一种更高级的抽象,开始在异步编程中扮演重要角色。then.js是一个为解决Promise链式调用和错误处理机制的简化而设计的库。 阅读详情

阅读编写可维护的JavaScript一书,写了一些笔记
1.编程风格
http://blog.youkuaiyun.com/github_34514750/article/details/51146963
2.本篇文章:编程实践

第五章:UI层的松耦合

将css从JavaScript中抽离
js改变样式常会直接修改DOM元素的style属性,但是其实样式最好尽可能的保持在CSS中,最好操作CSS的className

// 不好的写法
element.style.color = "red";
// 好的写法-原生方法
element.className += "reveal";
// 好得写法-HTML5
element.classList.add("reveal");
// 好得写法-jQuery
$(element).addClass("reveal");
//css中
.reveal{
    color:red;
}

将JavaScript从HTML中抽离
尽量不要在HTML中绑定on事件
将HTML从JavaScript中抽离

第六章:避免使用全局变量

全局变量带来的问题
命名冲突
代码的脆弱性(依赖全局变量的函数深耦合于上下文环境,一旦环境改变,可能发生问题)
难以测试(依赖于很多全局变量,没办法进行模块测试)
单全局变量方式
eg:jQuery定义了两个全局对象,$和jQuery,只有当$被其他库使用,才用jQuery
命名空间
命名空间:通过全局对象的单一属性表示的功能性分组
js我们就可以通过使用对象创建自己的命名空间

var books = {};
// a书的命名空间
books.a = {};
// b书的命名空间
books.b = {};

零全局变量
这种场景应用于完全不被其他脚本访问到的完全独立的脚本–实现方法就是:用立即执行函数调用并将所有脚本放置其中

// 这段立即执行的代码传入了window对象,因此不需要直接引用任何全局变量
// 若不修改window或doc中变量且都用var定义关键字,则不会产生任何全局变量
(function(win){
     // 设置严格模式来避免创建全局变量,当然全体是浏览器支持严格模式
     "use strict"
    var doc = win.document;
    // 其他变量和其他相关代码
}(window));
第七章:事件处理

事件触发时,event对象会作为回调参数传入事件处理程序
典型用法

// 这段代码问题:
// 事件处理程序包含了应用逻辑,应用逻辑是和应用相关的功能性代码,和用户行为无关
function handleClick(event) {
    var popup = document.getElementById("popup");
    popup.style.left = event.clientX + "px";
    popup.style.top = event.clientY + "px";
    popup.className = "reveal";
}

addListener(element,"click",handleClick);

应用抽离的好处
将此逻辑抽离出来,因为说不定用户的其他行为可能希望触发同一段逻辑(比如用户在键盘中敲入了什么,或者鼠标移到了什么地方)
即同段代码不用于耦某个特定事件的触发

应用逻辑抽离
1.将应用逻辑放在单独的一个函数中
2.并且这个函数很有可能挂载在该应用定义的一个全局对象上

var MyApplication = {
    handleClick:function(event) {
        this.showPopup(event);
    }
    // 好得api对于期望和依赖是透明的,但是这里却用event,不告诉用哪些参数
    // 测试起来不方便,还需要重新创建一个event对象才可以有参数传入
    showPopup:function(event) {
        var popup = document.getElementById("popup");
        popup.style.left = event.clientX + "px";
        popup.style.top = event.clientY + "px";
        popup.className = "reveal";
    }
};


addListener(element,"click",function(event) {
    MyApplication.handleClick(event);
});

不要分发事件对象
上述代码中event对象被无节制的分发,处理函数–>MyApplication.handleClick–>MyApplication.showPopup()

var MyApplication = {
    // 最好让事件处理程序作为接触到event对象的唯一函数
    handleClick:function(event) {
        this.showPopup(event.clientX,event.clientY);
    }
    // 好得api对于期望和依赖是透明的,这里就透明
    // 测试起来方便,给出任意x,y即可
    showPopup:function(x,y) {
        var popup = document.getElementById("popup");
        popup.style.left = x + "px";
        popup.style.top = y + "px";
        popup.className = "reveal";
    }
};


addListener(element,"click",function(event) {
    MyApplication.handleClick(event);
});
// 很好的调用,测试也方便
MyApplication.showPopup(10,10);

进入应用逻辑之前针对event对象执行必要的操作(包含阻止默认事件和阻止事件冒泡)

var MyApplication = {

    handleClick:function(event) {
        // 假设时间支持DOM level2,阻止默认和冒泡
        event.preventDefault();
        event.stopPropagation();
        this.showPopup(event.clientX,event.clientY);
    }
    showPopup:function(x,y) {
        var popup = document.getElementById("popup");
        popup.style.left = x + "px";
        popup.style.top = y + "px";
        popup.className = "reveal";
    }
};


addListener(element,"click",function(event) {
    MyApplication.handleClick(event);
});
第八章:避免空比较
编写可维护的JavaScript(中文) 《编写可维护的JavaScript》向开发人员阐述了如何在团队开发中编写具备高可维护性的JavaScript代码,书中详细说明了作为团队一分子,应该怎么写JavaScript。本书内容涵盖了编码风格、编程技巧、自动化、测试等几方面,既包括具体风格和原则的介绍,也包括示例和技巧说明,最后还介绍了如何通过自动化的工具和方法来实现一致的编程风格。   《编写可维护的JavaScript》作者Nicholas C. Zakas是顶级的Web技术专家,也是《JavaScript高级程序设计》一书的作者。他曾是Yahoo!的首席前端开发工程师,在完成了从一名“独行侠”到“团队精英”的蜕变后,他站在前端工程师的角度提炼出众多的最佳编程实践,其中包括很多业内权威所推崇的最佳法则,而这些宝贵经验正是本书的核心内容。   《编写可维护的JavaScript》适合前端开发工程师、JavaScript程序员和学习JavaScript编程的读者阅读,也适合开发团队负责人、项目负责人阅读。运用本书中讲述的技巧和技术,可以使JavaScript团队编程从侠义的个人偏好的阴霾走出来,走向真正的高可维护性、高效能和高水准。 第一部分 编程风格 第1章 基本的格式化 1.1 缩进层级 1.2 语句结尾 1.3 行的长度 1.4 换行 1.5 空行 1.6 命名 1.6.1 变量和函数 1.6.2 常量 1.6.3 构造函数 1.7 直接量 1.7.1 字符串 1.7.2 数字 1.7.3 null 1.7.4 undefined 1.7.5 对象直接量 1.7.6 数组直接量 第2章 注释 2.1 单行注释 2.2 多行注释 2.3 使用注释 2.3.1 难于理解的代码 2.3.2 可能被误认为错误的代码 2.3.3 浏览器特性hack 2.4 文档注释 第3章 语句和表达式 3.1 花括号的对齐方式 3.2 块语句间隔 3.3 switch语句 3.3.1 缩进 3.3.2 case语句的“连续执行” 3.3.3 default 3.4 with语句 3.5 for循环 3.6 for-in循环 第4章 变量、函数和运算符 4.1 变量声明 4.2 函数声明 4.3 函数调用间隔 4.4 立即调用的函数 4.5 严格模式 4.6 相等 4.6.1 eval() 4.6.2 原始包装类型 第二部分 编程实践 第5章 UI层的松耦合 5.1 什么是松耦合 5.2 将JavaScript从CSS中抽离 5.3 将CSS从JavaScript中抽离 5.4 将JavaScript从HTML中抽离 5.5 将HTML从JavaScript中抽离 5.5.1 方法1:从服务器加载 5.5.2 方法2:简单客户端模板 5.5.3 方法3:复杂客户端模板 第6章 避免使用全局变量 6.1 全局变量带来的问题 6.1.1 命名冲突 6.1.2 代码的脆弱性 6.1.3 难以测试 6.2 意外的全局变量 避免意外的全局变量 6.3 单全局变量方式 6.3.1 命名空间 6.3.2 模块 6.4 零全局变量 第7章 事件处理 7.1 典型用法 7.2 规则1:隔离应用逻辑 7.3 规则2:不要分发事件对象 第8章 避免“空比较” 8.1 检测原始值 8.2 检测引用值 8.2.1 检测函数 8.2.2 检测数组 8.3 检测属性 第9章 将配置数据从代码中分离出来 9.1 什么是配置数据 9.2 抽离配置数据 9.3 保存配置数据 第10章 抛出自定义错误 10.1 错误的本质 10.2 在JavaScript中抛出错误 10.3 抛出错误的好处 10.4 何时抛出错误 10.5 try-catch语句 10.6 错误类型 第11章 不是你的对象不要动 11.1 什么是你的 11.2 原则 11.2.1 不覆盖方法 11.2.2 不新增方法 11.2.3 不删除方法 11.3 更好的途径 11.3.1 基于对象的继承 11.3.2 基于类型的继承 11.3.3 门面模式 11.4 关于Polyfill的注解 11.5 阻止修改 第12章 浏览器嗅探 12.1 User-Agent检测 12.2 特性检测 12.3 避免特性推断 12.4 避免浏览器推断 12.5 应当如何取舍 第三部分 自动化 第13章 文件和目录结构 13.1 最佳实践 13.2 基本结构 第14章 Ant 14.1 安装 14.2 配置文件 14.3 执行构建 14.4 目标操作的依赖 14.5 属性 14.6 Buildr项目 第15章 校验 15.1 查找文件 15.2 任务 15.3 增强的目标操作 15.4 其他方面的改进 15.5 Buildr任务 第16章 文件合并和加工 16.1 任务 16.2 行尾结束符 16.3 文件头和文件尾 16.4 加工文件 第17章 文件精简和压缩 17.1 文件精简 17.1.1 使用YUI Compressor精简代码 17.1.2 用Closure Compiler精简 17.1.3 使用UglifyJS精简 17.2 压缩 17.2.1 运行时压缩 17.2.2 构建时压缩 第18章 文档化 18.1 JSDoc Toolkit 18.2 YUI Doc 第19章 自动化测试 19.1 YUI Test Selenium引擎 19.1.1 配置一台Selenium服务器 19.1.2 配置YUI Test Selenium引擎 19.1.3 使用YUI Test Selenium引擎 19.1.4 Ant的配置写法 19.2 Yeti 19.3 PhantomJS 19.3.1 安装及使用 19.3.2 Ant的配置写法 19.4 JsTestDriver 19.4.1 安装及使用 19.4.2 Ant的配置写法 第20章 组装到一起 20.1 被忽略的细节 20.2 编制打包计划 20.2.1 开发版本的构建 20.2.2 集成版本的构建 20.2.3 发布版本的构建 20.3 使用CI系统 20.3.1 Jenkins 20.3.2 其他CI系统 附录A JavaScript编码风格指南 附录B JavaScript工具集 立即下载

相关推荐

编写可维护的javascript中文完整版

JavaScript 最佳实践:如何写出更可靠、更高性能的代码

通常,说代码“可维护”就意味着它具备如下特点。容易理解:无须求助原始开发者,任何人一看代码就知道它是干什么的,以及它是怎么实现的。符合常识:代码中的一切都显得顺理成章,无论操作有多么复杂。容易适配:即使数据发生变化也不用完全重写。容易扩展:代码架构经过认真设计,支持未来扩展核心功能。容易调试:出问题时,代码可以给出明确的信息,通过它能直接定位 问题。能够写出可维护的 JavaScript 代码是一项重要的专业技能。

不定时分享最优质的网络技术与教程,满满的干货。 610

编写可维护的JavaScript中文完整版

1.作者是大名鼎鼎的NicholasZakas,他是《JavaScript高级程序设计》、《Ajax高级程序设计》和《高性能JavaScript》的作者。在业界很有知名度和影响力,畅销书作者。 2.本书是第一本集中关注编程风格和最佳实践的JavaScript技术图书。 3.本书得到国内外众多知名前端工程师的推荐和好评。中文版由淘宝UED团队负责翻译,质量可靠,著译双馨

编写可维护的JavaScript

编写可维护的Javascript

qq_48701993的博客 672

编写可维护的JavaScript中文版【高清】

第一次下1分,以后再下载本资源免费 【本资源为2017最新版】

【远控使用】Cobalt Strike横向渗透域控

categories: 知识积累 top: FALSE copyright: true abbrlink: 1643719980 #date: '2021-8-7 12:00:00' #description:1400x780 tags: 内网渗透 提权 渗透测试 黑客工具photos: https://gitee.com/gylq/cloudimages/raw/master/img/image-20210826182104275.png 前言 Cobalt Strike.

孤桜懶契 2704

AIGC工具测评:千笔·降与Checkjie提升论文写作效率

AIGC(人工智能生成内容)工具正逐渐成为学术写作的重要辅助手段,其核心原理基于自然语言处理(NLP)和机器学习技术。通过语义解析、风格迁移和异常检测算法,这些工具能显著提升写作效率与内容质量。千笔·降AIGC助手擅长学术语言转换与术语优化,特别适合中文期刊写作;而Checkjie则在跨模态检测与反查重方面表现突出,更适配国际期刊需求。对于研究生而言,合理使用这类工具可节省50%以上的写作时间,同时确保内容的专业性与原创性。实际应用中,建议根据写作场景(如开题报告、英文论文、期刊返修等)灵活选择工具组合,并

weixin_34384557的博客 415

ONNC Open Neural Network Compiler 开源神经网络编译器 一个 开源、模块化、可重用编译器算法和工具链的库,专门针对深度学习加速器(DLA)部署导入ONNX模型

ONNC是一个集合了开源、模块化、可重用编译器算法和工具链的库,专门针对深度学习加速器(DLA)。ONNC从底层开始构建,旨在将ONNX中间表示(IR)翻译成专有DLA代码。其软件架构设计强调可移植性和可重用性,从而简化了开发新后端的工作。上图展示了ONNC软件栈的顶层框图。软件栈从导入ONNX计算图模型到输出相应的硬件二进制文件,展示了各个功能块。

万有文的博客 1997

编写可维护的JavaScript-编程实践

UI层的松耦合1.将JavaScript从css中抽离出来;现在大部分已经不支持; 2. 将css从JavaScript中抽离出来。 不要直接在js内添加样式;如:e.style.color="red"; 可以使用更改类名的方式来动态的修改样式。如:e.className=”css” javascript不应直接操作样式,以便保持和css的松耦合。 3.将JavaScript从Ht

PresByter的博客 400

LRTimelapse Pro v7.0.0 激活版下载安装教程 (延迟摄影后期渲染)

LRTimelapse Pro 是一款优秀的高级延时摄影解决方案,使用将为用户提供最全面的工具和功能,从导入和组织您的延时摄影序列、视觉工作流程、在 LRTimelapse 中直接编辑和渲染、视觉去闪烁等等,功能齐全,可以使用 LRTimelapse Pro 编辑多个序列时显著提高您的效率,轻松在 LRTimelapse 中配置和使用色彩管理,进行长期延时编辑,在 LRTimelapse Pro 中使用长期工作流程。为延时编辑、关键帧、分级和渲染提供最全面的解决方案。

wyqshusan的博客 3467

Burp靶场实战:JWT签名绕过漏洞分析与利用

本文通过Burp Suite靶场实战,深入剖析了JWT签名绕过漏洞的多种攻击手法,包括签名未验证、alg:none攻击、弱密钥爆破、JWK/JKU头注入、KID路径遍历及算法混淆攻击。文章详细演示了利用过程,并提供了关键的防御指南,帮助开发和安全人员加固JWT实现,确保认证安全。

weixin_29325515的博客 598

编写可维护的javascript读后笔记(二)

编写可维护的javascript读后笔记(二)本篇主要写第二部分 编程的实践,包括八章内容。第五章 UI层的松耦合在web开发中,用户界面(User interface,UI)是有三个彼此隔离又相互作用的层定义的。 (1) HTML用来定义页面的数据和语义 (2)CSS用来给页面添加样式 创建视觉特征 (3)javascript用来给页面添加行为的。三个层面达到松耦合会给后续代码的维护带来很

summershanshan的博客 316

MAX30102心率血样模块在STM32F103芯片的程序说明

我希望你已经安装好了Keil MDK5这个软件,也安装了M3内核,可以编译一些STM32F103的一些项目下载程序后步骤: 1-按照下图找到IIC.uvprojx并打开(途中唯一绿色那个图标) 2-编译一次 3-确保0错误,0警告,下图所示 4-点击目标选项,然后找到STM32F103C8,再点debug–CMSIS****(我实际用的JTAG,用不了,选择这个CMSIS****即可)下图所示 5-下图所示,看看你的串口找到了没,找到了就点左下角的OK 6-按图上传到开发板 7-MAX30102接线方法

weixin_51357422的博客 5801

JavaScript-可维护代码编写,函数式编程与纯函数

JavaScript-可维护代码编写,函数式编程与纯函数JavaScript是函数式编程与面向对象编程的混合编程语言,加上本身一些可扩展性(比如:函数参数个数及类型的不确定),使得JavaScript非常灵活,当然也可以说非常不可控。正是这个特点,使得一个团队维护一个共同的前端项目时,JavaScript代码可能非常难以读懂。试想,你新加入一个团队,让你去读别人的代码本身就不太容易,如果团队的注释习

柒青衿的博客 2640

LTspice基础教程-024.参数扫描;step指令用法

step指令用于参数扫描,扫描步骤可以是线性的,对数的或列表。 下面介绍几种常用用法: 绘制一简单电阻分压电路,如下: 线性扫描 语法:.step param <Name> <Start Value> <Stop Value> <Increment> 例:.step param Res 20 100 20 意思是R2的阻值从20变化到100,...

gaoyong_wang的博客 3万+

4D毫米波雷达与激光雷达融合评测:3种主流融合框架在极端天气下的性能对比

本文深度评测了4D毫米波雷达与激光雷达在极端天气下的三大融合框架性能,包括前融合、特征级融合和后融合。通过实测数据对比,揭示了多传感器融合在暴雨、浓雾等恶劣环境中的显著优势,为自动驾驶感知系统提供了关键的技术参考和工程实践指南。

weixin_28677005的博客 331

【Node.js】使用 Node.js 需要了解多少 JavaScript?

总的来说,使用 Node.js 开发并不要求你掌握所有 JavaScript 的高级知识,但了解 JavaScript 的基础和异步编程的核心概念,将大大提高你的开发效率。通过不断学习和实践,你将能够利用 Node.js 构建出高效、可扩展的应用程序。希望本文能帮助你了解在学习 Node.js 之前需要掌握的 JavaScript 知识,帮助你在 Node.js 的开发路上走得更远。祝你编码愉快!

佚名程序员 1940

2026.3.10:最新claude code完美解决方案,跳过登录界面,使用国内deepseek-v4-pro进行计费

本文介绍了一种绕过Claude登录界面直接使用国内DeepSeek-V4-Pro服务的解决方案。通过npm全局安装@anthropic-ai/claude-code包,并配置5个关键环境变量:API认证令牌、基础URL(指向DeepSeek服务)、指定模型为deepseek-v4-pro、禁用非必要流量等。文中提供了4张配图辅助说明配置过程,但未展示具体内容。该方案可实现直接计费使用,无需通过官方登录流程。

拥抱具身智能,昇腾Ascend C 6520

js--编写可维护的JavaScript-1.编程风格

阅读编写可维护的JavaScript一书,写了一些笔记 1.本篇文章:编程风格 2.编程实践 http://blog.csdn.net/github_34514750/article/details/51221995第一章:基本的格式化1.缩进层次:每个层次缩进一个tab键 2.语句结尾记得加上分号,虽然js有ASI(automatic semicolon insertion)自动分号机制,

王欢的博客 706

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

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

JavaScript dom编程-在什么位置编写js代码

JavaScript dom编程-在什么位置编写js代码 在什么位置编写js代码合适呢? 总结:js代码写在head标签中,并且放在title标签后面,写在script标签中,但是最好不要直接写在script标签中,而是写在window.onload事件的function里边的函数体中最合适,参照如下写法是比较规范的写法: &lt;html&gt; &lt;head&gt; &lt;meta...

一只苟延残喘的卑微蝼蚁 852

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

JavaScript语言的网络编程

网络编程是指编写能够在计算机网络上互相通信的软件的过程。网络编程通常涉及到客户端与服务器间的数据交换与通信。主要涉及HTTP/HTTPS协议、TCP/IP协议以及WebSocket等。JavaScript作为一种广泛使用的编程语言,在网络编程中展现出了强大的能力。从客户机和服务器的基本概念,到使用Node.js、Express.js和WebSocket等技术,JavaScript为开发人员提供了丰富的工具和框架来创建高效的网络应用。

2501_90407269的博客 1142

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

读《编写可维护的JavaScript》的收获

第一部分 编程风格 第一章 基本的格式化 1.使用tab/4个空格作为一个缩进层级 2.不要省略分号 3.单行长度不超过80个字符 若单行长度超出,则手动拆成两行,通常在运算符后换行,下一行增加两个层级的缩进 在给变量赋值的时候若超出,拆分之后第二行的位置应该跟赋值运算符对齐,例如: var a = heheda + memeda +

Creabine的博客 701

JavaScript编写规范

永远遵循同一套编码规范 —— 可以参考其他规范,也可以是自己总结制定的。不管有多少人共同参与同一项目,一定要确保每一行代码都像是同一个人编写的。本文主要介绍JavaScript代码规范。

会思想的苇草i的博客 935

《编写可维护的JavaScript》核心知识点梳理

《编写可维护的JavaScript》是前端领域的一本经典著作,它系统地阐述了如何构建易于理解、修改和扩展的JavaScript代码。其核心思想可以概括为:将软件工程中的最佳实践(如代码规范、解耦、自动化)应用于JavaScript开发。

宝青书坊 1164

《编写可维护的JavaScript中文完整版》PDF下载介绍

《编写可维护的JavaScript中文完整版》PDF下载介绍 去发现同类优质开源项目:https://gitcode.com/ 《编写可维护的JavaScript中文完整版》是一部极具价值的JavaScript技术图书,由知名技术作家Nicholas Zakas撰写。该书深入探讨了JavaScript的编程风格和最佳实践,旨在帮助开发者写出更易维护、更高效的代码。 图书亮点 作者权威:作者Nic...

gitblog_06728的博客 922
上一篇: atom-添加插件
下一篇: js--DOM--2.DOM扩展
github_34514750
博客等级 码龄11年 44粉丝 198原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值