Tensoflw.js - 01 - 安装与入门(中文注释)

参考 W3Cschool 文档:https://www.w3cschool.cn/tensorflowjs/

本文主要翻译一些英文注释,添加通俗的注释,记录新手使用遇到的小问题,去除不必要的部分,帮助新手快速入门

Tensoflw.js 介绍:

TensorFlow.js 是一个开源的基于硬件加速的 JavaScript 库,用于训练和部署机器学习模型。TensorFlow.js 可以为你提供高性能的、易于使用的机器学习构建模块,允许你在浏览器上训练模型,或以推断模式运行预训练的模型。TensorFlow.js 不仅可以提供低级的机器学习构建模块,还可以提供高级的类似 Keras 的 API 来构建神经网络

Tensorflow.js 安装

在 JavaScript 项目中,TensorFlow.js 的安装方法有两种:

  • 一种是通过 script 标签在线引入(方便,但依赖网络,学习建议使用)
  • 另外一种就是通过 npm 进行安装,本地使用 (开发建议使用)
  • 后面我会贴上我目前的最新版 tf.js 0.13.2 下载地址:

一、使用Script 标签在线引入:

1.新建 html 文件:

<html>
<head>
<!-- 加载 TensorFlow.js,发行版本可以直接修改版本号加载需要的版本 -->
<script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@0.13.2"> </script> <!-- 将代码放在下面的脚本标记中 -->
<script>
// 提示:1.没有“import”声明。“if”在索引页上可用,因为上述的脚本标签在线引用
// 2.输出的值都是打印在浏览器开发者工具的控制台,而不是页面上
// 此处粘贴自己的内容
</script>
</head> <body>
</body>
</html>

2.将下面的代码添加到HTML文件中,在浏览器中打开该HTML文件,代码应该运行!

二、通过 NPM 下载到本地

使用 npm 将 TensorFlow.js 添加到您的项目中。

注意:因为使用 ES2017 语法(如import),所以此工作流程假定您使用打包程序/转换程序将代码转换为浏览器可以理解的内容。

1.进入项目的 js 目录

2.(如果还有在该目录使用过 npm,请先执行> npm init)再使用下面命令

npm install @tensorflow/tfjs

3.安装后容易出现目录问题,请先检查

4.在js文件中输入以下代码:

import * as tf from '@tensorflow/tfjs';

//下面是官方给出的一个示例,就类似于 hellowolrd 示例,一般用不到直接删掉
//
// // 定义一个线性回归模型。
// const model = tf.sequential();
// model.add(tf.layers.dense({units: 1, inputShape: [1]}));
//
// // 准备培训模型:指定损失和优化器。
// model.compile({loss: 'meanSquaredError', optimizer: 'sgd'});
//
// // 为训练提供一些合成数据。
// const xs = tf.tensor2d([1, 2, 3, 4], [4, 1]);
// const ys = tf.tensor2d([1, 3, 5, 7], [4, 1]);
//
// // 利用数据对模型进行训练。
// model.fit(xs, ys).then(() => {
// // Use the model to do inference on a data point the model hasn't seen before:
// model.predict(tf.tensor2d([5], [1, 1])).print();
// });

上面 js 代码暂时看不懂没关系,了解他们是给我们搭建 机器学习的环境,使您能够在浏览器中训练神经网络或在推理模式下运行预先训练的模型

npm 安装的 Tensorflow.js 0.13 链接: https://pan.baidu.com/s/1w-Y9Xmlh-cZJLHp6ElAzug 密码:hvmk

Tensorflow.js 张量和变量

张量(Tensor):

1.张量(Tensor)和变量(Variable)是 TensorFlow.js 中数据的主要表现形式。

两者不同之处在于张量是不可变的,而变量是可变的。

2.究竟什么是张量(Tensor)?

定义: 一组数值形成一个或多个维度的数组。 张量实例具有定义数组形状的形状属性。张量是 TensorFlow.js 中数据的中心单位,也是 Tensorflow.js 中数据的主要表现形式

(可以简单的理解为 n 为数组,是数据的中心单位)

3.shape 属性:(张量是 n 维数组,shape 就是说明张量具体是几维几行几列的数组)

4.一个 Tensor 实例有一个shape 属性来定义这一组数值如何组成张量,而最主要的 Tensor 实例的构造函数就是 tf.tensor 函数,如下所示:

<script>
//直接将代码拷贝到有引入 Tensorflow.js 的 html 中即可
//提示:输出的值都是打印在浏览器开发者工具的控制台,而不是页面上
// 2x3 Tensor
const shape = [2, 3]; // 2 行, 3 列
const a = tf.tensor([1.0, 2.0, 3.0, 10.0, 20.0, 30.0], shape);
a.print(); // 打印张量值
//提示:输出显示在浏览器控制台,F12 > console
//输出: [[1 , 2 , 3 ],
// [10, 20, 30]] // shape也可以用下面的方式实现:
const b = tf.tensor([[1.0, 2.0, 3.0], [10.0, 20.0, 30.0]]);
b.print();
// 输出: [[1 , 2 , 3 ],
// [10, 20, 30]] </script>

推荐使用下面的函数来增强代码的可读性:

tf.scalar(零维), tf.tensor1d(一维), tf.tensor2d(二维), tf.tensor3d(三维)、tf.tensor4d(四维)以及 tf.ones(值全是1)或者tf.zeros(值全是0)

如下所示:

<script>
//直接将代码拷贝到有引入 Tensorflow.js 的 html 中即可
//提示:输出的值都是打印在浏览器开发者工具的控制台,而不是页面上
const a = tf.scalar(3.14);
a.print(); // 输出零维张量 const b = tf.tensor2d([[2, 3, 4], [5, 6, 7]]);
b.print(); // 输出二维张量 const c = tf.zeros([2, 3]);
c.print(); // 输出2行3列的值全是0的张量 const d = tf.ones([3, 5]);
d.print(); // 输出3行5列的值全是1的张量 </script>

在 TensorFlow.js 中,张量是不变的; 一旦创建你就不能改变它们的值。 但是,您可以对它们执行操作来生成新的张量。

变量(Variable):

1.Variables 变量是通过张量进行初始化得到的。不像 Tensor 的值不可变,变量的值是可变的。你可以使用变量的 assign 方法分配一个新的 tensor 到这个变量上,这是变量就会改变:

<script>
//直接将代码拷贝到有引入 Tensorflow.js 的 html 中即可
//提示:输出的值都是打印在浏览器开发者工具的控制台,而不是页面上 const initialValues = tf.zeros([5]);
const biases = tf.variable(initialValues); // 初始化biases
biases.print(); // 输出: [0, 0, 0, 0, 0] const updatedValues = tf.tensor1d([0, 1, 0, 1, 0]);
biases.assign(updatedValues); // 更新 biases的值
biases.print(); // 输出: [0, 1, 0, 1, 0] </script>

如上所示,首先使用 tf.zeros 得到一个张量,然后利用这个张量初始化得到一个变量,接着我们就可以打印这个变量,并且通 Object.prototype.toString.call(biases) 方法可以判断变量也是一个对象,接着,我们再生成一个张量,然后变量调用 assign 方法传入这个张量,就可以得到一个新的变量了,如下:



由此我们可以得出一个结论:变量由张量生成,且张量不可变而变量可变。

更多文章

Tensoflw.js - 01 - 安装与入门(中文注释)的更多相关文章

  1. Tensoflw.js - 02 - 模型与内存管理(易懂)

    Tensoflw.js - 02 - 模型与内存管理(易懂) 参考 W3Cschool 文档:https://www.w3cschool.cn/tensorflowjs/ 本文主要翻译一些英文注释,添 ...

  2. impress.js 中文注释

    impress.js 中文注释 玄魂 /** * impress.js *(本翻译并未完全遵照原作者的注释翻译) * Impress.js 是受 Prezi启发,基于现代浏览器的 CSS3 与 Jav ...

  3. Node.js学习笔记(2) - Node.js安装及入门hello world

    今天来简单的记录一下Node.js的安装配置以及简单的入门 一.Node.js的安装 1.windows下的安装 windows下的安装很简单,只需要去官网http://nodejs.org中,找到w ...

  4. Node.js安装和入门 - 2行代码让你能够启动一个Server

    转自:http://josh-persistence.iteye.com/blog/1979552  备忘 Node.js是一个轻松构建快速,可扩展的网络应用平台建立在Chrome的JavaScrip ...

  5. Java自动化测试框架-01 - TestNG之入门篇 - 大佬的鸡肋,菜鸟的盛宴(详细教程)

    TestNG是什么? TestNG按照官方的定义: TestNG是一个测试框架,其灵感来自JUnit和NUnit,但引入了一些新的功能,使其功能更强大,使用更方便. TestNG是一个开源自动化测试框 ...

  6. Apache Hadoop2.x 边安装边入门

    完整PDF版本:<Apache Hadoop2.x边安装边入门> 目录 第一部分:Linux环境安装 第一步.配置Vmware NAT网络 一. Vmware网络模式介绍 二. NAT模式 ...

  7. [转载]tomcat的配置文件server.xml不支持中文注释的解决办法

    原文链接:http://tjmljw.iteye.com/blog/1500370 启动tomcat失败,控制台一闪而过,打开catalina的log发现错误指向了conf/server.xml,报错 ...

  8. bower安装使用入门详情

    bower安装使用入门详情   bower自定义安装:安装bower需要先安装node,npm,git全局安装bower,命令:npm install -g bower进入项目目录下,新建文件1.tx ...

  9. quartus ii 中文注释乱码解决办法

    转载自:http://bbs.ednchina.com/BLOG_ARTICLE_3027549.HTM 有些时候我们用Quartus ii 打开不同版本创建的工程文件时,往往会出现下列提示 点yes ...

随机推荐

  1. 安卓出现Invalid layout of java.lang.String at value

    Project->Properties->Run/Debug setting->选择类->classpath->删除Bootstrap Entries下面的文件 参考

  2. php date时间的获取

    1.得到当前时间:date('Y-m-d H:i:s',time()); 2.得到这个月有多少天:echo $getDay = date('t',date('Y-m-d', time())); 3.得 ...

  3. POJ-3414 Pots (BFS)

    Description You are given two pots, having the volume of A and B liters respectively. The following ...

  4. javassist和jdk动态代理

    先来一个InvocationHandler示例,InvocationHandler类的作用是:对原始对象的方法做一个拦截. package com.zhang; import java.lang.re ...

  5. js数组与字符串之间的相互转换

    一.数组转字符串 需要将数组元素用某个字符连接成字符串,示例代码如下 <!doctype html> <html> <head> <meta charset= ...

  6. git reset --hard和git revert命令

      git reset --hard和git revert命令   git误操作时可以用git reset –hard 去撤销这次修改, 但是这样做也有问题,可能在之前本地有没有提交的修改也都消失了, ...

  7. 在主Android Activity中加载Fragment的一般简易方法 ,来模拟一个微信界面。

    在Fragment的生命周期中,需要重点关注onCreate.onCreateView.onViewCreated.Activity与Fragment生命周期在设计模式上大体一致. package c ...

  8. Linux免密码登陆

    A电脑实现不用密码登陆到B电脑! vim /etc/ssh/sshd_config   编辑文件 01.在A电脑上生成ssh密钥 ssh-keygen -t rsa02.把A电脑生成的id_rsa.p ...

  9. 玩转X-CTR100 l STM32F4 l ADC 模拟数字转换

    我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ]      本文介绍X-CTR100控制器 AD转换接 ...

  10. DevExpress v18.1新版亮点——WinForms篇(八)

    用户界面套包DevExpress v18.1日前终于正式发布,本站将以连载的形式为大家介绍各版本新增内容.本文将介绍了DevExpress WinForms v18.1 的新功能,快来下载试用新版本! ...