基于pytorch对张量的使用

基于pytorch对张量的使用

1、什么是张量

张量(Tensor)是机器学习和深度学习中的基本构建模块,类似于多维数组。张量在深度学习框架如PyTorch中被广泛使用,其核心在于能够有效地进行高维数据的处理和计算。

  • 0维张量:标量
  • 1维张量:向量
  • 2维张量:矩阵
  • 多维张量:多维数组
import torch

# 0维张量:标量
scalar = torch.tensor(7)
print(scalar.ndim)  # 输出0

# 1维张量:向量
vector = torch.tensor([7, 7])
print(vector.ndim)  # 输出1

# 2维张量:矩阵
matrix = torch.tensor([[7, 8], [9, 10]])
print(matrix.ndim)  # 输出2

# 多维张量
tensor = torch.tensor([[[1, 2, 3], [3, 6, 9], [2, 4, 5]]])
print(tensor.ndim)  # 输出3

2、张量的创建

2.1 基本创建方式

(1). 根据已有数据创建张量
(2). 根据形状创建张量

import torch
import numpy as np

# 根据已有数据创建张量
data1 = torch.tensor(10)
data2 = torch.tensor(np.random.randn(2, 3))
data3 = torch.tensor([[10., 20., 30.], [40., 50., 60.]])

# 创建指定形状的张量
data4 = torch.Tensor(2, 3)
data5 = torch.IntTensor(2, 3)
data6 = torch.FloatTensor()
2.2 创建线性和随机张量

(1) 线性张量
(2) 随机张量

import torch

# 线性张量
data1 = torch.arange(0, 10, 2)
data2 = torch.linspace(0, 11, 10)

# 随机张量
data3 = torch.randn(2, 3)
torch.random.manual_seed(100)  # 设置随机种子
data4 = torch.randn(2, 3)
2.3 创建01张量

(1) 全0张量
(2) 全1张量
(3) 全指定值张量

import torch

# 全0张量
data1 = torch.zeros(2, 3)
data2 = torch.zeros_like(data1)

# 全1张量
data3 = torch.ones(2, 3)
data4 = torch.ones_like(data3)

# 全指定值张量
data5 = torch.full([2, 3], 10)
data6 = torch.full_like(data5, 20)

3、张量与Numpy之间的转换

张量和Numpy数组之间的转换在深度学习的实现过程中非常常见。通过这种转换,可以利用Numpy的丰富库函数和PyTorch的高效计算能力。

import torch
import numpy as np

# 张量转换为Numpy数组
tensor = torch.tensor([2, 3, 4])
numpy_array = tensor.numpy()

# Numpy数组转换为张量
numpy_array = np.array([2, 3, 4])
tensor = torch.from_numpy(numpy_array)

4、张量的数值计算

张量提供了丰富的数值计算函数,如加法、减法、乘法、除法等,且这些操作可以直接在GPU上进行,大大加快了计算速度。

import torch

tensor1 = torch.tensor([1.0, 2.0, 3.0])
tensor2 = torch.tensor([4.0, 5.0, 6.0])

# 加法
result_add = tensor1 + tensor2

# 减法
result_sub = tensor1 - tensor2

# 乘法
result_mul = tensor1 * tensor2

# 除法
result_div = tensor1 / tensor2

5、张量的高级特性

5.1 张量的广播机制

广播(Broadcasting)是一种用于处理不同形状的张量进行运算的机制。通过广播,PyTorch可以将较小的张量自动扩展为较大的张量,以便进行逐元素的操作。

# 张量广播
tensor1 = torch.tensor([1, 2, 3])
tensor2 = torch.tensor([[1], [2], [3]])
result = tensor1 + tensor2
print(result)  # 输出:tensor([[2, 3, 4], [3, 4, 5], [4, 5, 6]])


5.2 自动求导

张量的’‘requires_grad’'属性可以让张量记录操作历史,以便进行自动微分。这在训练神经网络时非常有用。

# 自动求导
x = torch.tensor([1.0, 2.0, 3.0], requires_grad=True)
y = x * 2
z = y.mean()

# 反向传播
z.backward()
print(x.grad)  # 输出:tensor([0.6667, 0.6667, 0.6667])
5.3 张量的操作函数

PyTorch提供了大量的张量操作函数,可以用于各种数据处理和模型训练任务。

# 张量的各种操作
tensor = torch.tensor([1.0, 2.0, 3.0])
print(tensor.sum())  # 输出:tensor(6.)
print(tensor.mean())  # 输出:tensor(2.)
print(tensor.max())  # 输出:tensor(3.)
print(tensor.min())  # 输出:tensor(1.)
print(tensor.sqrt())  # 输出:tensor([1.0000, 1.4142, 1.7321]

结语

张量作为机器学习和深度学习的基础模块,其重要性不言而喻。通过本文的介绍,可以看出张量在数据处理、数值计算等方面的强大功能。特别是在PyTorch中,张量的操作接口设计简洁且高效,极大地方便了用户的使用。

除了基本的创建和运算外,张量的广播机制、自动求导等特性也是其强大的原因之一。在实际应用中,掌握这些特性和技巧可以显著提升我们的建模效率和模型性能。


  • 11
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值