PyTorch-张量

简介: PyTorch 是Facebook AI团队开发的深度学习框架,其核心是张量,它是同类型数据的多维数组。张量可以通过`torch.tensor()`、`torch.Tensor()`、指定类型如`IntTensor`等创建。张量操作包括线性(`torch.arange`, `torch.linspace`)、随机(`torch.randn`, `torch.manual_seed`)和全0/1张量(`torch.zeros`, `torch.ones`)。张量间可进行阿达玛积(逐元素相乘),类型转换用`type()`或`double()`。

📀PyTorch是一个开源的深度学习框架,由Facebook的人工智能研究团队开发,专为深度学习研究和开发而设计。PyTorch 中的张量就是元素为同一种数据类型的多维矩阵。在 PyTorch 中,张量以 "类" 的形式封装起来,对张量的一些运算、处理的方法被封装在类中。


基本创建方式  


  1. torch.tensor 根据指定数据创建张量
  2. torch.Tensor 根据形状创建张量, 其也可用来创建指定数据的张量
  3. torch.IntTensor、torch.FloatTensor、torch.DoubleTensor 创建指定类型的张量


import torch
 
data = [1, 2, 3]
tensor = torch.tensor(data)
print(tensor)


import torch
 
shape = (2, 3)
tensor = torch.Tensor(*shape)
print(tensor)


import torch
 
int_tensor = torch.IntTensor([1, 2, 3])
float_tensor = torch.FloatTensor([1.0, 2.0, 3.0])
double_tensor = torch.DoubleTensor([1.0, 2.0, 3.0])
 
print(int_tensor)
print(float_tensor)
print(double_tensor)

创建线性和随机张量


  1. torch.arange 和 torch.linspace 创建线性张量
  2. torch.random.init_seed 和 torch.random.manual_seed 随机种子设置
  3. torch.randn 创建随机张量


import torch

start = 0

end = 10

step = 2

linear_tensor = torch.arange(start, end, step)

print(linear_tensor)



import torch


start = 0

end = 1

steps = 5

linear_tensor = torch.linspace(start, end, steps)

print(linear_tensor)


创建01张量


  • torch.ones 和 torch.ones_like 创建全1张量
  • torch.zeros 和 torch.zeros_like 创建全0张量
  • torch.full 和 torch.full_like 创建全为指定值张量


import torch
 
shape = (3, 3)
zero_tensor = torch.zeros(*shape)
print(zero_tensor)
 
 
shape = (3, 3)
one_tensor = torch.ones(*shape)
print(one_tensor)


张量元素类型转换


  • tensor.type(torch.DoubleTensor)
  • torch.double()


import torch
 
tensor = torch.FloatTensor([1, 2, 3])
double_tensor = tensor.type(torch.DoubleTensor)
print(double_tensor)
 
 
tensor = torch.FloatTensor([1, 2, 3])
double_tensor = torch.double(tensor)
print(double_tensor)


阿达玛积


阿达玛积指的是矩阵对应位置的元素相乘;


阿达玛积是对两个矩阵或张量对应位置上的元素进行相乘,这种操作在神经网络中常用于权重的调整或其他逐元素的变换。要进行阿达玛积运算,两个矩阵或张量的维度必须相匹配,即它们必须有相同的形状。这是进行阿达玛积的前提条件。阿达玛积满足乘法的结合律、左分配律和右分配律,这些性质使得它在数学推导和算法设计中非常有用。在深度学习中,阿达玛积常用于激活函数的计算、权重更新以及在一些特定的层中,如注意力机制中的权重计算等。与矩阵乘法不同,阿达玛积不是基于矩阵的行和列的乘法,而是基于单个元素的乘法。这使得阿达玛积在某些情况下更为直观和易于理解。


import numpy as np
import torch
 
 
def test():
 
    data1 = torch.tensor([[1, 2], [3, 4]])
    data2 = torch.tensor([[5, 6], [7, 8]])
 
    # 第一种方式
    data = torch.mul(data1, data2)
    print(data)
    print('-' * 50)
 
    # 第二种方式
    data = data1 * data2
    print(data)
    print('-' * 50)
 
 
if __name__ == '__main__':
    test()


程序输出结果


tensor([[ 5, 12], [21, 32]])

tensor([[ 5, 12], [21, 32]])


张量数值计算


📀PyTorch 计算的数据都是以张量形式存在, 我们需要掌握张量各种运算。我们可以在 CPU 中运算, 也可以在 GPU 中运算。


  • CPU上创建张量


import torch
tensor_cpu = torch.tensor([1, 2, 3]) 


  • 在 GPU 上创建张量(如果 GPU 可用):


tensor_gpu = tensor_cpu.to('cuda')


PyTorch 默认会将张量创建在 CPU 控制的内存中, 即: 默认的运算设备为 CPU。我们也可以将张量创建在 GPU 上, 能够利用对于矩阵计算的优势加快模型训练。将张量移动到 GPU 上有如下方法: 1. 使用 cuda 方法 2. 直接在 GPU 上创建张量 3. 使用 to 方法指定设备。


张量的基本运算包括多种操作:


  1. 加法和减法:两个同阶张量可以进行元素对元素的加法和减法运算。
  2. 标量乘法:一个标量可以与任何阶的张量相乘,结果是将原张量的每个元素乘以该标量。
  3. 点积(内积):两个张量的点积通常是指它们之间的逐元素乘法后求和。
  4. 外积:两个向量的外积会产生一个矩阵,其中每个元素是第一个向量的元素与第二个向量的元素的乘积。
  5. 张量积(Kronecker积):用于组合两个张量来创建一个新的高阶张量。
  6. 特定运算:包括对称张量的运算、反对称张量的运算、迹运算等。


以下是使用 PyTorch 进行张量基本运算的代码案例:  


import torch
 
# 创建张量
x = torch.tensor([1, 2, 3])
y = torch.tensor([4, 5, 6])
 
# 加法
result_add = torch.add(x, y)
print("Addition:", result_add)
 
# 减法
result_sub = torch.sub(x, y)
print("Subtraction:", result_sub)
 
# 乘法
result_mul = torch.mul(x, y)
print("Multiplication:", result_mul)
 
# 除法
result_div = torch.div(x, y)
print("Division:", result_div)
 
# 取负数
result_neg = torch.neg(x)
print("Negation:", result_neg)
 
# inplace 加法
x.add_(y)
print("Inplace Addition:", x)
 
# inplace 减法
x.sub_(y)
print("Inplace Subtraction:", x)
 
# inplace 乘法
x.mul_(y)
print("Inplace Multiplication:", x)
 
# inplace 除法
x.div_(y)
print("Inplace Division:", x)
 
# inplace 取负数
x.neg_()
print("Inplace Negation:", x)


相关实践学习
基于阿里云DeepGPU实例,用AI画唯美国风少女
本实验基于阿里云DeepGPU实例,使用aiacctorch加速stable-diffusion-webui,用AI画唯美国风少女,可提升性能至高至原性能的2.6倍。
相关文章
|
1月前
|
机器学习/深度学习 PyTorch 算法框架/工具
PyTorch基础之张量模块数据类型、基本操作、与Numpy数组的操作详解(附源码 简单全面)
PyTorch基础之张量模块数据类型、基本操作、与Numpy数组的操作详解(附源码 简单全面)
48 0
|
10月前
|
机器学习/深度学习 PyTorch 算法框架/工具
Pytorch学习笔记(1):基本概念、安装、张量操作、逻辑回归
Pytorch学习笔记(1):基本概念、安装、张量操作、逻辑回归
177 0
Pytorch学习笔记(1):基本概念、安装、张量操作、逻辑回归
|
6天前
|
算法 PyTorch 算法框架/工具
Pytorch - 张量转换拼接
使用 Tensor.numpy 函数可以将张量转换为 ndarray 数组,但是共享内存,可以使用 copy 函数避免共享。
|
6天前
|
存储 机器学习/深度学习 PyTorch
Pytorch-张量形状操作
PyTorch中,张量形状操作至关重要,如reshape用于改变维度而不变元素,transpose/permute用于维度交换,view改形状需内存连续,squeeze移除单维度,unsqueeze添加维度。这些函数帮助数据适应神经网络层间的转换。例如,reshape能调整数据适配层的输入,transpose用于矩阵转置或多维排列,而squeeze和unsqueeze则用于处理单维度。理解并熟练运用这些工具是深度学习中必要的技能。
|
6天前
|
机器学习/深度学习 PyTorch 算法框架/工具
Pytorch-张量基础操作
张量是一个多维数组,它是标量、向量和矩阵概念的推广。在深度学习中,张量被广泛用于表示数据和模型参数。
|
7天前
|
并行计算 PyTorch 算法框架/工具
pytorch张量的创建
• 张量(Tensors)类似于NumPy的ndarrays ,但张量可以在GPU上进行计算。从本质上来说,PyTorch是一个处理张量的库。一个张量是一个数字、向量、矩阵或任何n维数组。
|
1月前
|
机器学习/深度学习 PyTorch 算法框架/工具
【PyTorch】-了解张量(Tensor)
【PyTorch】-了解张量(Tensor)
|
1月前
|
机器学习/深度学习 存储 PyTorch
PyTorch深度学习基础:张量(Tensor)详解
【4月更文挑战第17天】本文详细介绍了PyTorch中的张量,它是构建和操作深度学习数据的核心。张量是多维数组,用于存储和变换数据。PyTorch支持CPU和GPU张量,后者能加速大规模数据处理。创建张量可通过`torch.zeros()`、`torch.rand()`或直接从Python列表转换。张量操作包括数学运算、切片和拼接。在深度学习中,张量用于神经网络模型的构建和训练。理解张量对于掌握PyTorch至关重要。
|
1月前
|
存储 机器学习/深度学习 PyTorch
PyTorch核心--tensor 张量 !!
PyTorch核心--tensor 张量 !!
37 1
|
1月前
|
机器学习/深度学习 PyTorch 算法框架/工具
PyTorch的10个基本张量操作
PyTorch是一个基于python的科学计算包。它的灵活性允许轻松集成新的数据类型和算法,并且框架也是高效和可扩展的,下面我们将介绍一些Pytorch的基本张量操作。
82 1

热门文章

最新文章