佛山招收网站设计,制作影视宣传片,凡科网网站建设资料,青岛php网站建设在PyTorch中#xff0c;torch.Tensor是存储和变换数据的主要工具。如果你之前用过NumPy#xff0c;你会发现Tensor和NumPy的多维数组非常类似。然而#xff0c;Tensor提供GPU计算和自动求梯度等更多功能#xff0c;这些使Tensor更加适合深度学习。 张量#xff08;tensortorch.Tensor是存储和变换数据的主要工具。如果你之前用过NumPy你会发现Tensor和NumPy的多维数组非常类似。然而Tensor提供GPU计算和自动求梯度等更多功能这些使Tensor更加适合深度学习。 张量tensor是数学和物理学中的概念它表示任意维度的数组或矩阵。在机器学习和人工智能领域张量是存储和处理数据的基本数据结构。在深度学习中张量是神经网络中传递和操作数据的基本单位。它可以是标量0维张量、向量1维张量、矩阵2维张量或更高维度的数组。张量不仅可以包含数字数据还可以包含其他类型的数据如字符串、图像等。通过张量我们可以进行各种数学运算和变换如加法、乘法、卷积等。深度学习框架如TensorFlow和PyTorch提供了丰富的张量操作函数和工具使得处理和操作张量变得更加方便和高效。 创建Tensor 在使用深度学习框架如TensorFlow或PyTorch时可以使用相应的函数来创建张量。以下是创建张量的一些常见方法 使用给定值创建张量 import tensorflow as tf# 创建一个标量0维张量
scalar tf.constant(5)# 创建一个向量1维张量
vector tf.constant([1, 2, 3])# 创建一个矩阵2维张量
matrix tf.constant([[1, 2, 3], [4, 5, 6]])# 创建一个3维张量
tensor tf.constant([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])使用随机值创建张量 import tensorflow as tf# 创建一个形状为(2, 3)的随机矩阵2维张量
random_matrix tf.random.normal(shape(2, 3))# 创建一个形状为(3, 3)的随机矩阵2维张量数值范围在0到1之间
random_uniform tf.random.uniform(shape(3, 3), minval0, maxval1)Tensor官方API 操作 数学运算 tf.add(x, y)逐元素相加。tf.subtract(x, y)逐元素相减。tf.multiply(x, y)逐元素相乘。tf.divide(x, y)逐元素相除。tf.square(x)逐元素求平方。tf.sqrt(x)逐元素求平方根。tf.exp(x)逐元素求指数。tf.log(x)逐元素求自然对数。 形状操作 tf.reshape(tensor, shape)重新调整张量的形状。tf.transpose(tensor, permNone)交换张量的维度顺序。tf.expand_dims(input, axisNone)在指定轴上扩展维度。tf.squeeze(input, axisNone)压缩维度为1的轴。tf.concat(tensors, axis)沿指定轴连接张量。 矩阵操作 tf.matmul(a, b)矩阵相乘。tf.transpose(tensor, permNone)矩阵转置。tf.linalg.inv(tensor)矩阵求逆。 逻辑运算 tf.equal(x, y)逐元素比较是否相等。tf.not_equal(x, y)逐元素比较是否不相等。tf.greater(x, y)逐元素比较是否大于。tf.greater_equal(x, y)逐元素比较是否大于等于。tf.less(x, y)逐元素比较是否小于。tf.less_equal(x, y)逐元素比较是否小于等于。 神经网络相关操作 tf.nn.relu(x)ReLU整流线性单元激活函数。tf.nn.softmax(logits)计算 softmax 函数。tf.nn.conv2d(input, filter, strides, padding)二维卷积操作。 广播机制 广播Broadcasting是指在 TensorFlow 中当两个张量在某些维度上的形状不匹配时自动对其中一个或两个张量进行形状扩展使它们的形状能够相互兼容进而进行逐元素的操作。广播机制的目的是为了避免显式地复制数据从而提高计算效率。以下是广播机制的规则
如果两个张量在某个维度上的形状相等或其中一个张量在该维度上的长度为1则称它们在该维度上是可广播的。当两个张量在某个维度上的形状不匹配时可以通过对其中一个或两个张量在该维度上进行形状扩展使它们的形状变得兼容即满足广播机制的要求。在广播过程中会对形状较小的张量进行扩展使其形状与形状较大的张量相匹配。扩展的方式是在形状较小的张量的形状前面添加维度长度为1的维度。
import tensorflow as tf# 创建两个张量
a tf.constant([[1, 2, 3]])
b tf.constant([[4], [5], [6]])# 形状不匹配但是可以通过广播进行计算
# a 形状(1, 3)
# b 形状(3, 1)
# 广播后的形状(3, 3)
result a bprint(result.numpy())
# 输出
# [[5 6 7]
# [6 7 8]
# [7 8 9]]Tensor和NumPy相互转换
使用numpy()将Tensor转换成NumPy数组:
a torch.ones(5)
b a.numpy()
print(a, b)a 1
print(a, b)
b 1
print(a, b)
使用from_numpy()将NumPy数组转换成Tensor:
import numpy as np
a np.ones(5)
b torch.from_numpy(a)
print(a, b)a 1
print(a, b)
b 1
print(a, b)
此外上面提到还有一个常用的方法就是直接用torch.tensor()将NumPy数组转换成Tensor需要注意的是该方法总是会进行数据拷贝返回的Tensor和原来的数据不再共享内存。
# 用torch.tensor()转换时不会共享内存
c torch.tensor(a)
a 1
print(a, c)
Tensor on GPU
用方法to()可以将Tensor在CPU和GPU需要硬件支持之间相互移动。
# 以下代码只有在PyTorch GPU版本上才会执行
if torch.cuda.is_available():device torch.device(cuda) # GPUy torch.ones_like(x, devicedevice) # 直接创建一个在GPU上的Tensorx x.to(device) # 等价于 .to(cuda)z x yprint(z)print(z.to(cpu, torch.double)) # to()还可以同时更改数据类型
总结 TensorFlow 是一个功能强大的机器学习框架具有广泛的应用和活跃的社区支持。在使用 TensorFlow 进行机器学习和深度学习开发时需要掌握一些基本概念和技术例如 张量TensorFlow 中的基本数据类型它们是多维数组可以表示各种类型的数据。 计算图TensorFlow 的计算模型它由一系列节点和边组成每个节点代表一个操作边代表张量的流动。 变量TensorFlow 中的状态它们是可以被训练的张量可以存储模型的参数和其他状态信息。 会话TensorFlow 执行计算图的环境它可以将计算图部署到 CPU 或 GPU 上进行计算。 损失函数衡量模型预测结果和实际结果之间的差异从而指导模型的训练。 优化器根据损失函数的梯度信息更新模型参数的算法例如随机梯度下降。 Dropout、Batch Normalization 等正则化技术减少模型过拟合的方法。 卷积神经网络CNN、循环神经网络RNN等深度学习模型用于处理图像、语音、自然语言等任务。 数据预处理技术包括标准化、归一化、数据增强等方法用于提高模型的鲁棒性和泛化能力。 广播机制在张量形状不匹配时自动对其中一个或两个张量进行形状扩展使它们的形状能够相互兼容。