Pytorch教程01 - Pytorch安装,基本元素操作,切片,改变张量形状,clamp张量裁剪

Pytorch教程01 - Pytorch安装,基本元素操作,切片,改变张量形状,clamp张量裁剪

pytorch一站式学习->: pytorch一站式学习,张量基本操作,神经网络基本概念与搭建集合


python一站式学习->: python一站式学习,python基础,数据类型,numpy,pandas,机器学习,NLP自然语言处理,deepseek大预言模型,Tensorflow,CV视觉


pytorch是基于Numpy的科学计算包,作为深度学习的平台,提供了最大的灵活度和速度,并提供使用GPU强大功能的能力

pytorch安装

官网地址 https://pytorch.org/get-started/locally/

进入官网安装教程页面,根据自己系统环境,选择运行不同的安装命令
在这里插入图片描述

# cpu计算平台安装
pip3 install torch torchvision torchaudio
# GPU计算平台安装,cuda版本12.6
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu126

Tensors张量

Tensors类似于Numpy中的ndarray数据结构,最大区别是Tensor可以使用GPU加速计算。

基本元素操作

  1. 生成一个张量
import torch

# 1. 创建一个空3行2列的tensor,有值是因为默认会把内存中的值随机赋值,该值没有任何意义
torch.empty(3,2)


# 结果:tensor([[9.4397e+18, 1.3060e-42],
#        [0.0000e+00, 0.0000e+00],
#        [0.0000e+00, 0.0000e+00]])
        
        
# 2. 生成一个3行2列,0-1之间的随机分布张量数据
torch.rand(3,2)
# 结果:tensor([[0.4362, 0.7062],
#        [0.5299, 0.7610],
#        [0.3549, 0.3182]])


# 3. 生成一个3行2列,0-1之间的正太分布张量数据
torch.randn(3,2)
#结果:tensor([[-0.2598, -0.5116],
#        [ 0.4263, -1.1537],
#        [ 0.2921, -0.6076]])


# 4. 生成一个3行2列全0矩阵
# dtype=torch.double指定数据类型
torch.zeros(3,2,dtype=torch.long)
# 结果:tensor([[0, 0],
#       [0, 0],
#       [0, 0]])

# 5. 生成一个3行2列全1矩阵
# dtype=torch.long指定数据类型
torch.ones(3,2,dtype=torch.float)
# 结果:tensor([[1., 1.],
#              [1., 1.],
#              [1., 1.]])


# 6. 使用正太分布生成一个形状和x一样的张量
torch.randn_like(x ,dtype=torch.float)
# 结果: tensor([[-1.3119,  0.0489],
#        [ 0.3093, -0.0307],
#        [-0.1648, -1.7262]])



# 7. 使用现有数据生成一个矩阵
torch.tensor([1.2,2.3])
# 结果:tensor([1.2000, 2.3000])

# 8. 填充值为4
a = torch.full((2,3),4)
print(a)
# 结果tensor([[4, 4, 4],[4, 4, 4]])

  1. 获取张量的尺寸
y= torch.tensor([[1.2,2.3,5.2],[1.5,3.2,4.0]])
# size() 返回的是一个tuple元祖,因此支持一切元祖的操作
print(y.size())
# 结果:torch.Size([2, 3])

切片

和numpy中切片语法一致,这里举几个例子

import torch

x= torch.tensor([[1,2,3],[4,5,6]])
# 所有列,取一行切片
print(x[:1])
#tensor([[1, 2, 3]])

# 所有行,第一列切片
print(x[:,0])
#tensor([1, 4])

# 所有行,第一到第二列
print(x[:,:2])
#tensor([[1, 2],
#        [4, 5]])

torch.chunk(a,2,dim=0)切片

将a按照dim=0行切分成2份,如果行除不尽,最后一个张量会小

代码示例

import torch

if __name__ == '__main__':
    a = torch.linspace(1,12,12).view(3,4)
    print("张量a:",a)
    # dim=0按照行切分,dim=1按照列切分
    out = torch.chunk(a,2,dim=0)
    print("张量out:",out)

# 结果
张量a: tensor([[ 1.,  2.,  3.,  4.],
        [ 5.,  6.,  7.,  8.],
        [ 9., 10., 11., 12.]])
张量out: (tensor([[1., 2., 3., 4.],
        [5., 6., 7., 8.]]), 
        tensor([[ 9., 10., 11., 12.]]))

torch.split()

  • 方式一: torch.split(a,2,dim=0) 将张量按照行切分,每份有2行,一共切出来几个tensor 由行数除以2决定
  • 方式二 : torch.split(a,[2,3],dim=0)将张量按照行切分,切割的行数按照[2,3]数组分别决定

代码示例

import torch

if __name__ == '__main__':

    a = torch.linspace(1,15,15).view(5,3)
    print("张量a:",a)
    # 方式一 将张量按照行切分,每份有2行,一共切出来几个tensor 由行数除以2决定
    out = torch.split(a,2,dim=0)
    print("方式一:张量out1:",out)

    # 方式二 将张量按照行切分,切割的行数按照[2,3]数组分别决定
    out2 = torch.split(a,[2,3],dim=0)
    print("方式二:张量out2:",out2)

结果

张量a: tensor([[ 1.,  2.,  3.],
        [ 4.,  5.,  6.],
        [ 7.,  8.,  9.],
        [10., 11., 12.],
        [13., 14., 15.]])
方式一:张量out1: (tensor([[1., 2., 3.],
        [4., 5., 6.]]), tensor([[ 7.,  8.,  9.],
        [10., 11., 12.]]), tensor([[13., 14., 15.]]))
方式二:张量out2: (tensor([[1., 2., 3.],
        [4., 5., 6.]]), tensor([[ 7.,  8.,  9.],
        [10., 11., 12.],
        [13., 14., 15.]]))

改变张量的形状

view改变形状,必须元素总个数一致

import torch

x= torch.tensor([[1,2,3],[4,5,6]])

# 一行,元素总个数必须一致
y = x.view(6)

# -1自动匹配行,2列
z = x.view(-1,2)
print(x.size(),y.size(),z.size())
# 结果:torch.Size([2, 3]) torch.Size([6]) torch.Size([3, 2])

单值获取值

import torch

# 如果张量只有一个元素,可以使用item()将值取出,作为python的number
x= torch.tensor([6])

print(x.item())
# 结果: 6

clamp张量裁剪

在深度学习时候,经常需要对张量数值约束在一个范围内,可以使用a.clamp(n,m) ,当张量a中元素小于n的用n替换,大于m的用m替换,之间的保持不变

代码示例

import torch

if __name__ == '__main__':
    a = torch.rand(2,3)*10
    print("裁剪前张量a:",a)
    a.clamp_(3,6)
    print("裁剪后张量a:",a)

结果

裁剪前张量a: tensor([[9.8905, 0.7338, 5.0934],
                    [4.3329, 5.3238, 4.9667]])
裁剪后张量a: tensor([[6.0000, 3.0000, 5.0934],
                    [4.3329, 5.3238, 4.9667]])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值