Tensor
一、认识
在 TensorFlow.js
中, Tensor
张量 是数据的基本单位, 可以理解为一个多维数组(n
维数组),用于存储数值数据。它是机器学习计算的基本数据结构,与 NumPy
数组类似,但可以在 GPU
上进行高效计算。与 NumPy
数组相比,Tensor
具有以下特点:
-
支持
GPU/TPU
加速:Tensor
可以在CPU
、GPU
或TPU
上运行,提高计算效率。 -
不可变性(
Immutable)
:Tensor
是不可变的,一旦创建,就无法修改其内容(但可以创建新的Tensor
)。 -
自动微分:
TensorFlow
通过tf.GradientTape
记录计算过程,以支持自动求导。
Tensorflow.js
中的 Tensor
与神经网络有什么关系?: 在 TensorFlow.js
(TF.js
)中,Tensor
张量 是数据的基本表示形式,而 神经网络(如 tf.Model
或 tf.LayersModel
)是由多个 Tensor
通过数学运算(如权重更新、激活函数、卷积操作等)构成的模型。因此,Tensor
是神经网络计算的核心单元。神经网络 的计算过程可以看作是对 Tensor
进行一系列数学变换(如矩阵乘法、卷积、归一化等)。如下所示:
-
神经网络的输入与输出: 神经网络的输入和输出都是
Tensor
。例如,图像分类模型的输入是一个形状为[batch, height, width, channels]
的Tensor
,输出可能是一个形状为[batch, num_classes]
的Tensor
(表示分类的概率分布)。 -
神经网络的权重和计算: 神经网络的权重和偏置(
bias
)也是Tensor
-
反向传播与梯度更新: 神经网络的训练依赖 梯度下降 和 反向传播,即通过计算损失函数对权重求梯度,并用
Tensor
进行更新
因此, Tensor
是 神经网络 中的基本数据结构,用于存储输入、权重、激活值和梯度。神经网络 的计算就是对 Tensor
进行一系列数学变换,包括矩阵乘法、激活函数、梯度计算等。
二、Tensor 结构
Tensor {
kept: false,
isDisposedInternal: false,
shape: [],
dtype: 'float32',
size: 1,
strides: [],
dataId: { id: 0 },
id: 0,
rankType: '0'
}
shape
形状:Tensor.shape
形状 决定了数据的维度。例如: 标量(0
维):tf.scalar(5)
; 向量(1
维):tf.tensor([1, 2, 3])
; 矩阵(2
维):tf.tensor([[1, 2], [3, 4]])
; 高维张量(3D
及以上):用于图像、序列数据等;
三、创建 Tensor
在 TensorFlow
中,可以使用 tf.tensor
、 tf.constant
和 tf.Variable
来创建 Tensor
:
3.1 tf.tensor
const tf = require("@tensorflow/tfjs");
// 创建一个标量张量(单个数值)
const t0 = tf.tensor(1);
// 打印张量 t0 的值
t0.print();
console.log("t0", t0);
// 创建一个一维张量(数组)
const t1 = tf.tensor([1, 2, 3, 4]);
// 打印张量 t1 的值
t1.print();
console.log("t1", t1);
// 创建一个二维张量(矩阵)
const t2 = tf.tensor([
[1, 2],
[3, 4],
[5, 6],
]);
// 打印张量 t2 的值
t2.print();
console.log("t2", t2);
// 创建一个三维张量
const t3 = tf.tensor([
[
[1, 2],
[3, 4],
],
[
[5, 6],
[7, 8],
],
]);
// 打印张量 t3 的值
t3.print();
console.log("t3", t3);
3.2 tf.constant
tf.constant
适用于创建不可变的张量。
import tensorflow as tf
# 创建一个 1D Tensor
tensor1 = tf.constant([1, 2, 3])
print(tensor1)
# 创建一个 2D Tensor
tensor2 = tf.constant([[1, 2], [3, 4]])
print(tensor2)
3.3 tf.Variable
如果需要一个可变的张量(可以更新值),可以使用 tf.Variable
:
var = tf.Variable([1.0, 2.0, 3.0])
print(var)
# 修改变量
var.assign([4.0, 5.0, 6.0])
print(var)
四、计算 Tensor
a = tf.constant([[1, 2], [3, 4]])
b = tf.constant([[5, 6], [7, 8]])
# 加法
print(tf.add(a, b)) # [[6, 8], [10, 12]]
# 乘法
print(tf.multiply(a, b)) # [[5, 12], [21, 32]]
# 矩阵乘法
print(tf.matmul(a, b)) # [[19, 22], [43, 50]]