TensorflowJS之Tensor

部署运行你感兴趣的模型镜像

可以将Tensor当作一个数据结构,里面的数据可以是一个数,也可以是1维数组,2维的矩阵,以及更高维的矩阵。

CPU GPU模型

TensorflowJS支持CPU和GPU两种后端。虽然输入的数据都是Tensor,但是对数据的处理有较大的差异。如果是CPU,数据的处理相对简单,如下图所示:

在这里插入图片描述
如果是GPU,则需要将Tensor里面的数据上传到一个WebGL Texture里面。然后在GPU处理结束后,将数据写回这个输出的Tensor:
在这里插入图片描述

DataStorage

无论是CPU方式还是GPU方式,数据的读写都要经过DataStorage。DataStorage的核心是一个WeakMap的数据成员(所谓WeakMap,指的是当一个成员没有被引用的时候,它就会成为GC的目标):

private data = new WeakMap<DataId, T>();

WeakMap提供了数据的get/set。里面的成员是<DataId, T>。注意DataId必须是Object。T则是任意。事实上,如果跟踪下DataStorage.set的调用stack,会发现DataId其实是Tensor.dataId。T其实是Tensor的Shape以及DataType。

DataStorage.set (tf-core.js:formatted:4387)
MathBackendWebGL.register (tf-core.js:formatted:11056)
Engine.registerTensor (tf-core.js:formatted:2435)
Tensor (tf-core.js:formatted:1022)
Tensor.make (tf-core.js:formatted:1028)

以及一个DataMover成员(TODO:这种方式定义成员的参考文献):

constructor(private dataMover: DataMover) {}

DataMover虽然只有一个简单的接口,但是其逻辑却比较复杂:

export interface DataMover {
  /**
   * To be called by backends whenever they see a dataId that they don't own.
   * Upon calling this method, the mover will fetch the tensor from another
   * backend and register it with the current active backend.
   */
  moveData(dataId: DataId): void;
}

注释的意思是,如果DataStorage在get一个DataId(其实就是一个Tensor)的时候不存在,则会从另一个“正确的Backend”(TODO:正确的Backend是什么时候指定的?作者目前尚没有碰到这个场景)获取:

readSync(dataId: DataId): DataValues {
  // Route the read to the correct backend.
  const info = this.tensorInfo.get(dataId);
  return info.backend.readSync(dataId);
}

您可能感兴趣的与本文相关的镜像

TensorFlow-v2.15

TensorFlow-v2.15

TensorFlow

TensorFlow 是由Google Brain 团队开发的开源机器学习框架,广泛应用于深度学习研究和生产环境。 它提供了一个灵活的平台,用于构建和训练各种机器学习模型

### 使用 TensorFlow.js 进行开发 #### 安装与设置环境 为了开始使用 TensorFlow.js 开发,需先安装必要的库。可以通过 npm 或者直接通过 `<script>` 标签引入 CDN 版本来加载 TensorFlow.js 库。 对于基于 Node.js 的项目,可以执行如下命令以安装最新版本的 TensorFlow.js: ```bash npm install @tensorflow/tfjs ``` 如果是在浏览器环境中工作,则可以直接在 HTML 文件中加入下面这行代码[^2]: ```html <script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs"></script> ``` #### 创建简单的机器学习模型 一旦设置了开发环境,就可以创建并训练一个简单的神经网络模型了。这里展示了一个基本的例子,在这个例子中定义了一种线性回归模型,并对其进行拟合操作: ```javascript // 导入 tensorflow 模块 import * as tf from '@tensorflow/tfjs'; // 准备数据集 const xs = tf.tensor([1, 2, 3, 4]); const ys = tf.tensor([1, 3, 5, 7]); // 构建模型 const model = tf.sequential(); model.add(tf.layers.dense({units: 1, inputShape: [1]})); // 编译模型 model.compile({ loss: 'meanSquaredError', optimizer: 'sgd' }); // 训练模型 async function trainModel() { const history = await model.fit(xs, ys, {epochs: 10}); } trainModel().then(() => console.log('Training complete')); ``` 上述代码片段展示了如何构建、编译以及训练一个非常基础的单层全连接前馈神经网络来进行预测任务。 #### 部署预训练好的模型到前端应用 除了从头开始训练新模型外,还可以利用已经预先训练完成的模型文件(如 `.pb` 或 `json`),并通过 TensorFlow.js 加载这些模型用于推理阶段的任务处理。例如,当拥有一个自定义的对象检测模型时,只需按照指定流程将其转换为目标平台支持的形式——即选择 Tensorflow 并进一步挑选 TensorFlow.js 输出选项即可实现部署目的[^1]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值