创建tensor
导入数据
从numpy导入数据
导入的数据值和数据类型不变,只是从numpy数组变为了张量。
从list导入数据。
torch.tensor() 根据数据生成张量,建议有数据的情况尽量使用小写的生成,有助于区分。
torch.FloatTensor() 既可以根据已有数据来生成,也可以根据给出的shape数据生成。
创建未初始化张量
torch.empty() :给定shape可以生成未初始化的数据。
torch.Tensor(): 若为指定生成张量类型,则生成默认的类型,一般是FlaotTensor。
torch.FloatTensor( ) : 给定shape可以生成未初始化的浮点型数据。也可以根据具体的数据生成张量。
torch.IntTensor( ) : 给定shape可以生成未初始化的整型数据。也可以根据具体的数据生成张量。
生成的额数据是随机的,可能很大或者很小,一般不能直接用于计算,需要后续的赋值。
初始化张量
随机生成
torch.rand() : 初始化的每一个数据都是在从0 到1 之间随机均匀选取的。
torch.rand_like() : 接收的是一个tensor张量,读取其shape数据,之后再用torch.rand()进行从0到1的随机均匀选取。
torch.randint(low,high,size) : 这个方法前两个参数是取值的范围,左闭右开。第三个参数是传入一个tuple类型的size参数。
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。后面括号中的参数,需要包含浮点数,全是小数的时候会报错。
torch.randperm(n) : 生成0到n-1 的一维张量,顺序是打散了的。
根据数值要求
torch.full([2,3],5) : 表示生成一个2*3的矩阵,里面的数据全部是5。数据的类型为默认类型。
若需要生成标量,则传入中括号空值;生成一维tensor张量只需要传入1就行。
torch.arange(0,10) : 生成从0开始到但不包括10的等差数列。也可以传入一个数作为步长。
torch.range(0,10) : 也可以实现上面函数一样的功能。但该函数之后会被删除,所以不推荐使用。
torch.linspace(start, end, steps) : 从start到end之间(两数闭区间)按照steps进行均分,之后返回steps个数这么多的等差数列。
torch.logspace(start, end, steps,base) : 取得的是两个数的对数,在两个数之间以步数取均值。比如第三个例子是从10的0次方到10的-1次方,平均来取。base是设置对数的基数,默认值为10.
torch.ones() : 生成全是1的张量,维度由传入的数字确定,可以传入元组或者列表。
torch.zeros() : 同上
torch.eye(): 生成对角矩阵,但是传入的参数,只能是两个或者一个。更高维度的将不适用。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-l9Pi4Qqd-1605532660784)(https://cdn.jsdelivr.net/gh/rts-coder/pytorch-learning/img/image-20201110194540300.png)]
运用的例子。比如数据的第一排表示的是人,后面分别表示的是数学成绩和语文成绩,我们希望两个数据集能够同步。比如人都从第一行换到第二行。
设置默认类型
torch.tensor() : 里面的数据类型会给定默认的数据类型。比如整数为LongTensor类型张量,小数的为默认设置的张量类型。生成的torsor张量数据类型不会被默认类型改变。
torch.Tensor():无论是整数还是小数,全部设置为默认的tensor类型。生成的tensor数据类型会受到默认设置的改变。
区别一:
torch.Tensor(data)
是将输入的data转化torch.FloatTensor
torch.tensor(data)
:(当你未指定dype
的类型时)将data转化为torch.FloatTensor
、torch.LongTensor
、torch.DoubleTensor
等类型,转化类型依据于data的类型或者dtype
的值
torch.set_default_tensor_type(torch.DoubleTensor) 使用该方法可以设置默认类型。
参数解析
使用dir可以查看里面有哪些工具,
使用help()可以查看如何使用工具
创建一个未被初始化数值的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参数:
layout参数:
表示张量内存布局的对象。Strides
是一个整数型列表:k-th stride
表示在张量的第k维从一个元素跳转到下一个元素所需的内存。
#12表示从最高维度的一个元素到下一个元素所需内存
#4 表示从在第二个维度中一个元素跳到下一个元素所需内存
#1 表示在第三个也就是最后一个维度红一个元素到下一个元素所需内存