2、pytorch-创建tensor

本文详细介绍了PyTorch中创建和操作张量的方法,包括从numpy和list导入数据,创建未初始化和初始化张量,以及各种初始化策略如随机生成、按数值要求生成等。还探讨了张量的内存布局、数据类型设置,并提供了多个实例来说明如何同步不同数据集。同时,文章提到了torch.set_default_tensor_type()函数用于设置默认张量类型。
摘要由CSDN通过智能技术生成

创建tensor

导入数据

从numpy导入数据

导入的数据值和数据类型不变,只是从numpy数组变为了张量。

image-20201101142624144

从list导入数据。

torch.tensor() 根据数据生成张量,建议有数据的情况尽量使用小写的生成,有助于区分。

torch.FloatTensor() 既可以根据已有数据来生成,也可以根据给出的shape数据生成。

image-20201108143007496

创建未初始化张量

torch.empty() :给定shape可以生成未初始化的数据。

torch.Tensor(): 若为指定生成张量类型,则生成默认的类型,一般是FlaotTensor。

torch.FloatTensor( ) : 给定shape可以生成未初始化的浮点型数据。也可以根据具体的数据生成张量。

torch.IntTensor( ) : 给定shape可以生成未初始化的整型数据。也可以根据具体的数据生成张量。

生成的额数据是随机的,可能很大或者很小,一般不能直接用于计算,需要后续的赋值。

image-20201115105901353

初始化张量

随机生成

torch.rand() : 初始化的每一个数据都是在从0 到1 之间随机均匀选取的。

torch.rand_like() : 接收的是一个tensor张量,读取其shape数据,之后再用torch.rand()进行从0到1的随机均匀选取。

torch.randint(low,high,size) : 这个方法前两个参数是取值的范围,左闭右开。第三个参数是传入一个tuple类型的size参数。

image-20201108143228905

torch.randn(3,3) : 根据正态化生成数据,N(0,1), 以0为均值,以1为方差生成数据。

torch.normal(mean=3 ,std=torch.arange(1,0,-0.1)) : mean是生成数据的平均值,std是数据的方差,后面表示方差从1到0以步长0.1减小。也可以只填写前面两个值,默认步长为1。后面括号中的参数,需要包含浮点数,全是小数的时候会报错。

image-20201108143333136

torch.randperm(n) : 生成0到n-1 的一维张量,顺序是打散了的。

image-20201110194905773

根据数值要求

torch.full([2,3],5) : 表示生成一个2*3的矩阵,里面的数据全部是5。数据的类型为默认类型。

若需要生成标量,则传入中括号空值;生成一维tensor张量只需要传入1就行。

image-20201110194028715

torch.arange(0,10) : 生成从0开始到但不包括10的等差数列。也可以传入一个数作为步长。

torch.range(0,10) : 也可以实现上面函数一样的功能。但该函数之后会被删除,所以不推荐使用。

image-20201110194130047

torch.linspace(start, end, steps) : 从start到end之间(两数闭区间)按照steps进行均分,之后返回steps个数这么多的等差数列。

torch.logspace(start, end, steps,base) : 取得的是两个数的对数,在两个数之间以步数取均值。比如第三个例子是从10的0次方到10的-1次方,平均来取。base是设置对数的基数,默认值为10.

image-20201110194337912

torch.ones() : 生成全是1的张量,维度由传入的数字确定,可以传入元组或者列表。

torch.zeros() : 同上

torch.eye(): 生成对角矩阵,但是传入的参数,只能是两个或者一个。更高维度的将不适用。

image-20201110194516813

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-l9Pi4Qqd-1605532660784)(https://cdn.jsdelivr.net/gh/rts-coder/pytorch-learning/img/image-20201110194540300.png)]

运用的例子。比如数据的第一排表示的是人,后面分别表示的是数学成绩和语文成绩,我们希望两个数据集能够同步。比如人都从第一行换到第二行。

image-20201110194930648

设置默认类型

torch.tensor() : 里面的数据类型会给定默认的数据类型。比如整数为LongTensor类型张量,小数的为默认设置的张量类型。生成的torsor张量数据类型不会被默认类型改变。

torch.Tensor():无论是整数还是小数,全部设置为默认的tensor类型。生成的tensor数据类型会受到默认设置的改变。

区别一:

  • torch.Tensor(data)是将输入的data转化torch.FloatTensor
  • torch.tensor(data):(当你未指定dype的类型时)将data转化为torch.FloatTensortorch.LongTensortorch.DoubleTensor等类型,转化类型依据于data的类型或者dtype的值

torch.set_default_tensor_type(torch.DoubleTensor) 使用该方法可以设置默认类型。

image-20201110195516251

image-20201110195538602

参数解析

使用dir可以查看里面有哪些工具,

image-20201115112755836

使用help()可以查看如何使用工具

image-20201115112817009

创建一个未被初始化数值的tensor,tensor的大小是由size确定

size: 定义tensor的shape ,这里可以是一个list 也可以是一个tuple

out: 根据之前已有张量,则根据其数据复制给新的张量。之后将该数据重新复制给改变量。如果之前没有改张量,则相当于将该张量赋值。

dtype:(可选)我不设置值 默认值就是torch.set_default_tensor_type制定的值,如果需要设置那就是torch.dtype的那几个。作用是指定返回tensor的数据类型

layout:(可选)值为 torch.layout。 torch.layout表示torch.Tensor内存布局的对象。有torch.strided(dense Tensors 默认)并为torch.sparse_coo(sparse COO Tensors)提供实验支持。
torch.strided代表密集张量,是最常用的内存布局。每个strided张量都会关联 一个torch.Storage,它保存着它的数据。这些张力提供了多维度, 存储的strided视图。Strides是一个整数型列表:k-th stride表示在张量的第k维从一个元素跳转到下一个元素所需的内存。

device:表现 torch.Tensor被分配的设备类型的类,其中分为’cpu’ 和 ‘cuda’两种。没有设置就使用当前设备。

requires_grad: (可选)是bool 类型的值,默认值是False 是否计算梯度

pin_memory:是否存于锁页内存

out参数:

image-20201115111851018

layout参数:

表示张量内存布局的对象。Strides是一个整数型列表:k-th stride表示在张量的第k维从一个元素跳转到下一个元素所需的内存。

#12表示从最高维度的一个元素到下一个元素所需内存
#4 表示从在第二个维度中一个元素跳到下一个元素所需内存
#1  表示在第三个也就是最后一个维度红一个元素到下一个元素所需内存

image-20201115121921465

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值