基础知识-张量-《Python教程》

admin 2025-10-19 23:35:24 编程 来源:ZONE.CI 全球网 0 阅读模式

🚀 原文地址:https://pytorch.org/tutorials/beginner/basics/tensorqs_tutorial.html

张量是一种特殊的数据结构,与数组和矩阵非常相似。在 PyTorch 中,我们使用张量对模型的输入和输出以及模型的参数进行编码。

:::info 📝 备注————————张量其实是数学领域上的一种定义,而数组是计算机领域上的一种定义,两者本质上其实可以看成一个东西。 :::

Tensors 类似于 NumPy 的 ndarrays,只是张量可以在 GPU 或其他专用硬件上进行加速运算。如果你熟悉 ndarrays,就可以直接使用 Tensor API。如果没有,请按照下面的 API 快速演练进行操作。

  1. import torch
  2. import numpy as np

2. 初始化

Tensors 可以用各种方式初始化,请看以下示例:

2.1 直接使用数据构建

Tensors 可以直接使用数据来构建,它将自动进行数据类型的推断。

  1. data = [[1, 2],[3, 4]]
  2. x_data = torch.tensor(data)

2.2 使用 NumPy 数组构建

Tensors 可以使用 NumPy 数组进行构建。

  1. np_array = np.array(data)
  2. x_np = torch.from_numpy(np_array)

2.3 使用另外一个tensor构建

除非显式重写,否则新的 Tensor 将保留参数 tensor 的特性(维度、数据类型)。

  1. x_ones = torch.ones_like(x_data) # retains the properties of x_data
  2. print(f"Ones Tensor: \n {x_ones} \n")
  3. x_rand = torch.rand_like(x_data, dtype=torch.float) # overrides the datatype of x_data
  4. print(f"Random Tensor: \n {x_rand} \n")

注意:如果声明一个未初始化的矩阵,该矩阵在使用之前不会包含确定已知的值。当创建一个未初始化的矩阵时,分配内存中的值都将显示为初始值。

  • 构建一个未初始化的 🐮张量 - 图1 矩阵:
  1. import torch
  2. x = torch.empty(5, 3)
  3. print(x)

输出结果:

  1. tensor([[6.4158e+10, 9.3046e-43, 6.4150e+10],
  2. [9.3046e-43, 6.4149e+10, 9.3046e-43],
  3. [6.4149e+10, 9.3046e-43, 6.4152e+10],
  4. [9.3046e-43, 6.4152e+10, 9.3046e-43],
  5. [6.4146e+10, 9.3046e-43, 6.4146e+10]])

多次运行该段代码,输出结果每次是不相同的

  • 构建一个随机初始化的矩阵:
  1. import torch
  2. x = torch.rand(5, 3)
  3. print(x)

输出结果:

  1. tensor([[0.0333, 0.8159, 0.0170],
  2. [0.5828, 0.3363, 0.5798],
  3. [0.4928, 0.3689, 0.8265],
  4. [0.2678, 0.6598, 0.2170],
  5. [0.7417, 0.5393, 0.6702]])

torch.rand 返回一个符合均匀分布的随机数矩阵,随机数取值区间为 [0, 1)

  • 构建一个元素填充为 0,且数据类型为 tensor.long 的矩阵:
  1. import torch
  2. x = torch.zeros(5, 3, dtype=torch.long)
  3. print(x)

输出结果:

  1. tensor([[0, 0, 0],
  2. [0, 0, 0],
  3. [0, 0, 0],
  4. [0, 0, 0],
  5. [0, 0, 0]])
  • 直接从列表数据中构建一个 Tensor:
  1. import torch
  2. x = torch.tensor([5.1, 3])
  3. print(x)

输出结果:

  1. tensor([5.1000, 3.0000])
  • 根据已知的 tensor 来创建 tensor,以下方法会重复使用输入 tensor 的属性,例如数据类型。除非用户自己指定新的值:
  1. x = torch.rand(5, 3)
  2. y1 = x.new_ones(5, 3, dtype=torch.double)
  3. print(y1)
  4. y2 = torch.rand_like(x, dtype=torch.float)
  5. print(y2)
  6. print(y2.size())

输出结果:

  1. tensor([[1., 1., 1.],
  2. [1., 1., 1.],
  3. [1., 1., 1.],
  4. [1., 1., 1.],
  5. [1., 1., 1.]], dtype=torch.float64)
  6. tensor([[0.6728, 0.2809, 0.9017],
  7. [0.1962, 0.8225, 0.9839],
  8. [0.9622, 0.9088, 0.8063],
  9. [0.1374, 0.4724, 0.6598],
  10. [0.9871, 0.6245, 0.0878]])
  11. torch.Size([5, 3])

注意torch.Size 事实上是一个元组,所以它支持所有元组的操作。

以太坊cppgolang区别 编程

以太坊cppgolang区别

以太坊是一种去中心化的开源平台,它采用智能合约技术,旨在构建和运行不受干扰的分布式应用程序。作为目前最受欢迎的区块链平台之一,以太坊提供了多种编程语言的支持,其
progolang 编程

progolang

Go语言(Golang)是由Google开发的一门静态类型编程语言。作为一名专业的Golang开发者,我深知这门语言的优势和特点。在本文中,我将介绍Golang
golangn个发送者 编程

golangn个发送者

Golang是一种开源的编程语言,由Google团队开发,旨在提高程序的并发性和简化软件开发过程。在Go语言中,有时需要向多个接收者发送信息。本文将介绍如何在G
golang技能图谱 编程

golang技能图谱

从互联网行业的快速发展到人工智能技术的日益成熟,各种编程语言也应运而生。而在这众多的编程语言中,Golang(即Go)作为一门强大且高效的开发语言备受关注。Go
评论:0   参与:  9