【JavaScript】JavaScript 几个标准阐述

JavaScript的起源?不同的JavaScript和引擎?JS版本发展史? 1995年,JavaScript诞生了。不得不提到它的标准ECMAScript, 它是一个语言标准,而非具体的语言。JavaScript除了名字有”Java”, 其它和Java没任何关系。Netscape为推广自家的LiveScript,命名中包含当时最流行的编程语言Java来蹭蹭热度。Netscape公司有些人可能不熟悉, 它就是早期被IE做浏览器对抗后来逐渐消亡一家公司。 阅读详情

⭐️ 本文首发自 前端修罗场(点击加入),是一个由 资深开发者 独立运行 的专业技术社区,我专注 Web 技术、Web3、区块链、答疑解惑、面试辅导以及职业发展。博主创作的 《前端面试复习笔记》(点击订阅),广受好评,已帮助多人提升实力、拿到 offer。现在订阅,私聊我即可获取一次免费的模拟面试机会,帮你评估知识点的掌握程度,获得更全面的学习指导意见!

如果将 JavaScript 比作英语,那么 ECMAScript 标准可以理解为美式英语,TypeScript可理解为英式英语。

ES5于2009年发布;ES6于2015年发布,也称ES2015;ES7于2016年发布。

下面会简述几个版本中重要的地方。

ES5

内容主要包括严格模式、JSON对象、新增Object接口、新增Array接口和Function.prototype.bind。最重要的一条可能就是严格模式的提出。

严格模式

严格模式限制了不规范的写法,让不合理的语法直接报错,提高了代码安全性与规范性。

列举几个会报错的语法/写法:

  • 为声明全局变量赋值 : ReferenceError
  • with、eval 语句:SyntaxError
  • arguments.callee()和arguments.caller():Uncaught ReferenceError - 函数参数重名:Uncaught SyntaxError `
  • 不建议使用 arguments 变量 : Uncaught SyntaxError

JSON

json 对象解析不是伴随着JavaScript的出现而产生的。在IE8更低的版本的浏览器中不能直接使用JSON解析方法。

不过,可以在浏览器中添加es5-shim.js来增加浏览器对ES5功能的支持。

Functiion.prototype.bind

ES中bind()方法比较常用。bind()方法会创建一个新函数——绑定函数。
当调用绑定函数,绑定函数会以创建它时传入bind()方法的第一个参数作为this,以传入bind()方法的第二个以及以后的参数和绑定函数运行时本身的参数按照顺序作为原函数的参数来调用。

const fun = function(param) {
  console.log(this+ ':' + param)
};

let funNew = fun.bind('name','zhang');
funNew(); // 'name:zhang'

ES6

关于es6->es5的方法,附上webpack方式的链接
以及你在运行过程中可能会遇上的坑

ES6对ES5进行了补充于增强,形成了一个完整的特性集合。

例如,
● 字符串模板、集合、箭头函数、Promise、for…of循环等均是借鉴其他语言的优秀特性;
● class类和import/export模块规范 是对原有ES标准缺失特性的补充;
● 迭代器、生成器、解构赋值、函数参数等 是对原有标准特性的增强;

块级作用域变量声明关键字 let、const

let a =1;
const b = 'hello';
var A = 2;

{
let c ='c';
const d;   //uncaught syntaxError
}

console.log(c); //uncaught ReferenceError : c is nor derined 作用域问题
b = 'world' ;// Uncaught TypeError  : const声明的变量不能再次赋值

console.log(window.a || global.a) ; undefined   let、const在全局作用域下声明的变量不会作为属性添加到全局作用域对象里面
console.log(window.A || global.A);//2

几点注意:

● let、const都只能作为块级作用域变量的声明,且只能在会计作用域内生效;
● const声明的变量必须进行初始化,不能被再次修改赋值;
● let、const在全局作用域下声明的变量不会作为属性添加到全局作用域对象里面,与var不同;
● let、const的执行速度比var快65%左右;

使用场景:

● 模块内不变的引用和常量,一般使用const;
● 可变的变量或引用使用let声明;
● var仅用于声明函数整个作用域内需要使用的变量;

字符串模板

当有字符串内容和变量混合连接时,可以使用字符串模板进行更高效的代码书写并保持代码的格式和整洁性。

let name = 'zhang';
let str = '<h2> hi ,${name}</h2>';

注意:字符串模板不会压缩内部的换行与空格,而是按照实际格式输出。实际项目中,用ES6转译工具将ES6代码转为ES5,格式可能会丢失。因为在ES5中没有字符串模板格式。

箭头函数

这个短函数的声明更加方面。
注意: 箭头函数没有完整的执行上下文,因为其this和外层的this相同。它的执行上下文只有变量对象和作用域链,没有this值。
js中代码的执行上下文由变量对象、作用域链和this值组成。但箭头函数与外层执行上下文共享this值。如果需要创建具有独立上下文的函数,就不要使用箭头函数。

类

有了类,就有extends,对于开发者来说,使用class很大的好处是实现一个类的代码模块只能在一个地方定义。而以前是在代码中的任意位置去扩展基类的prototype属性。

class Animal{
constructor() {
 //......
}
}
class People extends Animal {
constructor(contents={}) {
super();
this.name = contents.name;
this.family = contents.family;
}
sayHi() {
console.log('Hello ${this.name} ${this.family}');
}
}
let boy = new People({
name: 'imagine',
family: 'xie'
});

boy.sayHi();  //Hello imagine xie

模块 module

JavaScript的模块化规范比较多,包括AMD、CMD、CommonJs,现在又多了ES6的import/export。
为了统一,选择模块开发规范时,应尽量遵循语言标准的特性。

● import/export规范

import {sayHi} from './people'; //导入
export default satHi ; //导出

循环与迭代器Iterator

循环
ES6中,除了do…while、for循环,还有for…in遍历对象(不要使用其来遍历数组,因为遍历出来的键不是数字,而且在部分浏览器器会产生乱序)

遍历数组上,可以使用for…of、map、forEach。但是遍历数组最佳的方式是for…of。另外其也能用来遍历Map 、 Set 集合。

迭代器
Interator迭代器让遍历数组、对象和集合的方式更加灵活。并且,Interator能控制每次单步循环触发的时机,不用一次遍历所有的循环。

  • 循环
const numbers = [1,2,3,4,5];
for(let number of numbers) {
	console.log(number);
}
  • 迭代器
const numbers = [1,2,3,4,5];
let iterator = numbers[Symbol.iterator]();
//Symbol.iterator相当于迭代器的接口,标识该数组/对象是可迭代的
let result = iterator.next();
console.log(result.done); //1
esult = iterator.next(); 
console.log(result.done); //2

可以看出,当循环迭代中每次单步循环操作都不一样时,使用Interator就很有用了。

可以把Interator 理解为数组或对象上的一个根据偏移来访问内存内容的游标对象,每次调用next(),遍历游标会向后移动一个地址。

生成器Generator

Generator 不是针对对象上内容的遍历控制,而是针对函数内代码块的执行控制。
我们可以使用yield关键字来分割一个函数的代码,使其成为多个不同的代码段。
每次Generator 调用next()都只会执行yield关键字之间的一段代码。

声明Generator的方式:在函数名后面加上*来与普通函数区分。

const generator = function* () {
    const numbers = [1,2,3,4,5];
    for(let number of numbers) {
       yield console.log(number);
   }
}
let result = generator();

result.next(); //1
result.next(); //2

用Generator处理异步操作

const generator = function* () {
    const numbers = [1,2,3,4,5];
    for(let number of numbers){
       yield setTimeout(function(){
console.log(number);
},3000);
   }
}
let result = generator();
let done = result.next();
while(!done.done) {
done = result.next();
}
console.log('finish');
输出结果:
finish 
1
2
3
4
5

内存泄漏情况

  • Map、Set 中存储的属性元素被直接移除;
  • 闭包函数;
  • 全局变量;
  • 对象属性循环引用;
  • DOM节点删除时未解绑事件;

promise增强类型

Promise 代表一个一部操作的执行返回状态,这个执行返回状态在Promise对象创建时是未知的,它允许为异步操作的成功或失败指定处理方法。

一般将Promise实现规范分为Promise /A+ 和 Promise /A 规范。前者是对后者的修正与增强。

如何区分两者?

  • 符合P/A+ 规范的promise实现一般以then方法为交互核心。

  • P/A+ 规范要求onFulfilled或onRejected返回promise后的处理过程必须是作为函数来调用,而且调用过程必须是异步的。

  • P/A + 规范严格定义了then方法链式调用时 onFulfilled或onRejected的调用顺序。

判断P/A+规范的主要方法是看Promise方法是否含有new Promise(function(resolve,reject){})、then、resolve、all等方法。

示例:
Promise有三种状态:

  • Fulfilled:Promise执行成功

  • Rejected:Promise执行失败

  • Pending:Promise正在执行中

let status = 1;
let promise = new Promise(function(resolve,reject){
	if(status == 1) {
		resolve('Fulfilled');
	}else {
		reject('Rejected');
	}
});

promise.then(function(msg){
	console.log('success1:'+msg);
	return msg;//将返回的状态返回给第2个then方法处理
},function(msg){
	console.log('fail1:'+msg);
	return msg;
}).then(function(msg){
	console.log('success2:'+msg);
},function(msg){
	console.log('fail2:'+msg);
});

异步嵌套

then方法可以将传入参数的返回值一直传递下去,如果是异步的场景,就可以用这种方法来解决多层回调嵌套问题。

let promise = new Promise(function(resolve){
	setTimeout(function(){
		console.log('A');
		resolve();
	},3000);
});

//使用then来链式处理流程 

promise.then(function(){
	return new Promise(function(resolve,reject){
		setTimeout(function(){
			console.log('B');
			resolve();
		},2000);
	});
}).then(function(){
	return new Promise(function(resolve,reject){
		setTimeout(function(){
			console.log('C');
			resolve();
		},1000);
	});
}).then(function(){
	return new Promise(function(resolve,reject){
		console.log('D');
	});
});

该例子中,会按照顺序依次异步输出A、B、C、D,这种情况可以通过在不同的then处理方法中返回一个新的Promise来解决。返回的Promise里面具有resolve()和reject()方法,只有当它的resolve或reject()被调用时,Promise方法才会继续执行,进入下一个then方法中操作。

Symbol

ES6中,将原本的6种基本数据类型扩展到了7种:其中Symbol就是其扩展的:null、undefined、boolean、string、number、symbol、object。

Symbol一般用作属性键值,并且能避免对象属性键的命名冲突。

let object = {};
let name = Symbol();
let family = Symbol();

object[name] = 'xie';
object[family] = 'imagine';

console.log(object);
console.log(typeof name);

输出:
这里写图片描述

因为对象的键是Symbol变量,而Symbol变量是不能被重复声明的,这种情况下对象属性定义时属性键就不会被重复定义了。

Proxy

Proxy可以用来拦截某个对象的属性访问方法,然后重载对象的"."运算符。这种方法也叫**“对象劫持”**。一部分的MVVM框架的数据更变检测就是通过该手段实现的。

let object = new Proxy({},{
	get : function(target,key,receiver) {
		console.log('getting ${key}');
		return Reflect.get(target,key,receiver);
	},
	set : function(target,key,value,receiver) {
		console.log('setting ${key}');
		return Reflect.set(target,key,value,receiver);
	}
});

object['value'] = 3;//赋值操作,会自动触发setter方法

console.log(object['value']);//取值操作,会自动触发getter方法

Reflect

Reflect 是原有对象上的一个引用代理,用于对原有对象进行赋值或取值操作。但不会触发对象属性的getter或setter调用,而是直接通过对对象进行赋值或取值操作会自动触发getter或setter方法。 具体可以看上例。

ES7

Array.prototype.includes

这是个数组方法。主要用来判断数组中是否包含某个元素。

let colors = ['red','blue','green'];
console.log(colors.includes('green'));//true

异步函数 async/await

异步函数被大家关注的比较多。因为在ES6发布时,并没有发布该函数。

const sleep = async function(para) {
    return new Promise(function(resolve, reject) {
        setTimeout(function() {
            resolve(para * para);
        }, 1000)
    })
}
const errorSleep =async function(para) {
    return new Promise(function(resolve, reject) {
        setTimeout(function() {
            reject(' ErrorSleep');
        }, 1000)
    })
}
const asyncFunction = async function() {
	const numbers = [1,2,3,4,5];
	for(let number of numbers) {
		try{
			await sleep(3000);

			console.log(number);
		}catch(err){
			console.log(err);
		}
		
	}
}

let result = asyncFunction();
console.log('finished');

异步函数的写法与Generator写法相似。区别在于async函数将Generator函数的星号 替换成async, 将yeild 替换成 await,并且少了next()的调用控制。*

我们可以认为async/await是专门用于处理Generator中异步的场景。因为Generator可以使用next()来灵活地控制整个程序流程的执行,而异步场景只是一种使用情况。

实现异步的方法

  • setTimeout
  • 事件监听
  • 观察者模式
  • $Deferred
  • promise
  • generator
  • async/await
  • 第三方async库
    …

就此,我们就简要地把JavaScript的标准进行了简述。

JavaScript测验——JavaScript支持的几种标准类型---第12关 JavaScript支持的几种标准类型 阅读详情

相关推荐

Nsight Compute内存图表实战:如何快速定位CUDA内核的内存瓶颈(附配置截图)

本文详细介绍了如何使用Nsight Compute的Memory Chart功能快速定位和诊断CUDA内核中的内存性能瓶颈。通过解析内存图表中的逻辑与物理单元节点、连线颜色含义,并结合实战案例(如低L1缓存命中率、共享内存Bank冲突、全局内存访问未合并),指导开发者从可视化数据回溯至源代码,进行精准有效的内存访问优化,从而提升GPU程序性能。

zeta9的博客 479

js的10个标准

这是一系列浏览器提供的API,包括Fetch API(用于网络请求)、Web Storage(本地存储)、Canvas(用于绘制图形)、Web Workers(用于后台线程处理)等,它们扩展了JavaScript的功能,使得其能够与浏览器环境交互。:虽然不是独立的标准,但它们是ECMAScript的一部分,用于处理异步操作,已成为现代JavaScript异步编程的标准实践。:这是Web安全的基础原则,限制了来自不同源的“document”或脚本如何交互,对JavaScript的安全执行至关重要。

aleluye的博客 841

ZEMAX知识点:坐标间断面(coordinate break)

zemax知识点:坐标间断面

weixin_47638568的博客 1万+

javascript详解

JavaScript(简称“JS”) 是一种具有函数优先的轻量级、解释型或即时编译型的编程语言。虽然它是作为开发Web页面的浏览器脚本语言而出名的(所以需要浏览器支持,相当于浏览器开放的API,不同浏览器的支持程度不同),但是它也被用到了很多非浏览器环境中,JavaScript 基于原型编程、多范式的动态脚本语言,并且支持面向对象、命令式和声明式风格。 JavaScript在1995年由Nets...

顺其自然~专栏 811

PCB印刷电路缺陷检测实战:从数据集准备到模型训练全流程解析

本文详细解析了PCB缺陷检测从数据集准备到模型训练的全流程。重点介绍了PKU-Market-PCB数据集的特点与下载方法,并提供了数据格式转换、模型选择(如YOLOv8)与训练配置的实战代码。针对PCB小目标检测的难点,文章给出了数据分析和模型优化的具体策略,帮助读者构建高效的缺陷检测系统。

weixin_29065791的博客 546

CATIA P3 V5-6R2023在Windows 11 23H2上的稳定安装与系统级配置指南

CATIA是高端制造业核心的三维参数化设计平台,其运行依赖严格的系统底层支撑。理解CATIA的BRep几何内核原理与Windows子系统(如WSL、Hyper-V)的协同机制,是保障建模稳定性与计算精度的技术前提。CATIA Run-Time Library和OpenGL硬件加速能力共同决定了曲面重建、螺纹建模等关键操作的可靠性;而.NET Framework 3.5、VC++ 2022运行库及显卡Studio驱动的精准匹配,则构成工业软件在Win11环境落地的工程基础。本文聚焦于航空、轨交、能源等领域高频

weixin_30983353的博客 629

JavaScript系列(2)--ECMAScript标准详解

JavaScript之旅第二站

欢迎来到这里,希望文章能对你有所帮助 784

蚁群算法(Ant Colony Optimization,ACO)讲解+代码实现

通常情况下,较优的解对应的路径上的信息素会被加强,而较差解对应的信息素则会减少或蒸发。的化学物质,这种物质会在蚂蚁走过的路径上留下痕迹,后续的蚂蚁会根据这些信息素的浓度来选择路径,从而形成一条从蚁巢到食物源的。在求解TSP蚁群算法中,每只蚂蚁相互独立,用于构造不同的路线,蚂蚁之间通过信息素进行交流,合作求解。的过程,该路段经过的蚂蚁越多,信息素留下的就越多,浓度越高,更多的蚂蚁都会选择这个路段。需要注意的是,蚁群算法是一种。(6)计算每只蚂蚁的总距离:遍历每只蚂蚁的路线,累加经过的城市之间的距离。

m0_73804764的博客 1万+

ECMAScript 标准:JavaScript 的基石

ECMAScript 是一种脚本语言标准,主要用于定义 JavaScript 语言的核心语法和基本对象。它是由 Ecma 国际(原名欧洲计算机制造商协会)制定的,目的是为了实现脚本语言的标准化,使得不同的浏览器和环境能够以一致的方式来解析和执行 JavaScript 代码。JavaScript 语言实际上是 ECMAScript 标准的一种实现。这就好比 ECMAScript 是建筑蓝图,而 JavaScript 是根据这个蓝图建造出来的房子。

qq_57392209的博客 848

数仓项目6.0(一)

数据同步工具种类繁多,大致可分为两类,一类是以DataX、Sqoop为代表的基于Select查询的离线、批量同步工具,另一类是以Maxwell、Canal为代表的基于数据库数据变更日志(例如MySQL的binlog,其会实时记录所有的insert、update以及delete操作)的实时流式同步工具。DataX的使用,用户只需根据数据的数据源和目的地选择相应的Reader和Writer,并将Reader和Writer的信息配置在一个json文件中,然后执行如下命令提交数据同步任务即可。

qq_58551342的博客 2847

手把手教你学simulink(16.2)--基于Simulink的高通滤波器(High-Pass Filter)项目

基于Simulink的高通滤波器(High-Pass Filter)项目的详细实例介绍。这个项目将重点放在高通滤波器的设计、实现和仿真上,帮助你理解和应用高通滤波器在信号处理中的作用。

MHD0815的博客 926

js三大组成部分

3> console.log(要显示的信息或变量)-----将显示的信息打印在控制台,不会阻止程序执行,不会解析Html标签,一次打印多个,一个console.log打印一行。(1)字符String:所有使用引号包裹的数据,引号包括:单、双、反引号------ "10";console.log("")-----空字符。(4)document.write --------------打印在页面;console.log-----打印在控制台;

m0_74175160的博客 1561

28、时间敏感网络中可靠性感知的综合路由与调度

本文针对时间敏感网络(TSN)中现有路由与调度机制主要关注时间触发(TT)流量而忽略其他类型流量效用的问题,提出了一种可靠性感知的综合路由与调度机制。通过将具有不同可靠性和延迟要求的各类流量的联合路由与调度问题形式化为基于优化模理论(OMT)的混合整数规划问题,设计了完整的路由约束与调度约束,并分析了不同类型流量的传输效用,设定了优化目标以提升整体网络性能。实验结果表明,该机制在满足TT流量严格时延与可靠性要求的同时,显著提高了AVB和BE等非关键流量的传输效用,实现了多类型流量的高效协同传输。

hhh00的博客 95

html全局标准属性有几个,javascript全局对象有哪些

在js中,使用var声明变量,但是没有进行初始化赋值,结果就为Underfined。但如果变量没有声明直接使用,则会报错,不属于Underfined。var a;// 使用 var 声明变量 a,但未赋值,a 为 Undefined// 没有声明直接使用的变量 b, 会报错我们现在先构造一个函数Person(),并在这个对象上实例化一个对象person1,//返回一个true。

wenangou的博客 164

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

Devexpress16.2.6破解工具

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

JS 里操作 DOM 的几个标准属性与方法

// 记录下 JS 操作 DOM 的几个标准属性与方法, // 关于 DOM ,一般可以把它看作一颗树来理解,因为是树,所以每个结点 // 会有唯一 一个父结点 (parentNode),当然除了根结点;每个结点还可 // 以有多个子结点 (childNodes),而所有子结点中当然会有第一个结点 // (firstChild) 和 最后一个结点 (lastChild) ,当然也要除去叶子结点; ...

变心 177

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

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

JS_里操作_DOM_的几个标准属性与方法

// 记录下 JS 操作 DOM 的几个标准属性与方法, // 关于 DOM ,一般可以把它看作一颗树来理解,因为是树,所以每个结点 // 会有唯一 一个父结点 (parentNode),当然除了根结点;每个结点还可 // 以有多个子结点 (childNodes),而所有子

wendi_0506的专栏 1173

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

新标准ES6中几个JS简化表达式语法功能解读

随着Web迅猛发展和高效进化需求,JS逐步引入了一此简短高效的语法结构,使得经松就可实现以前需要大量代码才能完JS成的功能。

m0_74157361的博客 1053

「趣学前端」JavaScript标准库

用技术实现梦想,用梦想打开创意之门。今天分享前端JavaScript标准库的知识点。

banxianongtang的博客 797

2022 年你应该尝试的 8个 JavaScript 新功能

(请注意:纳入标准并不等同于浏览器支持)PS:科普-Javascript的新语法,从提出到纳入标准一共经历下面几个stagestage-0:新语法还是一个设想,(只能由TC39成员或TC39贡献者提出)stage-1::提案阶段,比较正式的提议,只能由TC39成员发起,这个提案要解决的问题必须有正式的书面描述。stage-2:草案,有了初始规范,必须对功能语法和语义进行正式描述,包括一些实验性的实现。stage-3:候选,该提议基本已经实现,需要等待实验验证,用户反馈及验收测试通过。

2401_89161814的博客 750

1.3 传统网站 VS Web标准 - 网站重构与Web标准设计 - 学习笔记

一、Web标准1、Web标准不是某一个标准,而是一系列标准的集合。2、网页主要有三部分组成:结构、表现、行为3、对应标准的三个方面 |- 结构化标准语言主要包括 XHTML 和 XML |- 表现标准语言主要包括CSS |- 行为标准主要包括对象模型(如W3C DOM)、ECMAScript等4、其他标准 |- ECMA(European Computer Manufacturers Associ...

weixin_30480651的博客 146

Javascript-标准内置对象-值属性-globalThis-Infinity-Nan-undefined 手写实现globalThis功能

globalThis 是 ECMAScript 2020(ES11)引入的全局对象的标准化引用。在不同JavaScript 运行环境中,全局对象的名称可能不同: 浏览器中是。Node.js 中是。Web Workers 中是。使用 globalThis,你可以在任何环境中统一访问全局对象。

qq_33546823的博客 1267

火狐提前步入3D Web标准

2009-09-22 10:10:51 来源:华军资讯  作者:巧艳 编译 据国外媒体报道,可靠消息称,名为“WebGL”的绘图技术标准允许把JavaScript和OpenGL ES 2.0结合在一起,为多种浏览器提供3D加速功能,而这个技术入驻浏览器已经逐步演变为现实。   据国外媒体报道,可...

anjichan4261的博客 85

js标签 if练习

1.输入三个整数,x,y,z,最终以从小到大的方式输出。//利用嵌套。 <script type="text/javascript"> var x = prompt("请输入数字") var y = prompt("请输入数字") var z = prompt("请输入数字") if(x>y&&y>z) {alert(z+";"+...

weixin_30553837的博客 96

第1章 认识JavaScript语言和jQuery

JavaScript(简称 JS)是一种广泛用于网页和服务器端开发的编程语言。它是一种高级、解释性的语言,具有动态类型和面向对象的特性。JavaScript可用于为网页添加交互性和动态效果,在网页开发中经常用于操作 HTML 元素、处理用户输入、发送网络请求以及实现动画效果等功能。同时,JavaScript也可以在服务器端运行,通过 Node.js 等运行时环境提供后端开发能力。由于其广泛应用和灵活性,JavaScript 已经成为现代 Web 开发中的重要技术之一。

世界那么大,我要学编程看看! 170

【JavaScript】入门案例及基础操作的使用

变量是程序在内存中申请的一块用来存放数据的空间。通过变量名称我们可以使用或修改保存在系统中的对应的数据。Js 是一种弱类型或者说动态语言,不用提前声明变量的类型,变量的类型会自动判断。即使赋值之后,变量的类型根据重新赋值的数据类型同样进行改变。统一用的是“var”,赋值给var的是什么类型var就是什么类型。//例如://number数值型var str1 = '这是个字符串';//string字符串型//Boolean布尔型//true运算中代表1 false代表2//null空值型。

万维网连五洲,二进制写尽天下事,喜欢结识新伙伴寻找志同道合的朋友,欢迎一起探讨学习 432

crypto-js —— 加密标准的 JavaScript 库

crypto-js —— 加密标准的 JavaScript 库

Lyrelion的博客 1万+
上一篇: 【工具】抓包工具 Fiddler 使用教程
下一篇: 【PHP】redis扩展在php+xampp下的配置
蟹蟹蟹风流
蟹蟹蟹风流 优质创作者: 编程框架技术领域 优质创作者: 编程框架技术领域 领域专家: 前端开发技术领域 领域专家: 前端开发技术领域
博客等级 码龄11年 3万+粉丝 396原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蟹蟹蟹风流

期望和你分享一杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值