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

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

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

上一篇介绍了,Tensorflow.js 的安装,张量与变量的表示方法、创建和输出

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

本篇介绍模型与内存管理

Tensorflow.js 模型:

1.在 Tensorflow.js 中,一个模型就是一个给定一些输入将会产生特定的输出的函数。简单来说,一个模型就是一个函数,只是它完成了特定的任务

2.在 TensorFlow.js 中有两种方式来创建模型:

  • 一种是通过操作(ops)来直接完成模型本身所做的工作
  • 另外一种就是通过高级API tf.model 来创建一个模型,显然第二种是更容易的

第一种创建模型的方法:

提示:可能有小伙伴没有看上一篇,可以直接使用在线引入:

<script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@0.13.2"> </script>
<script>
//直接将代码拷贝到有引入 Tensorflow.js 的 html 中即可
//提示:输出的值都是打印在浏览器开发者工具的控制台,而不是页面上
//定义一个函数进行对输入参数的一系列操作 function predict(input) {
// y = a * x ^ 2 + b * x + c
// More on tf.tidy in the next section
return tf.tidy(() => {
const x = tf.scalar(input); const ax2 = a.mul(x.square());
const bx = b.mul(x);
const y = ax2.add(bx).add(c); return y;
});
} //上一篇介绍的 tf.scalar(零维)
const a = tf.scalar(2);
const b = tf.scalar(4);
const c = tf.scalar(8); const result = predict(2);
result.print() </script>

如上所示,我们定义的 predict 函数就是一个模型,对于给定的输入,我们就可以得到预测的输出。注意:所有的数字都需要经过 tf.scalar() 张量处理

第二种创建模型的方法:

用 TensorFlow.js 中的 tf.model 方法(这里的 model 并不是真正可以调用的方法,而是一个总称,比如实际上可以调用的是 tf.sequential 模型),这在深度学习中是非常流行的概念。 下面的代码就创建了 tf.sequential 模型:

<script>
//直接将代码拷贝到有引入 Tensorflow.js 的 html 中即可
//提示:输出的值都是打印在浏览器开发者工具的控制台,而不是页面上 const model = tf.sequential();
model.add(
tf.layers.simpleRNN({
units: 20,
recurrentInitializer: 'GlorotNormal',
inputShape: [80, 4]
})
); const optimizer = tf.train.sgd(LEARNING_RATE);
model.compile({optimizer, loss: 'categoricalCrossentropy'});
model.fit({x: data, y: labels)}); </script>

Tensorflow.js 内存管理

因为 TensorFlow.js 使用了GPU来加速数学运算,因此当 tensorflow 处理张量和变量时就有必要来管理 GPU 内存。在 TensorFlow.js 中,我们可以通过 dispose 和 tf.tidy 这两种方法来管理内存

dispose

您可以在张量或变量上调用dispose来清除它并释放其GPU内存:

<script>
//直接将代码拷贝到有引入 Tensorflow.js 的 html 中即可
//提示:输出的值都是打印在浏览器开发者工具的控制台,而不是页面上 const x = tf.tensor2d([[0.0, 2.0], [4.0, 6.0]]);
const x_squared = x.square(); x.dispose();
x_squared.dispose();
</script>

tf.tidy

进行大量的张量操作时使用dispose可能会很麻烦。 TensorFlow.js提供了另一个函数tf.tidy,它对JavaScript中的常规范围起到类似的作用,不同的是它针对GPU支持的张量

tf.tidy执行一个函数并清除所有创建的中间张量,释放它们的GPU内存。 它不清除内部函数的返回值

<script>
//直接将代码拷贝到有引入 Tensorflow.js 的 html 中即可
//提示:输出的值都是打印在浏览器开发者工具的控制台,而不是页面上 const average = tf.tidy(() => {
const y = tf.tensor1d([1.0, 2.0, 3.0, 4.0]);
const z = tf.ones([4]); return y.sub(z).square().mean();
}); average.print() </script>

使用 tf.tidy 将有助于防止应用程序中的内存泄漏。它也可以用来更谨慎地控制内存何时回收

两个重要的注意事项:

传递给 tf.tidy 的函数应该是同步的,并且不会返回 Promise。我们建议在 tf.tidy 内不要有更新 UI 或在发出远程请求的代码

tf.tidy 不会清理变量。变量通常持续到机器学习模型的整个生命周期,因此TensorFlow.js 不会清理它们,即使它们是在 tidy 中创建的。不过,您可以手动调用dispose处理它们

最新文章

  1. Mybatis实现数据的增删改查(CRUD)
  2. Behind RabbitMQ Exchange Types
  3. 【2016-10-12】【坚持学习】【Day3】【责任链模式】
  4. python执行linux shell管道输出内容
  5. 如何安装ESXi的补丁
  6. boost库学习之开篇
  7. JAVA将Excel中的报表导出为图片格式(一)问题背景
  8. java里遍历map的常见方式
  9. RESTFul中的那些事(1)---在RESTFul中,HTTP Put和Patch操作的差别?
  10. 推荐C/C++常见的面试题目
  11. Spring框架(四)AOP面向切面编程
  12. re 模块 正则表达式
  13. Python报错:SyntaxError: Non-ASCII character '\xe5' in file 1.py on line 6, but no encoding declared...
  14. Node.js c++ 扩展之HelloWorld
  15. Python Tkinter 简单使用
  16. Alertmanager 安装(k8s报警)
  17. 009_关闭linux的THP
  18. HGOI 20190218 题解
  19. google gcr.io、k8s.gcr.io 国内镜像
  20. day01 计算机的基础知识

热门文章

  1. USACO 铂金 T1
  2. OC 类的本质和分类
  3. Tomcat类加载器破坏双亲委派
  4. 流媒体传输协议详解之---RTSP认证
  5. PHP:第二章——PHP中的foreach语句
  6. jsp el函数库
  7. bzoj1084&amp;&amp;洛谷2331[SCOI2005]最大子矩阵
  8. php抓取文章内容分析
  9. (翻译)Angular 1.3中的验证器管道
  10. avalonJS-源码阅读(3) VMODEL