张量、框架
PyTorch 和 TensorFlow 都是张量库,核心功能对张量进行高效数学运算,尤其是大规模并行计算。
1.张量
张量 Tensor 是一种通用的数学对象,可以看做是多维数组概念的扩展
标量(0阶张量):单个数字,如 5;
向量(1阶张量):一维数组,如 [1,2,3];
矩阵(2阶张量):二维数组,如[[1,2],[3,4]]
高阶张量(3阶及以上):如三维数组、四维数组等
神经网络中的计算操作(如矩阵乘法、卷积、激活函数等)都涉及到对多维数据的处理。PyTorch 和 TensorFlow 作为张量库,提供了张量操作接口,能利用硬件加速(如GPU、TPU)进行大规模并行计算
2.张量库
作为张量库的功能:
基本张量运算:加减乘除、矩阵乘法、转置、索引、切片等常见的线性代数运算
自动微分:能够计算张量操作的梯度
硬件加速:利用GPU或PTU对张量运算加速,将CPU转移到GPU上,提高模型训练和推理速度
3. 示例
创建
在PyTorch中可以这样创建张量:
import torch
x = torch.tensor([[1,2],[3,4]])
y = torch.ones_like(x)
z = x+y
torch.tensor 是 PyTorch 中创建张量的函数。
[[1, 2], [3, 4]] 是一个嵌套的列表,表示一个二维矩阵(2x2)
x 是一个 2x2 的整型张量,表示为:
[[1, 2],
[3, 4]]
torch.ones_like(x)
会创建一个和张量 x 形状相同的新张量,但其所有元素都是 1
由于 x 是一个 2x2 的矩阵,y 也会是一个 2x2 的矩阵,且每个元素都等于 1
[[1, 1],
[1, 1]]
z = x + y
张量的逐元素加法。即,张量 x 和 y 的每个对应元素相加
[[1+1, 2+1],
[3+1, 4+1]]
因此,z为:
[[2, 3],
[4, 5]]
在TensorFlow中类似:
import tensorflow as tf
x = tf.constant([[1, 2], [3, 4]])
y = tf.ones_like(x)
z = x + y
自动微分和梯度计算
自动微分可以帮助计算损失函数对模型参数的梯度,这是更新模型参数的关键
PyTorch通过autograd模块,动态计算张量的梯度
x = torch.tensor([2.0], requires_grad=True)
y = x ** 2
y.backward()
print(x.grad) # 输出 x 的梯度
TensorFlow通过GradientTape上下文来跟踪计算,并计算梯度
x = tf.Variable(2.0)
with tf.GradientTape() as tape:
y = x ** 2
grad = tape.gradient(y, x)
print(grad) # 输出 x 的梯度
张量在GPU上的加速
GPU对并行运算非常高效,尤其是像矩阵乘法、卷积等操作
在PyTorch中通过.to(‘cuda’)方法将张量移动到GPU
x = torch.tensor([1.0, 2.0])
x = x.to('cuda') # 移动到GPU
在TensorFlow中,张量默认支持GPU加速,只要检测到GPU设备,计算会自动利用它
with tf.device('/GPU:0'):
x = tf.constant([1.0, 2.0])