范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

智能前端技术与实践深度学习中的JavaScript

  本节将介绍深度学习领域所涉及的前端知识,包括深度学习中的JavaScript数据类型和JavaScript异步编程。  2.6.1 JavaScript数据类型
  深度学习中基本的数据结构是张量,高效的数据结构对任何一个深度学习项目都非常重要。在C/C++中,我们可以通过数组来高效地存储一些集合数据并实现快速访问;在 Python中,我们可以通过NumPy中的NDArray对象来实现此功能。NDArray对象是一系列同类型数据的集合,用于存放同类型元素的多维数组。
  深度学习中支持的JavaScript数据类型是TypedArray,它是一种介于原始数组与NDArray之间的数据结构。在现代浏览器中有11种类型的TypedArray,如表2-8所示。
  表2-8 TypedArray
  类型
  大小(单位是字节)
  描述
  Int8Array
  1
  8位二进制有符号整数   Uint8Array   1
  8位无符号整数(超出范围后从另一边界循环)   Uint8ClampedArray   1
  8位无符号整数(超出范围后为边界值)   Int16Array   2
  16位二进制有符号整数   Uint16Array   2
  16位无符号整数   Int32Array   4
  32位二进制有符号整数   Uint32Array   4
  32位无符号整数   Float32Array   4
  32位IEEE浮点数(7位有效数字)   Float64Array   8
  64位IEEE浮点数(16位有效数字)   BigInt64Array   8
  64位二进制有符号整数   BigUint64Array   8
  64位无符号整数   接下来,介绍ArrayBuffer及访问ArrayBuffer的两种方法——TypedArray和DataView。 1.ArrayBuffer   ArrayBuffer 对象用来表示通用的、固定长度的原始二进制数据缓冲区,它是一个字节数组。由于ArrayBuffer仅仅是内存上的二进制缓冲区,因此它并不提供任何操作数据(读取数据、写入数据)的方法,即我们并不能直接操作ArrayBuffer的内容,而要通过TypedArray或DataView对象来操作。它们会将缓冲区中的数据表示为特定的格式,并通过这些格式来读写缓冲区中的内容,如代码清单2-22所示。   代码清单2-22 const buffer = new ArrayBuffer(4) console.log(buffer.byteLength) //42.TypedArray   TypedArray(类型化数组)对象描述了一个底层的二进制数据缓冲区的类数组视图。TypedArray定义了如何访问底层的ArrayBuffer,实际上用于存储数据的数据结构是ArrayBuffer,没有名为TypedArray的全局属性,也没有名为TypedArray的构造函数。示例代码如代码清单2-23所示。   代码清单2-23 const typedArray1 = new Int8Array(8); typedArray1[0] = 128; const typedArray2 = new Int8Array(typedArray1); typedArray2[1] = 20; console.log(typedArray1); // 期望输出: Int8Array [-128, 0, 0, 0, 0, 0, 0, 0] console.log(typedArray2); // 期望输出: Int8Array [-128, 20, 0, 0, 0, 0, 0, 0]   由于Int8Array中单个元素值的范围是 128 127,因此当指定typedArray1数组的第一个元素为128时,该值超出范围,于是会从另一边界重新开始循环,即值为 128。 3.DataView   DataView是一个可以从二进制ArrayBuffer对象中读写多种数值类型的底层接口,在使用它时,无须考虑不同平台的字节序问题,如代码清单2-24所示。   代码清单2-24 var buffer = new ArrayBuffer(4) new DataView(buffer).setInt16(0,42,true) console.log(new Uint8Array(buffer))   我们首先在代码清单2-24中创建了4字节大小的ArrayBuffer,然后将已经创建的ArrayBuffer作为数据源并创建DataView对象,并通过setInt16()方法创建起始位置为0、值为42的16位整数。我们还指定setInt16()方法的参数littleEndian为true,即采用小端字节序(低位字节放在内存的低地址端,高位字节放在内存的高地址端)。该参数的默认值为false,即默认采用大端字节序。上述代码的运行结果如下。 Uint8Array [42, 0, 0, 0]2.6.2 JavaScript异步编程   在 Web 浏览器或微信小程序中部署机器学习应用时,经常会采用从服务器端加载现成的JavaScript模型或转换TensorFlow模型这两种方法。JavaScript语言采用的是单线程模型,所以对于网络 I/O 请求等一些耗时较长的任务,通常会通过设置回调函数、使用 Promise对象、使用async/await函数来处理。本节将介绍JavaScript中的事件循环机制及异步任务的处理方法。   JavaScript语言最大的特点就是单线程。这意味着所有任务都必须同步执行,即前一个任务完成后,下一个任务才可以开始,但是如果前一个任务耗时较长,就会使后面的任务一直处于等待状态,从而造成主线程的阻塞,进而影响页面的渲染。   为了解决这个问题,我们一般将JavaScript中可以处理的任务分为同步任务和异步任务。同步任务是指在JavaScript主线程上排队执行的任务;异步任务是指在任务队列中执行的任务,异步执行的运行机制如下。 所有同步任务在JavaScript主线程上执行,形成一个执行栈。 所有异步任务在任务队列中执行,异步任务包括鼠标单击事件、网络请求事件等(任务队列又分为宏任务和微任务:宏任务包括script、setTimeout、setInterval、I/O、UI Rendering,微任务包括process.nextTick、Promise、MutationObserver等)。 当执行栈中所有任务执行完毕时,系统会读取任务队列中的任务,并进入执行栈,由主线程开始执行。 主线程不断重复上述过程。   具体运行过程如图2-29所示。   图2-29 异步编程运行过程   (图片来源:ruanyifeng 网站)   当JavaScript主线程运行的时候,会产生堆(heap)和栈(stack)。栈中的代码会调用外部API(WebAPI),它们会将所有异步任务(click事件、load事件、done事件等)加入任务队列(callback queue)中。当栈中的代码执行完毕时,主线程就会读取任务队列,并执行队列中异步任务对应事件的回调函数。主线程会不断从任务队列中读取事件,直至所有任务处理完成,如图2-30所示。   图2-30 异步编程运行过程   接着,介绍深度学习中常用的两种JavaScript异步任务解决方案。 1.使用Promise对象   对于传统异步任务,通常会采用回调函数处理,但是该方法会造成无限回调,从而使得程序结构混乱,不利于后期代码的维护。ECMAScript 6提供了一种新的异步任务解决方案,即Promise对象,它代表一个异步操作最终完成或者失败,共有如下3种状态。 进行中(pending):初始状态,既没有成功,也没有失败。 已成功(fulfilled):操作成功。 已失败(rejected):操作失败。   Promise 对象状态的改变只有两种可能——由 Pending 变为 Fulfilled 和由 Pending 变为Rejected。当发生上述任何一种状态改变后(此时我们称为Resolved),用Promise对象的then()方法排列起来的相关处理程序就会被调用,该对象成功实现了用同步的方法编写异步的代码,避免了回调函数引发的无限回调问题,如图2-31所示。   图2-31 Promise对象   (图片来源:mozillademos网站 )   代码清单2-25展示了一段示例代码。   代码清单2-25 let myFirstPromise = new Promise(function(resolve, reject){ setTimeout(function(){ resolve("hahaCoder!"); }, 250); }); myFirstPromise.then(function(successMessage){ console.log("Yay! " + successMessage); });   代码清单 2-25 使用 setTimeout()来模拟异步代码。当异步代码执行成功时,才会调用resolve();当异步代码失败时,会调用reject()。其中successMessage的值是调用resolve()方法所传入的值。 2.async/await函数   async函数是使用async关键字声明的函数,是AsyncFunction构造函数的实例,并且允许使用await关键字。async和await关键字让我们可以用一种更简洁的方式写出基于Promise的异步行为,而无须刻意地链式调用Promise。   async函数可能包含0个或多个await表达式,await表达式会暂停整个async函数的执行进程并让出其控制权,只有当等待的基于Promise对象的异步操作成功或失败后才会恢复进程。示例代码如代码清单2-26所示。   代码清单2-26 function resolveAfter2Seconds() { return new Promise(resolve => { setTimeout(() => { resolve("resolved"); }, 2000); }); } async function asyncCall() { console.log("calling"); const result = await resolveAfter2Seconds(); console.log(result); console.log("hahaCoder") // 期望输出: "resolved" } asyncCall();   运行结果如下。 "calling" "resolved" "hahaCoder"   代码清单2-26首先会输出calling字符串,接着会执行resolveAfter2Seconds()函数,由于该函数前有await关键字,故asyncCall函数的执行进程会中断,2s后,即异步操作执行完成后会恢复进程,从而输出resolved和hahaCoder。   不论是回调函数、Promise 还是 async/await 等其他异步任务解决方案,其本质都是通过JavaScript唯一的单线程执行所有任务。   本节最后介绍HTML5中新提出的概念——Web Worker,它可以帮助JavaScript创建多线程环境,即允许主线程创建worker线程,并将一些任务分配给worker线程。   Web Worker为Web内容在后台线程中运行脚本提供了一种简单的解决方法。worker线程可以执行任务而不干扰用户界面,等到worker线程完成对应的计算任务,将结果返回主线程。示例代码如代码清单2-27所示。   代码清单2-27 web worker   Worker.js中的代码如代码清单2-28所示。   代码清单2-28 postMessage("Hello,I"m shipudong from worker.js"); onmessage = (evt) => { postMessage("Worker received data: " + evt.data); };   运行结果如图2-32所示。   图2-32 运行结果   本文摘自:《智能前端技术与实践》   石璞东,吴萌,王慧琴 著 TensorFlow前端开发技术案例教程,神经网络模型算法web深度学习 适配新版本及多类型设备,提供大量案例分析 助你深入了解智能前端开发!   本书旨在介绍智能前端开发和深度学习。本书首先介绍了相关的开发环境、前端开发基础知识、深度学习基础知识、前端智能框架和卷积神经网络,然后讲述了线性回归、logistical 回归、XOR 问题、人体姿态检测:目标检测、光学字符识别等方面的案例,最后讲解了前端智能化案例。   本书适合 Web 前端开发人员、人工智能开发人员阅读,也可作为计算机相关专业师生的参考用书。

亚马逊的大封杀,给跨境电商指了一条明路跨境电商去年有多风光,今年就有多惨。4月以来,国内跨境电商公司们迎来了亚马逊平台史上最严厉的一波封号潮。封号年年有,今年却特别狠。包括帕拓逊傲基有棵树通拓泽宝等跨境电商行业头部公司中国力量在行动!心系河南,居然之家鸿星尔克多家企业捐款捐资今天彻底不闭馆!请大家转发有需要的人!在居然之家北龙湖店附近的被困人员,不要冒险回家,馆里提供热水及休息场所。风雨无情,人有情。只要需要我们就在。一场突如其来的天灾,让河南人民陷于前置仓电商双熊,谁在裸泳?一个月前,每日优鲜和叮咚买菜还在为了前置仓电商第一股争分夺秒,同一天递交招股书,同一天更新招股书。一个月后,前置仓电商双雄变双熊。尤其每日优鲜,上市即破发,两天便跌去34,叮咚买菜超李宁比肩阿迪,4200亿的安踏真的稳了?5041亿港元,这是安踏体育(HK02020)的最新市值,是李宁(HK02331)的2。1倍,也是耐克之后的全球第二大体育品牌。不仅如此,安踏2020年净利润达51。62亿元,首次创新时代传统药企如何脱颖而出?从科兴制药引进英夫利西单抗说起一款新药上市的威力有多大?前有华东医药凭借少女针上市,强势收获涨停板,今有迈博药业凭借国内首款英夫利西单抗类似药获批上市,股价大涨。7月14日,迈博药业公告表示,英夫利西单抗类似药创新药企战火重燃,为何它们入局伴随诊断?近日,基石药业发布泰吉华(阿伐替尼片)伴随诊断试剂盒人PDGFRA基因D842V突变检测试剂盒(PCR荧光探针法)获国家药品监督管理局优先审批。该试剂盒用于精准筛选携带PDGFRA冰峰IPO,老牌汽水的救赎之战上世纪90年代,可口可乐和百事可乐先后并购了北冰洋山海关天府可乐崂山可乐等7家国产汽水品牌,并将品牌雪藏,史称两乐水淹七军。唯一的幸存者是冰峰,其后它牢牢占据陕西市场。这个拥有70二次供地开始,首轮抢地的房企被拍晕在沙滩第一轮抢地过去不到3个月,二次供地又拉开了序幕。截至8月4日,无锡厦门长春已经完成第二次集中供地。实际上,厦门长春早在6月就已完成二次供地。从厦门无锡此次供地结果来看,土拍市场一改居然之家董事长汪林朋出手增持,企业价值持续释放居然之家(000785。sz)董事长兼CEO汪林朋正在二级市场增持居然之家股票。公开数据显示,截止至7月27日,汪林朋增持公司股票300余万股,金额超过1500万元。此外,其它高管倍轻松,下一个石头科技?继石头科技极米科技之后,又一家消费硬件类企业,倍轻松成功上市,成为科创板按摩器第一股。市场也很给面儿,倍轻松上市首日大涨524。74。随后几个交易日有所回落,但总市值也接近百亿。相银行网点大撤退大行向左,中小行向右2013年,美国银行家布莱特金在银行3。0提出银行不再是一个地方,而是一种服务。2018年,他又在银行4。0中进一步判断银行服务无处不在,就是不在银行网点。关于银行网点去留的激辩已
游戏党福音,这么好用MIUI竟然把他放得这么深,小米游戏空间测评不少游戏都有针对游戏进行特殊优化的游戏模式,但是放眼望去,除去专门的游戏手机,似乎一般的厂商除了一键开启性能模式之外就再无对游戏体验的其他功能支持了,最近发现的小米手机里自带的这个网游版号深度观察守望263天的游戏行业,知风起,等风来21世纪经济报道记者蔡姝越,南方财经全媒体记者吴立洋上海北京报道尊敬的投资者,您好!公司在研产品均尚未获得版号,鉴于项目研发进度产品发行策略及玩家预期等因素考虑,年报中未透露储备自游戏公司的办公楼都这么壕?怪不得人人挤破头腾讯比小米科技园稍早一些,腾讯全球新总部落地深圳滨海大厦。腾讯新总部的办公楼采用双子塔楼的样式,颇有气势。腾讯新总部接入物联网系统,提前使用微信预约好乘坐电梯的时间和到达楼层,电梯联想智能产品之拯救者游戏手机2Pro,游戏迷的福音此前在联想创新科技大会上,联想展示了ProjectUnity(超级互联方案),能够实现多个屏幕之间的任务协作和管理协同。现在这款应用以超级互联的名称登陆MicrosoftStore解读丨时隔8个月,版号重新发放对游戏行业意味着什么?21世纪经济报道记者蔡姝越,南方财经全媒体记者吴立洋上海,北京报道在网络游戏版号停发八个月之后,游戏市场终于迎来了令人振奋的好消息。根据国家新闻出版署官网消息,新一批国产网络游戏版通知关于开展2022(第二十一届)中国互联网大会互联网助力经济社会数字化转型案例征集活动的通知2022年04月12日1414各有关单位中国互联网大会从2002年至今已成功举办二十届,被誉为行业的风向标,网民的嘉年华。2022(第二十一届)中国互联网大会(以下称大会)由工业和并联机器人遭受冷遇,这家公司为何选择逆向而行?记者李京亚编辑即便与串联机器人同属工业机器人领域两大重要品类,并联机器人也一直是声量较小的那一方。串联机器人是一种开式运动链机器人,由一系列连杆通过转动关节或移动关节串联形成。而并新技术能让皮肤年轻30岁,未来穷人和富人寿命差距会越来越大返老还童似乎只出现在武侠小说里面,事实上有很多动物都可以实现返老还童,比如灯塔水母,在生育完之后,身体会回到生育之前的状态,无限的返老还童,那么人类可以实现返老还童吗?近日,来自英为什么一放假我们就觉得时间过得快?图片来源pixabay假期刚过,玩得不亦乐乎的你是不是觉得时间过得飞快?实际上,这可能是大脑出现了预测误差,当你获得的正向刺激比预想的还多的话,就会觉得时间流逝速度增加了。我们对时坐拥两款地板价手机的moto,却成了已消失的品牌,冤不冤?近期,微博热搜上的话题曾经很火但已消失了的品牌引发众多网友围观,一位网友竟然发微博表示其中有摩托罗拉。这位网友可能不知道,摩托罗拉手机业务其实一直都在正常运营,而且在国内市场还有两有人说苹果X的质量不好,是不是真的?这款手机怎么样?质量好不好与消费者的消费水平息息相关一个用不起智能机的人会觉得很好,没玩过的东西都新鲜反而,经常使用苹果手机的人就会觉得不好,起点高低问题!任何一个品牌的手机,都会有一定的返修率,