PyTorch核心--tensor 张量 !!

文章目录

前言

张量的概念

1. 张量的定义

2. 张量的属性

3. 张量的形状

张量的原理

1. 存储(storage)

2. 形状(shape)

3. 步幅(stride)

张量的操作

1. 数学运算

2. 逻辑运算

3. 索引和切片

4. 形状操作

5. 广播

总结


前言

在PyTorch中,张量是核心数据结构,它是一个多维数组,类似Numpy中的数组。张量不仅仅是存储数据的容器,还是进行各种数学运算和深度学习操作的基础。

下面从3个方面做一共总结:

  1. 张量的概念
  2. 张量的原理
  3. 张量的操作

张量的概念

1. 张量的定义

张量是一种多维数组,它可以是标量(零维数组)、向量(一维数组)、矩阵(二维数组)或具有更高维度的数组。

在PyTorch中,张量是tensor.Tensor 的实例,可以通过不同的方式创建,如直接从Python列表、Numpy数组或通过特定函数生成。

import torch

# 创建一个标量
scalar_tensor = torch.tensor(3.14)

# 创建一个向量
vector_tensor = torch.tensor([1, 2, 3])

# 创建一个矩阵
matrix_tensor = torch.tensor([[1, 2, 3], [4, 5, 6]])

# 创建一个3D张量
tensor_3d = torch.rand((2, 3, 4))  # 2行3列4深度

2. 张量的属性

每个张量都有一些重要的属性,包括形状(shape)、数据类型(dtype)和设备(device)。

# 获取张量的形状
shape = tensor_3d.shape

# 获取张量的数据类型
dtype = tensor_3d.dtype

# 获取张量所在的设备
device = tensor_3d.device

3. 张量的形状

张量的形状定义了其维度和每个维度上的大小。例如,形状为(2,3,4)的张量具有2行、3列和4个深度。形状对于理解和操作张量非常重要。

# 获取张量的形状
shape = tensor_3d.shape

# 改变张量的形状
reshaped_tensor = tensor_3d.view(3, 8)  # 将原始形状(2, 3, 4)变为(3, 8)

张量的原理

PyTorch中的张量是基于Tensor类实现的,它提供了对底层存储的抽象。

张量包含三个主要组件:

  • 存储(storage)
  • 形状(shape)
  • 步幅(stride)

1. 存储(storage)

存储是实际存储数据的地方,它是一块连续的内存区域。多个张量可以共享相同的存储,从而减少内存消耗。存储中的数据按照张量的形状进行排列。

# 获取张量的存储
storage = tensor_3d.storage()

2. 形状(shape)

张量的形状定义了其维度和每个维度上的大小。形状信息有助于解释存储中数据的组织方式。

# 获取张量的形状
shape = tensor_3d.shape

3. 步幅(stride)

步幅是指在存储中移动到下一个元素所需的步数。了解步幅有助于理解在张量中进行索引和切片时的性能。

# 获取张量的步幅
stride = tensor_3d.stride()

张量的操作

PyTorch提供了丰富的张量操作,包括数学运算、逻辑运算、索引和切片等。

这里列举最常见的几种操作:

1. 数学运算

# 加法
result_add = tensor_3d + 2

# 乘法
result_mul = tensor_3d * 3

# 矩阵乘法
matrix_a = torch.rand((2, 3))
matrix_b = torch.rand((3, 4))
result_matmul = torch.mm(matrix_a, matrix_b)

2. 逻辑运算

# 大小比较
result_compare = tensor_3d > 0.5

# 逻辑运算
result_logical = torch.logical_and(result_add, result_compare)

3. 索引和切片

# 索引
element = tensor_3d[0, 1, 2]

# 切片
sliced_tensor = tensor_3d[:, 1:3, :]

4. 形状操作

# 改变形状
reshaped_tensor = tensor_3d.view(3, 8)

# 转置
transposed_tensor = tensor_3d.transpose(0, 2)

5. 广播

广播是一种自动扩展张量的操作,使得形状不同的张量可以进行逐元素的数学运算。

# 广播
tensor_a = torch.rand((1, 3, 1))
tensor_b = torch.rand((2, 1, 4))
result_broadcast = tensor_a + tensor_b

总结

张量作为深度学习中的基本数据结构,对于理解和实现神经网络非常关键。

来源:DOWHA小壮

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JOYCE_Leo16

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值