java基础:javascript面向对象的支持(2)

手把手教你用THS4551搭建全差分放大器电路(附ADC驱动实战) 本文详细介绍了如何使用TI的THS4551全差分放大器搭建高性能ADC驱动电路,涵盖芯片选型、电路配置、PCB布局及实战调试等关键环节。THS4551凭借其优异的共模抑制比和宽电源电压范围,成为驱动16位及以上精度ADC的理想选择,特别适合工业应用场景。 阅读详情

2. javascript面向对象的支持

--------
在前面的例子中其实已经讲到了object类型的“类型声明”与“实例创建”。在javascript中,我们需要通过一个函数来声明自己的object类型:
//---------------------------------------------------------
// javascript中对象的类型声明的形式代码
// (以后的文档中,“对象名”通常用myobject来替代)
//---------------------------------------------------------
function 对象名(参数表) {
  this.属性 = 初始值;

  this.方法 = function(方法参数表) {
    // 方法实现代码
  }
}


然后,我们可以通过这样的代码来创建这个对象类型的一个实例:
//---------------------------------------------------------
// 创建实例的形式代码
// (以后的文档中,“实例变量名”通常用obj来替代)
//---------------------------------------------------------
var 实例变量名 = new 对象名(参数表);


接下来我们来看“对象”在javascript中的一些具体实现和奇怪特性。

 1). 函数在javascript的面向对象机制中的五重身份
 ------
“对象名”??如myobject()??这个函数充当了以下语言角色:
  (1) 普通函数
  (2) 类型声明
  (3) 类型的实现
  (4) 类引用
  (5) 对象的构造函数

一些程序员(例如delphi程序员)习惯于类型声明与实现分开。例如在delphi中,interface节用于声明类型或者变量,而implementation节用于书写类型的实现代码,或者一些用于执行的函数、代码流程。

但在javascript中,类型的声明与实现是混在一起的。一个对象的类型(类)通过函数来声明,this.xxxx表明了该对象可具有的属性或者方法。


这个函数的同时也是“类引用”。在javascript,如果你需要识别一个对象的具体型别,你需要执有一个“类引用”。??当然,也就是这个函数的名字。instanceof 运算符就用于识别实例的类型,我们来看一下它的应用:
//---------------------------------------------------------
// javascript中对象的类型识别
//   语法:  对象实例 instanceof 类引用
//---------------------------------------------------------
function myobject() {
  this.data = 'test data';
}

// 这里myobject()作为构造函数使用
var obj = new myobject();
var arr = new array();

// 这里myobject作为类引用使用
document.writeln(obj instanceof myobject);
document.writeln(arr instanceof myobject);


 2). 反射机制在javascript中的实现
 ------
  javascript中通过for..in语法来实现了反射机制。但是javascript中并不明确区分“属性”与“方法”,以及“事件”。因此,对属性的类型考查在js中是个问题。下面的代码简单示例for..in的使用与属性识别:
//---------------------------------------------------------
// javascript中for..in的使用和属性识别
//---------------------------------------------------------
var _r_event = _r_event = /^[oo]n.*/;
var colorsetting = {
  method: 'red',
  event: 'blue',
  property: ''
}

var obj2 = {
  a_method : function() {},
  a_property: 1,
  onclick: undefined
}

function propertykind(obj, p) {
  return  (_r_event.test(p) && (obj[p]==undefined || typeof(obj[p])=='function')) ? 'event'
    : (typeof(obj[p])=='function') ? 'method'
    : 'property';
}

var objectarr = ['window', 'obj2'];

for (var i=0; i  document.writeln('

for ', objectarr[i], '


');

  var obj = eval(objectarr[i]);
  for (var p in obj) {
    var kind = propertykind(obj, p);
    document.writeln('obj.', p, ' is a ', kind.fontcolor(colorsetting[kind]), ': ', obj[p], '
');
  }

  document.writeln('');
}

一个常常被开发者忽略的事实是:javascript本身是没有事件(event)系统的。通常我们在javascript用到的onclick等事件,其实是ie的dom模型提供的。从更内核的角度上讲:ie通过com的接口属性公布了一组事件接口给dom。

有两个原因,使得在js中不能很好的识别“一个属性是不是事件”:
  - com接口中本身只有方法,属性与事件,都是通过一组get/set方法来公布的。
  - javascript中,本身并没有独立的“事件”机制。

因此我们看到event的识别方法,是检测属性名是否是以'on'字符串开头(以'on'开头的是qomo的约定)。接下来,由于dom对象中的事件是可以不指定处理函数的,这种情况下事件句柄为null值(qomo采用相同的约定);在另外的一些情况下,用户可能象obj2这样,定义一个值为 undefined的事件。因此“事件”的判定条件被处理成一个复杂的表达式:   ("属性以on/on开头" && ("值为null/undefined" || "类型为function"))

另外,从上面的这段代码的运行结果来看。对dom对象使用for..in,是不能列举出对象方法来的。

最后说明一点。事实上,在很多语言的实现中,“事件”都不是“面向对象”的语言特性,而是由具体的编程模型来提供的。例如delphi中的事件驱动机制,是由win32操作系统中的窗口消息机制来提供,或者由用户代码在component/class中主动调用事件处理函数来实现。

“事件”是一个“如何驱动编程模型”的机制/问题,而不是语言本身的问题。然而以pme(property/method/event)为框架的oop概念,已经深入人心,所以当编程语言或系统表现出这些特性来的时候,就已经没人关心“event究竟是谁实现”的了。


 3). this与with关键字的使用
 ------
 在javascript的对象系统中,this关键字用在两种地方:
   - 在构造器函数中,指代新创建的对象实例
   - 在对象的方法被调用时,指代调用该方法的对象实例

 如果一个函数被作为普通函数(而不是对象方法)调用,那么在函数中的this关键字将指向window对象。与此相同的,如果this关键字不在任何函数中,那么他也指向window对象。

 由于在javascript中不明确区分函数与方法。因此有些代码看起来很奇怪:
//---------------------------------------------------------
// 函数的几种可能调用形式
//---------------------------------------------------------
function foo() {
  // 下面的this指代调用该方法的对象实例
  if (this===window) {
    document.write('call a function.', '
');
  }
  else {
    document.write('call a method, by object: ', this.name, '
');
  }
}

function myobject(name) {
  // 下面的this指代new关键字新创建实例
  this.name = name;
  this.foo = foo;
}

var obj1 = new myobject('obj1');
var obj2 = new myobject('obj2');

// 测试1: 作为函数调用
foo();

// 测试2: 作为对象方法的调用
obj1.foo();
obj2.foo();

// 测试3: 将函数作为“指定对象的”方法调用
foo.call(obj1);
foo.apply(obj2);

在上面的代码里,obj1/obj2对foo()的调用是很普通的调用方法。??也就是在构造器上,将一个函数指定为对象的方法。

而测试3中的call()与apply()就比较特殊。

在这个测试中,foo()仍然作为普通函数来调用,只是javascript的语言特性允许在call()/apply()时,传入一个对象实例来指定foo()的上下文环境中所出现的this关键字的引用。??需要注意的是,此时的foo()仍旧是一个普通函数调用,而不是对象方法调用。

与this“指示调用该方法的对象实例”有些类同的,with()语法也用于限定“在一段代码片段中默认使用对象实例”。??如果不使用with()语法,那么这段代码将受到更外层with()语句的影响;如果没有更外层的with(),那么这段代码的“默认使用的对象实例”将是window。

然而需要注意的是this与with关键字不是互为影响的。如下面的代码:
//---------------------------------------------------------
// 测试: this与with关键字不是互为影响的
//---------------------------------------------------------
function test() {
  with (obj2) {
    this.value = 8;
  }
}
var obj2 = new object();
obj2.value = 10;

test();
document.writeln('obj2.value: ', obj2.value, '
');
document.writeln('window.value: ', window.value, '
');

你不能指望这样的代码在调用结束后,会使obj2.value属性置值为8。这几行代码的结果是:window对象多了一个value属性,并且值为8。

with(obj){...}这个语法,只能限定对obj的既有属性的读取,而不能主动的声明它。一旦with()里的对象没有指定的属性,或者with()限定了一个不是对象的数据,那么结果会产生一个异常。


 4). 使用in关键字的运算
 ------
 除了用for..in来反射对象的成员信息之外,javascript中也允许直接用in关键字去检测对象是否有指定名字的属性。

 in关键字经常被提及的原因并不是它检测属性是否存在的能力,因此在早期的代码中,很多可喜欢用“if (!obj.propname) {}” 这样的方式来检测propname是否是有效的属性。??很多时候,检测有效性比检测“是否存有该属性”更有实用性。因此这种情况下,in只是一个可选的、官方的方案。

 in关键字的重要应用是高速字符串检索。尤其是在只需要判定“字符串是否存在”的情况下。例如10万个字符串,如果存储在数组中,那么检索效率将会极差。
//---------------------------------------------------------
// 使用对象来检索
//---------------------------------------------------------
function arraytoobject(arr) {
  for (var obj=new object(), i=0, imax=arr.length; i    obj[arr[i]]=null;
  }
  return obj;
}

var
  arr = ['abc', 'def', 'ghi']; // more and more...
  obj = arraytoobject(arr);

function valueinarray(v) {
  for (var i=0, imax=arr.length; i    if (arr[i]==v) return true;
  }

  return false;
}

function valueinobject(v) {
  return v in obj;
}

这种使用关键字in的方法,也存在一些限制。例如只能查找字符串,而数组元素可以是任意值。另外,arraytoobject()也存在一些开销,这使得它不适合于频繁变动的查找集。最后,(我想你可能已经注意到了)使用对象来查找的时候并不能准确定位到查找数据,而数组中可以指向结果的下标。

 5). 使用instanceof关键字的运算
 ------
 在javascript中提供了instanceof关键字来检测实例的类型。这在前面讨论它的“五重身份”时已经讲过。但instanceof的问题是,它总是列举整个原型链以检测类型(关于原型继承的原理在“构造与析构”小节讲述),如:
//---------------------------------------------------------
// instanceof使用中的问题
//---------------------------------------------------------
function myobject() {
  // ...
}

function myobject2() {
  // ...
}
myobject2.prototype = new myobject();

obj1 = new myobject();
obj2 = new myobject2();

document.writeln(obj1 instanceof myobject, '
');
document.writeln(obj2 instanceof myobject, '
');

我们看到,obj1与obj2都是myobject的实例,但他们是不同的构造函数产生的。??注意,这在面向对象理论中正确的:因为obj2是myobject的子类实例,因此它具有与obj1相同的特性。在应用中这是obj2的多态性的体现之一。

但是,即便如此,我们也必须面临这样的问题:如何知道obj2与obj1是否是相同类型的实例呢???也就是说,连构造器都相同?

instanceof关键字不提供这样的机制。一个提供实现这种检测的能力的,是object.constructor属性。??但请先记住,它的使用远比你想象的要难。

好的,问题先到这里。constructor属性已经涉及到“构造与析构”的问题,这个我们后面再讲。“原型继承”、“构造与析构”是javascript的oop中的主要问题、核心问题,以及“致命问题”。


 6). null与undefined
 ------
 在javascript中,null与undefined曾一度使我迷惑。下面的文字,有利于
你更清晰的认知它(或者让你更迷惑):
   - null是关键字;undefined是global对象的一个属性。
   - null是对象(空对象, 没有任何属性和方法);undefined是undefined类
     型的值。试试下面的代码:
       document.writeln(typeof null);
       document.writeln(typeof undefined);
   - 对象模型中,所有的对象都是object或其子类的实例,但null对象例外:
       document.writeln(null instanceof object);
   - null“等值(==)”于undefined,但不“全等值(===)”于undefined:
       document.writeln(null == undefined);
       document.writeln(null == undefined);
   - 运算时null与undefined都可以被类型转换为false,但不等值于false:
       document.writeln(!null, !undefined);
       document.writeln(null==false);
       document.writeln(undefined==false);
          (责任编辑:包春林)


【uni-app】PDA扫码枪获取扫码数据APP(通俗易懂),聚焦频繁弹软键盘输入法等各种坑完美解决方法,附完整代码 uniapp PDA扫码枪获取扫码数据APP(通俗易懂),频繁弹软键盘等各种坑完美解决方法 阅读详情

相关推荐

Agent + 监控平台:自动诊断告警根因

根因分析、智能监控、AI Agent、告警风暴、异常检测、可观测性、故障诊断在现代分布式系统中,快速定位和解决问题是维持系统稳定性的关键。传统的监控系统虽然能够生成大量告警,但往往缺乏对告警根因的自动诊断能力,导致运维团队在告警风暴中难以快速定位问题。本文深入探讨了将AI Agent技术与监控平台结合,实现告警根因自动诊断的技术架构、理论基础和实现方法。我们将从第一性原理出发,分析根因诊断问题的本质,介绍基于Agent的智能监控系统设计,并通过实际案例展示其应用价值。文章同时涵盖了从理论到实践的全链路,包括

AIGC应用创新大全的博客 305

JAVA基础:JavaScript面向对象的支持(2)

  2. JavaScript面向对象的支持--------在前面的例子中其实已经讲到了object类型的“类型声明”与“实例创建”。在JavaScript中,我们需要通过一个函数来声明自己的object类型://---------------------------------------------------------// JavaScript中对象的

kinglino520的专栏 388

MAX31865三线PT100测温实战:配置、接线与代码全解析

本文详细解析MAX31865三线PT100测温的配置、接线与代码实现。通过实战经验分享,介绍如何利用MAX31865芯片实现高精度温度测量,重点讲解三线制接法的自动误差补偿功能,并提供完整的寄存器配置、SPI通信和温度转换算法,帮助开发者快速解决工业测温中的常见问题。

ss78901的博客 759

{js}JavaScript中支持面向对象的基础

今天在研究dwr2.0的时候,突然看到了demo中javascript用{}创建对象的方法,很好奇,感觉非常像java中的map对象,而事实这是javascript中的Object对象而以,其中的key只是它的属性或者方法,value是它属性对应的值或者方法对应的实现而已,对此特别在网上找到了以下的文章,让我更多的认识了javascript的使用,且更加感兴趣了================

天涯 书塾 1062

【AIOPS实战】Dify+Zabbix:构建智能告警分析助手的核心架构与实现

本文详细介绍了如何利用Dify平台与Zabbix-MCP接口构建智能告警分析助手,实现自然语言查询告警、智能分析和报告生成。该系统通过AIOPS技术显著提升运维效率,支持中英文混合查询、自动根因分析,并内置多种优化方案确保稳定可靠。

weixin_29238147的博客 319

第3.1.3章 机器人第三方库实战总结:ROS 2 入门实战及和ROS1的对比,打通机器人开发的任督二脉

本文针对机器人SLAM开发中第三方库的学习痛点,重点介绍ROS 2在SLAM中的应用。文章首先对比ROS 1与ROS 2的核心差异,梳理ROS 2知识图谱,包括节点、话题、服务等核心概念。通过实战项目演示如何构建激光SLAM节点,结合代码详解运行流程。最后给出学习建议,强调动手实践的重要性,帮助开发者快速掌握ROS 2在SLAM开发中的关键应用。

行知SLAM 181

【JS高级进阶】JavaScript初识面向对象

本篇主要讲解了什么是面向对象,如何创建使用类,super关键字的使用以及注意事项(学过Java的小伙伴们就会很容易理解)区分面向对象和面向过程

zhaochen1127的博客 2700

YOLO26涨点改进 | 独家创新、损失函数改进篇 | TGRS 2025顶刊 | 带来AIoU小目标涨点损失函数,增强了目标检测中对边界框形状和尺寸的敏感度,适合复杂场景和小物体检测中有效涨点

AIoU损失函数通过自适应形状感知和尺寸敏感加权机制,有效解决了YOLO26原生损失函数在小目标检测中的缺陷。实验结果表明,AIoU损失函数在多个数据集上均取得了显著的性能提升,尤其在小目标检测和多任务场景下表现突出。自适应形状感知,对形状差异较大的目标给予更大惩罚,提高边界框拟合精度尺寸敏感加权,对小目标的宽高比例差异给予更大权重,增强模型对小目标特征的学习能力梯度连续性好,即使在IoU=0时仍能提供有效的梯度更新,解决小目标梯度消失问题。

qq_36130719的博客 160

JavaScript 面向对象详解

JavaScript面向对象

LBJ辉的前端天地 5260

系统分析师论文范文(三)微服务

摘要(300字) 2024年4月,我作为系统分析师参与某省三甲医院云影像系统建设项目,负责系统分析与设计工作。该项目旨在响应国家"无胶片化"医疗政策,解决传统影像系统数据孤岛、调阅效率低等问题。系统基于DICOM 3.0和HL7国际标准,采用B/S架构与Spring Cloud Alibaba微服务技术栈,包含影像采集、智能分析、数据安全等核心模块,实现全院影像资源的云端统一管理与多端调阅。在架构设计上,通过微服务拆分、分布式事务控制及多层次安全防护机制,保障了系统的高可用性与数据一致性。系统于2024年1

echo的博客 223

【大语言模型 85】IA3与其他PEFT方法对比

在大语言模型时代,参数高效微调(PEFT)技术成为了降低微调成本的关键。本文深入解析IA3(Infused Adapter by Inhibiting and Amplifying Inner Activations)方法,并与LoRA、AdaLoRA、Prefix Tuning等主流PEFT技术进行全面对比,通过理论分析、代码实现和实验验证,帮助读者理解不同PEFT方法的优劣势和适用场景,为实际项目中的技术选型提供科学依据。

熵数实验室 755

【Java】Java与JavaScript:探究它们的区别与联系

总体而言,Java和JavaScript虽然有相似之处,但在语法、应用场景和执行环境上存在明显的差异。Java主要用于后端和移动应用开发,而JavaScript则是前端开发的核心。然而,通过各种工具和技术,它们可以在一些场景中相互整合,发挥各自的优势,构建更为完善的应用系统。深入理解它们的区别与联系,将有助于开发者更好地选择和应用这两种语言。

double222222的博客 1410

基于物联网技术设计的微型消防小车控制系统(STM32+ESP8266局域网)(181)

基于物联网技术的小微型消防车控制系统。通过远程控制功能,用户能够灵活操作消防车的行驶,方便快速抵达火灾现场。环境感知功能实时采集烟雾浓度、温湿度信息,为灭火决策提供科学依据。火源定位功能采用自动和手动两种模式,准确迅速地定位火源,并通过报警提示用户。灭火功能则根据火源定位结果,自动或手动启动干粉灭火器进行高效灭火。这些功能的结合实现了对小型火灾的全面应对,提升了消防效率与安全性,减少了火灾带来的损失。通过本项目的设计与实现,为消防领域提供了一种创新且实用的解决方案。

3082

Java面向对象和JavaScript面向对象的区别

Java面向对象和JavaScript面向对象的区别 JS面向对象是采用原型链的方式设计的,JAVA是采用正统的面向对象的思想设计的. 1.面向对象的能力 JS对于对象的理解为“属性的无序集合,每个属性存放一个原始值、对象或函数”JS只有一种访问作用域public. JS不支持静态作用 Java的对象是具有类定义,类有方法,属性,还有静态,和访问作用域(public ,private, protected)。java支持静态作用域 早绑定与晚绑定 所谓绑定,是把对象的接口和对象实例结合在一起的方法。 早绑定

m0_48336447的博客 1431

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

JS学习笔记(JavaScript基础学习必备)

讲解JavaScript 基础语法、关键特性、JSON、WebAPI 等知识点。涉及网页窗口交互的方法以及通过 DOM 进行网页元素的相关操作。 文章目录一、JavaScript 基础1.什么是 JavaScript2.JavaScript 范例3.变量4.数字与运算符5.数组概述6.操作数组7.Null 和 Undefined8.字符串9.转换成字符串10.转换成数值类型11.转换成布尔类型二 、JavaScript 关键特性1.条件2.循环3.函数(参数,函数返回值)4.创建函数5.挑战:制作直角三角形

weixin_44009656的博客 5341

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

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

Java与JavaScript的区别与联系:有人的地方就有江湖,有浏览器的地方就有JavaScript

有人的地方就有江湖,有浏览器的地方就有JavaScript

球球不吃虾WHR2349博客 4228

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

Java基础学习之JavaScript

1.JS概述简介JavaScript一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型。它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTML(标准通用标记语言下的一个应用)网页上使用,用来给HTML网页增加动态功能。Node.js。在1995年时,由Netscape公司的Brendan Eich,在网景导航者浏览器上首次设计实现而成。...

1800

Js是基于对象还是面向对象的

Js是基于对象还是面向对象的一、什么叫做面向对象二、什么叫做基于对象三: Js的特性四:js通过原型链等来模拟出和面向对象很类似的功能。五:总结 一、什么叫做面向对象 面向对象的三大特点(封装,继承,多态)缺一不可。 所谓封装:也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。封装是面向对象的特征之一,是对象和类概念的主要特性。 简单...

qq_42615057的博客 1778

java基础(2) 面向对象编程-java核心类

java体系学习2,面向对象编程基础+java核心类

lin_fightin的博客 1191

Java和JavaScript的区别

Java和JavaScript的区别:没有任何的血缘关系!!!两种语言都是面向对象的语言,具有面向对象,实例化都使用关键字new。

m0_52335699的博客 5844

java和js的对比,Java与JavaScript的对比

本文概述Java是一种面向对象的通用编程语言(尽管由于它包含原始类型, 所以它并不完全是面向对象的)。 Java代码与平台无关, 这意味着Java代码可以在支持Java的任何平台上运行。无需重新编译代码。 Java已成为客户端-服务器应用程序中最常用的语言之一。 Java代码被转换为字节码, 该字节码可以在Java虚拟机(JVM)上运行, 而与计算机体系结构无关。Java最初是由James Gos...

weixin_33249310的博客 3347

javascript简称什么,js是什么的简写

大家好,本文将围绕javascript简称什么展开说明,js是什么的简写是一个很多人都想弄明白的事情,想搞清楚js的全称是什么需要先了解以下几个事情。

chatgpt001的博客 2291

E2B Code Interpreter多语言支持:Python、JS、Java、R、Bash全面覆盖

E2B Code Interpreter是一款功能强大的开源工具,提供Python和JS/TS SDK,让你能够在AI应用中无缝运行AI生成的代码或进行代码解释。它支持Python、JavaScript、Java、R和Bash等多种编程语言,为开发者带来了极大的便利。 [![E2B Code Interpreter界面展示](https://raw.gitcode.com/gh_mirrors/

gitblog_00646的博客 1025

从JavaScript到Java(一):基础知识

JS// 函数声明 function myFunction(param1 , param2) {// 函数体 return result;} // 函数表达式 var myFunction = function(param1 , param2) {// 函数体 return result;// 箭头函数 var myFunction =(param1 , param2) => {// 函数体 return result;Java// 函数体 return result;

小笼包不是包的博客 3106
上一篇: javascript的世界从来没有像现在这样精彩
下一篇: java基础:javascript面向对象的支持(1)
Labber
博客等级 码龄19年 26粉丝 1976原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值