1.初始化一个Tensor
Tensors可以用不同的方式去初始化。
- 可以直接从数据中创建张量。数据类型会自动推断。
- 可以从 NumPy 数组创建张量(反之亦然)。
numpy‘np_array’和tensor‘x_np’在这里共享内存位置,因此更改一个的值将更改另一个。
- 从另一个tensor创建。除非明确重载,否则新tensor将保留参数tensor的属性(形状、数据类型)。
下面x_one保留tensor的属性,x_rand重载tensor的属性。
2.随机值或恒定值:
shape 是tensor维度的元组。在下面的函数中,它决定了输出tensor的维度。
3.tensor的属性
tensor属性描述它们的形状、数据类型以及存储它们的设备。
有100多种张量运算,包括算术、线性代数、矩阵运算(如转置、索引和切片)。对于采样和审查,您可以在此处找到全面的描述。
这些操作中的每一个都可以在GPU上运行(通常比在CPU上更高的速度)。
CPU最多有16个内核。核心是进行实际计算的单元。每个核心按顺序处理任务(一次处理一个任务)。
GPU有1000个内核。GPU核心处理并行处理中的计算。任务在不同的核心之间进行划分和处理。这就是为什么在大多数情况下GPU比CPU更快的原因。GPU在处理大数据时比处理小数据时性能更好。GPU通常用于图形或神经网络的高强度计算(我们稍后将在神经网络单元中了解更多信息)。
PyTorch可以使用英伟达CUDA库来利用他们的GPU卡。
显示cpu和gpu之间工作负载的图表。
默认情况下,张量是在CPU上创建的。张量也可以计算为GPU;要做到这一点,您需要使用.to方法(在检查GPU可用性后)移动它们。请记住,在设备之间复制大张量在时间和内存方面可能会很昂贵!
- 类似于 numpy 的标准索引和切片:
- 连接张量
可以使用torch.cat沿给定维度连接张量序列。torch.stack是一个相关的张量连接选项,它将一系列张量沿着一个新的维度连接起来。
- 算术运算
-
单元素张量
如果您有一个单元素张量,例如,通过将张量的所有值聚合为一个值,您可以使用item()将其转换为Python数值:
-
in-place(就地)操作
将结果存储到操作数中的操作会就地调用。它们用_后缀表示。例如:x.copy_(y),x.t_()将更改x。
注意:就地操作可以节省一些内存,但在计算导数时可能会出现问题,因为它们会立即丢失历史记录。因此,不鼓励使用它们。
- 与 NumPy 的桥接
CPU 上的张量和 NumPy 阵列可以共享底层内存位置,改变其中一个就会改变另一个。
tensor到numpy数组
tensor的变化映射到numpy数组中
numpy数组到tensor
numpy数组中的变化会映射到tensor