ES6学习笔记8 对象的扩展

基于R语言的现代贝叶斯统计学方法(贝叶斯参数估计、贝叶斯回归、贝叶斯计算)实践 贝叶斯统计学是一门基本思想与传统基于频率思想的统计学完全不同的统计学方法;它以其灵活性和先进性在现代的统计学中占据着重要的地位。贝叶斯统计学是开展科学研究不可缺少的重要手段,但是,因为其思想、技术和方法都与传统统计学有着较大区别;且其计算中涉及马尔科夫、蒙特卡罗和吉布斯采样等现代计算方法,对使用者经验和能力构成了很大的挑战。 阅读详情

属性的简洁表示法

ES6允许直接写入变量和函数作为对象的属性和方法

var foo = 'bar';
var obj = {foo};
obj   //{foo:"bar"}
var o = {
    method() {
        return "hello!";
    }
};

//等同于

var o = {
    method: function() {
        return "hello!";
    }
};

这种写法用于函数的返回值将会非常方便

function getPoint(){
    var x = 1;
    var y = 2;
    return {x,y};
}

getPoint();  //{x:1,y:2}

属性的赋值器(setter)和取值器(getter)也可以采用这种写法

var cart = {
    _wheels: 4,
    get wheels () {
        return this._wheels;
    },
    set wheels (value) {
        this._wheels = value; 
    }
}

如果某个方法的值是一个Generator函数,则其前面需要加上星号

const obj = {
  * m() {
    yield 'hello world';
  }
};

属性名表达式

ES6允许以字面量形式定义变量时,用表达式作为对象属性名或方法名,即把表达式放在方括号里

let propkey = "foo";

let obj = {
    [propkey] : true,

    ['a' + 'bc'] : 123,

    ['h' + 'ello'] () {
        return 'hi';
    }
};

但属性名表达式和简洁表示法不能同时使用,否则会报错

var foo = 'bar';
var bar = 'abc';
var obj = { [foo] };    //报错

//正确
var obj = {[foo]: 'abc'};

方法的name属性

方法的name属性返回方法名

const person = {
  sayName() {
    console.log('hello!');
  },
};

person.sayName.name   // "sayName"

若对象的方法使用取值函数(getter)和存值函数(setter),则name属性不在该方法上,而是在该方法属性描述符对象(descriptor)的get和set属性上,,返回值是方法名前加上get或set

const obj = {
  get foo() {},
  set foo(x) {}
};

obj.foo.name
// TypeError: Cannot read property 'name' of undefined

const descriptor = Object.getOwnPropertyDescriptor(obj, 'foo');

descriptor.get.name    //"get foo"
descriptor.set.name    //"set foo"

bind方法创造的函数,name属性返回bound加上原函数的名字;Function构造函数创造的函数,name属性返回anonymous

如果对象的方法是一个Symbol值,那么name属性返回的是这个Symbol值的描述

const key1 = Symbol('description');
const key2 = Symbol();
let obj = {
  [key1]() {},
  [key2]() {},
};
obj[key1].name // "[description]"
obj[key2].name // ""

Object.is()

该方法用于比较两个值是否是相等的,用来弥补===运算符对于两个NaN不等,以及+0和-0相等的情况

Object.is('foo','foo');    //true

Object.is({}, {});   //false
+0 === -0 //true
NaN === NaN // false

Object.is(+0, -0) // false
Object.is(NaN, NaN) // true

Object.assign()

Object.assign方法用于对象的合并,将源对象(source)的所有可枚举属性,复制到目标对象(target),如果目标对象与源对象有同名属性,或多个源对象有同名属性,则后面的属性会覆盖前面的属性

const target = { a: 1 };

const source1 = { b: 2 };
const source2 = { c: 3 };

Object.assign(target,source1,source2);
target // {a:1, b:2, c:3}

如果只有一个参数,Object.assign会直接返回,如果该参数不是对象,则会自动转换为对象。若参数是null或undefined,且其为第一个参数,则会报错。

其他类型的值(数值、字符串、布尔值)不在首参数也不会报错,但是除了字符串会以数组形式复制到目标对象外,其他值都不会产生效果。

const v1 = 'abc';
const v2 = true;
const v3 = 10;

const obj = Object.assign({}, v1, v2, v3);
console.log(obj); // { "0": "a", "1": "b", "2": "c" }

上述只有字符串才被复制的原因在于,只有字符串包装对象具有可枚举属性,而Object.assign方法只复制源对象自身的可枚举属性(不复制继承属性和不可枚举属性),属性名为Symbol值的属性也会被复制

Object.assign方法复制的对象属性是浅复制,若源对象属性是对象,则目标对象得到的是这个对象的引用

const obj1 = {a: {b: 1}};
const obj2 = Object.assign({}, obj1);

obj1.a.b = 2;
obj2.a.b // 2

Object.assign也可以用来处理数组,但是会把数组视为对象,即索引为属性名

Object.assign([1, 2, 3], [4, 5])
// [4, 5, 3]

Object.assign的用途很多,可以为对象添加属性和方法、克隆对象、合并对象、为属性指定默认值

//为对象添加属性和方法

var obj = {};
var x = 1,
    y = 2;

Object.assign(obj, {x,y}, { someMethod () {return 'abc';} });
//上述利用了简洁表示法,为obj对象添加了x,y属性和someMethod方法
//克隆对象
var objProto = Object.getPrototypeOf(obj);
var clone = Object.assign(Object.create(objProto),obj);
//上述先获取对象原型,再复制属性,保证了原对象的继承属性也被复制
//合并对象
const merge = (target, ...sources) => Object.assign(target, ...sources);
//为对象指定默认属性
var Default = {
    abc: 0,
    text: 'html'
};

function(options){
    options = Object.assign({}, Default, options);
    //....
}
//上述代码将默认属性放置在Default对象中,用户输入的属性在options对象中
//如果两者有同名属性,则options中属性会覆盖Default中的属性

属性的可枚举性和遍历

若某个属性的描述符对象中enumerable属性为false,则表示该属性不可被枚举。(关于描述符对象https://blog.youkuaiyun.com/zjw_python/article/details/79526443)。

目前有4个操作会忽略enumerable为false的属性

  • for...in循环:只会遍历对象自身和继承的可枚举属性
  • Object.keys():只返回对象自身的可枚举属性键名
  • JSON.stringify():只串行化对象自身的可枚举属性
  • Object.assign():只复制源对象自身的可枚举属性

另外,ES6 规定,所有 Class 的原型的方法都是不可枚举的。因此尽量不要使用for...in循环,而用Object.keys()代替

ES6一共有5种方法可以遍历对象的属性:
(1)for...in
遍历对象自身和继承的所有可枚举属性(不包含Symbol属性)
(2)Object.keys(obj)
遍历对象自身所有可枚举属性的键名(不包含Symbol属性)
(3)Object.getOwnPropertyNames(obj)
返回一个数组,包含对象自身的所有属性的键名(不包含Symbol属性)
(4)Object.getOwnPropertySymbols(obj)
返回一个数组,包含对象自身所有Symbol属性的键名
(5)Reflect.ownKeys(obj)
返回一个数组,包含对象自身的所有属性,不管是否可枚举或者是Symbol属性


Object.getOwnPropertyDescriptors()

Object.getOwnPropertyDescriptor方法会返回某个对象属性的描述对象(descriptor)。ES2017 引入了Object.getOwnPropertyDescriptors方法,返回指定对象所有自身属性(非继承属性)的描述对象。

const obj = {
  foo: 123,
  get bar() { return 'abc' }
};

Object.getOwnPropertyDescriptors(obj)
// { foo:
//    { value: 123,
//      writable: true,
//      enumerable: true,
//      configurable: true },
//   bar:
//    { get: [Function: get bar],
//      set: undefined,
//      enumerable: true,
//      configurable: true } }

该方法的引入目的,主要是为了解决Object.assign()无法正确拷贝get属性和set属性的问题。这是因为Object.assign方法总是拷贝一个属性的值,而不会拷贝它背后的赋值方法或取值方法

const source = {
  set foo(value) {
    console.log(value);
  }
};

const target1 = {};
Object.assign(target1, source);

Object.getOwnPropertyDescriptor(target1, 'foo')
// { value: undefined,
//   writable: true,
//   enumerable: true,
//   configurable: true }

这时,Object.getOwnPropertyDescriptors方法配合Object.defineProperties,就可以实现正确拷贝了

const target2 = {};
Object.defineProperties(target2, Object.getOwnPropertyDescriptors(source));
Object.getOwnPropertyDescriptor(target2, 'foo')
// { get: undefined,
//   set: [Function: set foo],
//   enumerable: true,
//   configurable: true }

除此之外,还可以配合Object.create方法,克隆对象属性到一个新对象

const clone =
Object.create(Object.getPrototypeOf(obj),Object.getOwnPropertyDescriptors(obj));

另外,Object.getOwnPropertyDescriptors方法可以实现一个对象继承另一个对象

//以前的写法
const obj = {
  __proto__: prot,
  foo: 123,
};

//现在
const obj = Object.create(
    prot, 
    Object.getOwnPropertyDescriptors({foo:123})
);

__proto__属性、Object.getPrototypeOf()、Object.setPrototypeOf()

__proto__属性(前后各两个下划线),用来读取或设置当前对象的prototype对象。目前,所有浏览器(包括 IE11)都部署了这个属性。

// es5 的写法
const obj = {
  method: function() { ... }
};
obj.__proto__ = someOtherObj;

// es6 的写法
var obj = Object.create(someOtherObj);
obj.method = function() { ... };

Object.setPrototypeOf方法的作用与__proto__相同,用来设置一个对象的prototype对象,返回参数对象本身。它是 ES6 正式推荐的设置原型对象的方法。

//格式
Object.setPrototypeOf(object, prototype);
//示例
const obj = Object.setPrototypeOf({}, null);

第一个参数若不是对象,则自动会转换为对象。若第一个参数为null或undefined,就会报错

Object.getPrototypeOf()用于获取对象的原型

Object.getPrototypeOf(obj);

super关键字

this关键字总是指向函数所在的当前对象,ES6又新增了另一个类似的关键字super,指向当前对象的原型对象

const proto = {
  foo: 'hello'
};

const obj = {
  foo: 'world',
  find() {
    return super.foo;
  }
};

Object.setPrototypeOf(obj, proto);
obj.find() // "hello"

值得注意的是,super关键字表示原型对象时,只能用在对象的方法之中,且必须使用对象方法的简写形式才可以让JavaScript 引擎确认,定义的是对象的方法,否则会报错。

// 报错
const obj = {
  foo: super.foo
}

// 报错
const obj = {
  foo: () => super.foo
}

// 报错
const obj = {
  foo: function () {
    return super.foo
  }
}

Object.keys(),Object.values(),Object.entries()

Object.keys()返回一个数组,包含对象自身所有可枚举属性的键名。Object.values()则是返回对象自身所有可遍历对象的键值。类似的Object.entries()返回键值对。

var obj = {foo:'bar', num: 42};

Object.keys(obj);    //["foo" , "num"];
Object.values(obj);   //["bar", 42];
Object.entries(obj);  //[ ["foo","bar"], ["num", 42] ]

对象的扩展运算符

对象的扩展运算符用于从一个对象取值,相当于将目标对象自身的所有可遍历的(enumerable)、但尚未被读取的属性,分配到指定的对象上面。

let z = { a: 3, b: 4 };
let n = { ...z };
n // { a: 3, b: 4 }

在解构赋值中,扩展运算符必须是最后一个参数,否则会报错。解构赋值的拷贝是浅拷贝,若属性值是一个对象,而只是拷贝的这个对象的引用。

let { x, y, ...z } = { x: 1, y: 2, a: 3, b: 4 };
x // 1
y // 2
z // { a: 3, b: 4 }

扩展运算符可用于合并两个对象,与Object.assign方法类似,后面的属性会覆盖前面的属性

let ab = { ...a, ...b };
// 等同于
let ab = Object.assign({}, a, b);

如果扩展运算符的参数对象之中,有取值函数get,这个函数是会执行的

// 会抛出错误,因为 x 属性被执行了
let runtimeError = {
  ...a,
  ...{
    get x() {
      throw new Error('throw now');
    }
  }
};

Null传导运算符

Null传导运算符简化了读取对象内部某个属性时,对该对象是否存在的判断。例如对message.body.user.firstName读取,可使用

const firstName = message?.body?.user?.firstName || 'default';

上述代码中,只要有一个?.运算符返回null或undefined,则就不载向下运算,而是返回undefined

该运算符有4种用法

  • obj?.prop:读取对象属性
  • obj?.[expr]:读取对象属性
  • func?.(...args):函数或方法的调用
  • new C?.(...args):构造函数的调用

深度学习在移动开发中的应用:实时姿态估计实战 我们将使用TensorFlow Lite框架,结合专为移动端优化的MoveNet模型,实现一个能够在主流Android设备上达到30FPS的多人姿态跟踪解决方案,并深入探讨其优化技巧和实际应用场景。特别是3D姿态估计、多人长期跟踪等前沿技术的发展,将进一步推动移动端姿态估计技术的应用深度和广度。在下一篇文章中,我们将探讨深度学习在移动端的另一个创新应用:实时手势识别,包括如何在资源受限的环境中实现复杂手势的实时识别,以及这项技术在AR/VR交互、智能家居控制等场景中的应用。第四部分:典型应用场景实现。 阅读详情

相关推荐

【正点原子I.MX6U-MINI移植篇】Ubuntu-base根文件系统移植构建过程详解(四)

能不能在ARM板上运行Ubuntu呢?答案肯定是可以的,Ubuntu是Linux系统的一种,可以简单的将Ubuntu理解为一个根文件系统,和我们用busybox、buildroot制作的根文件系统一样。因此移植Ubuntu也就是将Ubuntu根文件系统移植到我们的开发板上。

果果小师弟的博客 3768

七自由度模型与车辆动力学仿真实践

车辆动力学仿真是现代汽车研发的核心技术,通过建立精确的数学模型来预测车辆在各种工况下的动态响应。七自由度模型作为行业标准,能准确模拟车身运动与车轮旋转的耦合效应,其关键在于魔术公式轮胎模型的应用。在工程实践中,数值积分方法的选择直接影响仿真精度,如龙格-库塔法相比欧拉法能显著降低误差。随着技术进步,数据驱动的混合建模方法正在兴起,结合传统物理模型与LSTM神经网络的优势。这些技术在硬件在环(HIL)系统中面临实时性挑战,需要FPGA加速等解决方案。

weixin_30615767的博客 538

别再硬啃C代码了!用Simulink的Matlab Function模块手把手教你搭建CRC8校验模型(附完整M脚本)

本文详细介绍了如何利用Simulink的Matlab Function模块轻松实现CRC8校验模型,替代传统的C代码编写。通过可视化建模和即时验证,开发者可以高效完成算法设计,并自动生成嵌入式代码。文章包含完整的M脚本示例和工程实践技巧,特别适合嵌入式系统开发人员提升工作效率。

weixin_42520661的博客 183

Es6 复阅(13)(部分是非es6的) --对象的扩展(3)原型对象,扩展运算符

super 指向当前对象的原型对象 const proto = { foo:'hello' } const obj = { foo:'world', find(){ return super.foo; } } Object.setPrototypeOf(obj,proto); let res = obj.find(); console.lo...

weixin_43910427的博客 188

AHB—SRAMC项目(结构图,核心代码、Testbench架构)

文章目录一、AHB_SRAMC项目介绍1.1.AHB总线控制单元(ahb_slv_if.v)1.2.SRAM控制单元(sramc_top.v)1.3.主要的传输路径二、结构框图2.1.AHB_SRAMC结构图(重点)2.2.总线控制单元与SRAM控制单元结构图三、部分核心代码(重点理解)四、SystemVerilog Testbench架构(重点)五、目录结构 一、AHB_SRAMC项目介绍 本项...

Mr.翟的博客 3万+

YOLOv8多传感器融合技术——毫米波雷达融合技术详解

本文介绍了YOLOv8与毫米波雷达融合技术在自动驾驶系统中的应用。毫米波雷达具有全天候工作、测距测速精准等优势,但存在分辨率低等局限。通过融合YOLOv8的视觉检测能力,可显著提升系统在恶劣环境下的感知性能。文章详细阐述了融合实现方法,包括雷达数据处理、目标投影匹配、置信度融合等关键技术,并提供了评估指标和应用场景分析。这种多传感器融合方案能有效弥补单一传感器的不足,为自动驾驶提供更可靠的环境感知能力,是实现高级别自动驾驶的重要技术支撑。

u010117029的博客 175

ES6中对象的扩展

1. 属性的简洁表示法 2. 属性名表达式 3. 方法的 name 属性 4. 属性的可枚举性和遍历 5. super 关键字 6. 对象的扩展运算符 ES6对对象进行了重大的升级,具体包括下面: 1. 属性的简洁表示法 const foo = 'bar'; const baz = {foo}; baz // {foo: "bar"} // 等同于 const baz = {foo: foo};...

zsl15039718107的博客 407

我的世界进阶模组开发教程——制作机械动力附属模组

摘要: Create是Minecraft的机械动力模组,其代码结构分为多个关键模块: 数据生成系统:通过CreateRecipeProvider基类实现配方自动化生成,支持多步骤序列化装配配方(SequencedAssemblyRecipeGen),采用建造者模式链式调用; 注册管理:CreateRegistrate扩展了Registrate库,统一管理方块、流体、实体等注册,集成标签页分类和工具提示定制; 伤害系统:DamageTypeTagGen为机械伤害(如钻头、风扇火焰)定义原版兼容的标签; 客户端

qq_24992377的博客 2083

如何理解 (object.getName = object.getName)() 这段代码?

1. 此段代码出自《JavaScript高级程序设计(第3版)》 p.183,代码片段如下: var name = "The Window"; var object = { name : "My Object", getName: function(){ return this.name; } }...

weixin_33849942的博客 874

【图像去噪】基于偏微分方程(PDE)实现图像去噪附matlab代码

在工程应用中,图像信息通过数字图像系统进行处理、存储和传输等加工变换时,由于不可避免地受到噪声干扰,使得原始图像信息产生偏差和失真,给图像的后续处理带来不便,进而影响人们对图像视觉特性的认知程度。因此,为了改善图像的质量效果,提高人们对图像视觉特性的认知度,对图像噪声进行有效去除,降低噪声对图像信息的干扰是很有必要的。近年来,基于偏微分方程( partial differential equation,PDE) ​的图像去噪方法在计算机视觉和图像处理等技术领域得到了广泛的重视,因为它在平滑噪声的同时,能够很

qq_59747472的博客 855

Java炫酷烟花③(完整代码)

Java语言实现炫酷烟花动画的完整代码。 下载代码 下载链接:我是一只有趣的兔子,感谢你的喜欢。

AIGC 784

面试题精讲

1、javascript的typeof返回哪些数据类型 object number function boolean underfind string  typeof isNaN     检测数组的几种方式: Array.isArray(); es5 toString.call([]);//”[object Array]” var arr=[]; arr.constructor

延宾的博客 8509

OpenHarmony电源管理驱动架构剖析:HDI框架下的低功耗实现

鸿蒙电源管理驱动模块是OpenHarmony操作系统中负责设备电源状态管理的核心组件。该模块基于HDI(Hardware Device Interface)框架实现,提供了完整的电源管理功能,包括系统休眠/唤醒、运行锁管理、休眠模式控制等核心功能。public:// 主要接口函数// 运行锁管理private:// 内部辅助函数// 成员变量public:// 运行锁控制接口// 回调管理private:// 内部辅助函数。

m0_67505153的博客 209

ES6学习笔记8:Math对象的扩展

在ES6中,Math对象上新增了17个与数学相关的方法,这些方法只能在Math对象上调用。 Math对象的扩展 Math.trunc() 基本用法 Math.trunc()方法用于去除一个数的小数部分,返回整数部分。 console.log(Math.trunc(4.1)); // 4 console.log(Math.trunc(4.9)); // 4 console.log(Math.tr...

W先生 384

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

ES6学习笔记(8)----对象的扩展

参考书《ECMAScript 6入门》 http://es6.ruanyifeng.com/ 对象的扩展 1.属性名的简洁表示法 : ES6允许在代码中直接写变量,变量名是属性名,变量值是属性值。 ...

whiteGay的博客 459

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

ES6尚硅谷学习笔记

B站ES6尚硅谷课程学习笔记

presentD的博客 742

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

ES6学习笔记二

1. set ES6提供的新的数据结构。类似于数组,但成员的值是唯一的,集合实现iterator接口。所以可以使用扩展运算符和`for...of...`进行遍历 1) set的声明和api //声明set let set1=new Set(); let set2=new Set(['黑猫','白猫','胖猫','瘦猫']); //元素个数 console.log(set2.size) //添加元素 set2.add('橘猫'); //

xiaojiango0的博客 1360

ES6入门学习笔记

ES6学习笔记 学习开课吧 石川老师视频教程 兼容性 各大浏览器的最新版本,对 ES6 的支持可以查看kangax.github.io/compat-table/es6/。随着时间的推移,支持度已经越来越高了,超过 90%的 ES6 语法特性都实现了。 ES6(ES2015)——IE10+、Chorme、FirFox、移动端、NodeJS 编译转换: 在线转换 提前编译(babel==brows...

hen1183392934的博客 339

ES6标准入门(阮一峰)学习笔记06第8章数组的扩展,扩展运算符,解构赋值结合,函数的返回值,字符串,实现Iterator接口的对象,各种方法,数组的空位

1、扩展运算符spread… …将一个数组转为都好分隔的参数序列 <script> let arry=['hello','world','!'] console.log(arry)//(3) ["hello", "world", "!"] console.log(...arry)//hello world ! </script> 该运算符主要用于函数调用 <script> let myArray=[] function push (arry,...i

weixin_43745804的博客 296

ES6前端学习笔记

标准委员会最终决定,标准在每年6月正式发布并作为当年的正式版本,接下来的时间里就在此版本的基础上进行改动,直到下一年6月草案就自然变成新一年的版本,这样一来就无需以前的版本号,只要用年份标记即可。:粘连修饰符,确保匹配必须从剩余的第一个位置开始全局匹配(与。定义:对一类具有共同特征的事物的抽象(构造函数语法糖)互不兼容,目前解决方案是将两者分开,采用各自的加载方案。,才用了一年,按照这样的定义下去,那不是很快就。(返回的正则表达式会忽略原正则表达式的修饰符),所有在类中定义的属性方法都会被实例继承。

实力派,无需多言! 1137

ES6学习笔记

一、概述 1、什么是ECMA Ecma国际(Ecma International)是一家国际性会员制度的信息和电信标准组织。1994年之前,名为欧洲计算机制造商协会(European Computer Manufacturers Association)。总的来说,ECMA是一个组织,同时也是一个标准。 ECMAScript简称ECMA或ES

weixin_51576225的博客 2230

学习笔记之ES6

来源: http://es6.ruanyifeng.com/#README

小于零等于二的博客 1850

ES6新特性学习笔记

学习笔记,仅供自己回忆时参考

scorpio的博客 6396

学习笔记:ElasticSearch搜索引擎

Elastic表示可伸缩、灵活的意思。结构化数据:按特定结构和组织管理数据,一般表现为二维表结构(比如用户数据,包括用户姓名、年龄、身份证号)。可以保存到关系型数据库(MySQL、Oracle),优点是方便管理和查询,缺点是扩展难非结构化数据:无法用二维表结构表现的数据(如服务器日志、通信记录、文档、报表、视频、图片等)。维度广数据量大,数据存储查询成本大,需要专业人员和大量统计模型进行处理,一般会将这类数据存储于NoSQL数据库中(MongoDB、Redis、Hbase),一般按KV结构进行保存。

qq_45867699的博客 819

全栈之路——前端(一):ES6之函数的扩展

学习笔记。

whu_three的博客 1947

2024年最新ES6-ES11学习入门,2024年最新前端面试题整理

阿里十分注重你对源码的理解,对你所学,所用东西的理解,对项目的理解。开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】函数参数默认值8、rest参数概述:ES6 引入 rest 参数,用于获取函数的实参,用来代替 arguments;rest 参数必须要放到参数最后rest参数9、扩展运算符介绍:… 扩展运算符能将数组转换为逗号分隔的参数序列;『扩展运算符』 可以对 集合实现了 iterator接口的对象操作扩展运算符(spread)也是三个点(…)。

2401_84619467的博客 996
上一篇: ES6学习笔记7 数组的扩展
下一篇: ES6学习笔记9 Symbol、Set和Map
PAT-python-zjw
博客等级 码龄10年 381粉丝 408原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值