首页 > 其他分享 >第二章(4)Pytorch安装和张量创建

第二章(4)Pytorch安装和张量创建

时间:2023-04-15 12:33:21浏览次数:46  
标签:tensor 创建 torch 张量 Pytorch print 第二章 函数

第二章(4)Pytorch安装和张量创建 image.png

1. Pytorch基础

PyTorch是一个基于Python的科学计算库,也是目前深度学习领域中最流行的深度学习框架之一。PyTorch的核心理念是张量计算,即将数据表示为张量,在计算时使用自动微分机制优化模型。在使用PyTorch进行深度学习时,了解张量的基础操作、类型、大小等知识是非常重要的。

本文将介绍如何在PyTorch的安装、创建张量、了解张量的类型与大小、进行张量操作、索引、切片和连接、以及使用CUDA张量进行计算加速。

1.1 Pytorch安装

PyTorch支持Windows、Linux和MacOS等操作系统。

1.1.1 Linux和Windows

在Linux和Windows中,可以通过pip命令安装PyTorch和对应的torchvision和torchaudio包。如下所示:

pip install torch==1.10.0 torchvision==0.11.0 torchaudio==0.10.0

需要注意的是,这里的命令只能安装CPU版本的PyTorch。如果需要安装GPU版本的PyTorch,需要前往官网寻找对应版本的CUDA或ROCm支持。

1.1.2 ROCm和CUDA

在使用ROCm或CUDA时,需要单独指定版本号。以CUDA 10.2为例,可以使用以下命令来安装GPU版本的PyTorch:

pip install torch==1.10.0+cu102 torchvision==0.11.0+cu102 torchaudio==0.10.0 -f https://download.pytorch.org/whl/torch_stable.html

需要注意的是,+cu102表示使用CUDA 10.2,而+f对应的URL是从PyTorch官方网站下载PyTorch库和对应版本的依赖项。

更多安装命令,请参考:Previous PyTorch Versions | PyTorch

1.2 创建张量

1.2.1 直接创建

直接创建是最基本的创建张量的方法,我们可以使用torch.tensor()函数来直接创建一个张量。该函数会根据输入的数据类型自动推断所创建的张量的数据类型,大小和形状等属性。例如,我们可以用以下代码创建一个大小为(2, 3)的浮点型张量:

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

实验结果:

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

上述代码创建了一个大小为(2, 3)的张量,并赋值给变量x。张量的内容是由列表表示的,也就是[[1,2,3],[4,5,6]]。张量中的元素类型为浮点型,这是由可选参数dtype指定的,若不指定,则为默认的参数类型。

除了torch.tensor()函数,我们还可以使用torch.from_numpy()函数来创建张量。这个函数会把一个NumPy数组转换为PyTorch中的张量。这里需要注意的是,该函数创建的张量和原始NumPy数组共享底层的存储空间,也就是说,如果我们修改了张量中的某个元素,原始的NumPy数组也会受到影响。以下代码是一个例子:

import numpy as np  
import torch  
  
x = np.array([[1, 2, 3], [4, 5, 6]])  #定义的numpy类型  
y = torch.from_numpy(x)  
print(y)  
  
y[0][2] = -1  
print(x)

实验结果:

tensor([[1, 2, 3],
        [4, 5, 6]])
[[ 1  2 -1]
 [ 4  5  6]]

上述代码中,我们创建了一个NumPy数组x,接着使用torch.from_numpy()函数将其转换为张量y。然后我们修改了张量y中的第一个元素的第三个分量,并且打印了原始的NumPy数组x。可以看到,由于yx共享底层的存储空间,所以在修改了y之后,x也被修改了。

1.2.2 通过数值创建

除了直接创建以外,我们还可以使用一些预定义的函数来生成特定的张量,例如全零张量,全一张量,以及随机张量等。

(1)全零张量和全一张量

使用torch.zeros()函数和torch.ones()函数可以分别创建全零张量和全一张量。示例代码如下:

import torch  
  
x = torch.zeros((2, 3), dtype=torch.float32)  
y = torch.ones((2, 3), dtype=torch.float32)  
  
print(x)  
print(y)

实验结果:

tensor([[0., 0., 0.],
        [0., 0., 0.]])
tensor([[1., 1., 1.],
        [1., 1., 1.]])

上述代码中分别使用torch.zeros((2, 3))函数和torch.ones((2, 3))函数创建了维度相同的两个张量。同时,也指定了所创建张量的元素类型为浮点型dtype=torch.float32

tips:在实际应用中,全零张量和全一张量经常用于初始化神经网络中的权重和偏置等参数。

(2)依据指定值创建

创建相同数值的指定值张量,采用的函数为torch.full(),示例如下:

import torch  
  
x = torch.full((2, 3), 8)  
print(x)

实验结果:

tensor([[8., 8., 8.],
        [8., 8., 8.]])

我们使用torch.full((2, 3), 8)函数创建了一个大小为(2, 3)的张量,并将其中的所有元素设置为7

(3)随机张量

对于深度学习中的模型来说,随机张量是非常重要的。在PyTorch中,我们可以使用torch.randn()torch.rand()等函数来生成正态分布和均匀分布的随机张量。示例如下:

import torch  
  
x = torch.randn((2, 3))  
y = torch.rand((3, 4))  
  
print(x)  
print(y)

实验结果:

tensor([[-1.2964,  0.8592, -0.5766],
        [ 0.9974, -0.7744, -0.6711]])
tensor([[0.6243, 0.9297, 0.7626, 0.4891],
        [0.4266, 0.7566, 0.3390, 0.5008],
        [0.5415, 0.9943, 0.0577, 0.4002]])

上述代码中,我们使用了torch.randn((2, 3))torch.rand((3, 4))函数来分别创建大小为(2, 3)(3, 4)的张量。其中,torch.randn()函数生成元素值服从标准正态分布的张量,而torch.rand()函数生成元素值在区间[0,1)之间均匀分布的张量。

(4)等差序列的创建

torch.arange()函数和torch.linspace()函数可以创建等差序列。其中,torch.arange()函数的步长是自定义的,而torch.linspace()函数则是在给定的范围内均匀地分布元素。示例如下:

import torch  
  
x = torch.arange(0, 10, 2)  
y = torch.linspace(0, 1, 5)  
  
print(x)  
print(y)

实验结果:

tensor([0, 2, 4, 6, 8])
tensor([0.0000, 0.2500, 0.5000, 0.7500, 1.0000])

在上述代码中,我们通过调用torch.arange(0, 10, 2)函数来创建步长为2,范围在[0,10)内的等差序列。同时,我们还使用了torch.linspace(0, 1, 5)函数来生成在区间[0, 1]内五个等距的数值。

(5) 单位矩阵的创建

torch.eye(n)可以创建大小为(n, n)的单位矩阵,该矩阵的对角线上的元素都是1。示例如下:

import torch

x = torch.eye(3)

print(x)

实验结果:

tensor([[1., 0., 0.],
        [0., 1., 0.],
        [0., 0., 1.]])

在上述代码中,我们创建了大小为(3, 3)的单位矩阵,并赋值给变量x

1.2.3 利用已有的张量创建新的张量

在PyTorch中,我们还可以利用已有的张量创建新的张量。下面介绍一下常用的这类函数。

(1) torch.zeros_like()torch.ones_like()函数

torch.zeros_like()torch.ones_like()函数是用处创建与某个张量大小相同的全0或者1的张量,示例如下:

import torch  
  
x = torch.tensor([[1, 2, 3], [4, 5, 6]])  
y = torch.zeros_like(x)  
z = torch.ones_like(x)  
  
print(x)  
print(y)  
print(z)

实验结果:

tensor([[1, 2, 3],
        [4, 5, 6]])
tensor([[0, 0, 0],
        [0, 0, 0]])
tensor([[1, 1, 1],
        [1, 1, 1]])

在上述代码中,我们首先创建一个大小为(2, 3)的张量x,然后使用torch.zeros_like(x)torch.ones_like(x)函数分别创建了与x大小相同的全0张量y和全1张量z

(2) torch.cat()函数

torch.cat()函数可以沿着指定的维度将多个张量拼接成一个新的张量。例如,我们可以将两个大小相同的张量按行(维度0)拼接起来。示例代码如下:

import torch  
  
x = torch.tensor([[1, 2, 3], [4, 5, 6]])  
y = torch.tensor([[7, 8, 9], [10, 11, 12]])  
z = torch.cat([x, y], dim=0)  
p = torch.cat([x, y], dim=1)  
  
  
print(x)  
print(y)  
print(z)  
print(p)

实验结果:

tensor([[1, 2, 3],
        [4, 5, 6]])
tensor([[ 7,  8,  9],
        [10, 11, 12]])
tensor([[ 1,  2,  3],
        [ 4,  5,  6],
        [ 7,  8,  9],
        [10, 11, 12]])
tensor([[ 1,  2,  3,  7,  8,  9],
        [ 4,  5,  6, 10, 11, 12]])

这段代码创建了两个包含有相同维度的张量 xy,分别表示 2 行 3 列的矩阵。然后,使用 torch.cat() 函数将两个张量按照指定的维度进行拼接,生成了一个新的张量 zp。其中 dim=0 表示按照第一维(行)进行拼接,而 dim=1 表示按照第二维(列)进行拼接。最后,打印了四个张量的值。可以看到,xy 没有变化,而 zp 分别包含了 xy 的所有元素。其中 z 为拼接后的形状为 4 行 3 列的矩阵,而 p 为拼接后的形状为 2 行 6 列的矩阵。


想要了解更多的技术干货及学习教程,欢迎关注微信公众号“安静到无声成长之路”或扫描二维码添加关注。

宣传用.png

标签:tensor,创建,torch,张量,Pytorch,print,第二章,函数
From: https://blog.51cto.com/lihuanyu/6192272

相关文章

  • [附CIFAR10炼丹记前编] CS231N assignment 2#5 _ pytorch 学习笔记 & 解析
    pytorch环境搭建课程给你的环境当中,可以直接用pytorch,当时其默认是没有给你安装显卡支持的.如果你只用CPU来操作,那其实没什么问题,但我的电脑有N卡,就不能调用. 考虑到我已有pytorch环境(大致方法就是确认pytorch版本和对应的cuda版本安装cuda,再按照官网即可,建议自......
  • 从零开始配置深度学习环境:CUDA+Anaconda+Pytorch+TensorFlow
    本文适用于电脑有GPU(显卡)的同学,没有的话直接安装cpu版是简单的。CUDA是系统调用GPU所必须的,所以教程从安装CUDA开始。CUDA安装CUDA是加速深度学习计算的工具,诞生于NVIDIA公司,是一个显卡的附加驱动。必须使用NVIDIA的显卡才能安装,可以打开任务管理器查看自己的硬件设备。下载CU......
  • Pytorch one-hot编码
    1.引言在我们做分割任务时,通常会给一个mask,但训练时要进行onehot编码。2.codeimporttorchif__name__=='__main__':label=torch.zeros(size=(1,4,4),dtype=torch.int)label[:,2:4]=1print(label.shape)print(label)label_one_hot......
  • 使用Pytorch实现强化学习——DQN算法
    使用Pytorch实现强化学习——DQN算法强化学习的主要构成强化学习主要由两部分组成:智能体(agent)和环境(env)。在强化学习过程中,智能体与环境一直在交互。智能体在环境里面获取某个状态后,它会利用该状态输出一个动作(action)。然后这个动作会在环境之中被执行,环境会根据智能体采取的动......
  • 第二章部分习题
    用穷举法找出1~100中的质数代码:usingnamespacestd;intmain(){intk=1;for(inti=1;i<=99;i++){k++;inta=0;for(intj=2;j<=i/2;j++){if(k%j==0){......
  • PyTorch深度学习建模与应用--每日最高温度预测
    1.python2.JupyterLabhttp://jupyter.org/安装jupyterlab只需要在命令提示符中输入pipinstalljupyterlab启动则在命令提示符中输入jupyterlabhttps://jupyter.org/try-jupyter/lab/  可以在这里进行尝试。3.PyTorchpytorch的配置可以看这篇https://blog.csdn.net/m0_7257......
  • 空调负荷需求响应matlab 建立空调负荷的聚合模型,按照第二章考虑调节空调温度对空调响
    空调负荷需求响应matlab编程语言:matlab内容:建立空调负荷的聚合模型,按照第二章考虑调节空调温度对空调响应潜力的影响,程序结果充分说明随着上调温度的增大,响应程度逐渐增大。程序运行稳定ID:8350676488344145......
  • C++第二章课后习题2-29,2-30
    2-29在程序中定义一个整型变量,倔以1~100的值。要求用户猜这个数,比较两个数的大小,把结果提示给用户,直到猜对为止。分别使用while、do…while语句实现循环。#include<iostream>usingnamespacestd;intmain(){inta=56;cout<<"请输入您要猜的数(0......
  • 第二章 MATLAB语言基础
    一、基本概念1、MATALAB主要数据类型 2、整数类型MATLAB中提供了8种内置的整数类型,如下:由于MATLAB中数值的默认存储类型是双精度浮点类型,因此必须通过表2-1中列出的转换函数将双精度浮点数值转换成指定的整数类型。在转换中,MATLAB默认将待转换数值转换为最近......
  • C++教材第二章课后习题 2-27
    用穷举法找出1~100的质数并显示出来,分别用while,do...while,for循环语句实现1#include<iostream>//for循环语句的实现2#include<cmath>3usingnamespacestd;4intmain()5{6inti,k,m;7for(k=2;k<=100;k++)//从2~1......