pytorch学习(二)创建tensor的方法(超详细!)以及tensor和numpy,variable相互转换、pytorch常用函数操作

  • 典型的tensor构建方法 (注意torch.tensor()和troch.Tensor()区别),tensor.FloatTensor,tensor.IntTensor,
  • 使用numpy创建tensor(numpy和tensor相互转换)(Pytorch中的variable, tensor与numpy相互转化的方法链接)
  • torch.ones()、torch.ones_like()、torch.zeros()、torch.eye()、torch.full()、torch.empty()
  • torch.range()、torch.arange()、torch.linspace()、torch.logspace()
  • torch.rand()、torch.rand_like()、torch.randint()、torch,randint_like()、torch.randn()、torch.randn_like()、torch.randperm() 、
    pytorch常用函数
    pytorch常用函数

创建tensor

典型的tensor构建方法
torch.tensor(data, dtype=None, device=None, requires_grad=False)
————————————————
从其他形式转换而来
torch.as_tensor(data, dtype=None, device=None)
torch.from_numpy(ndarray)
————————————————
创建特殊值组成的tensor
torch.zeros(*sizes, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False)
__
torch.zeros_like(input, dtype=None, layout=None, device=None, requires_grad=False)
__
torch.ones(*sizes, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False)
__
torch.ones_like(input, dtype=None, layout=None, device=None, requires_grad=False)
__
torch.eye(n, m=None, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False)
__
torch.empty(*sizes, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False)
__
torch.empty_like(input, dtype=None, layout=None, device=None, requires_grad=False)
__
torch.full(size, fill_value, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False)
__
torch.full_like(input, fill_value, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False)
——————————————
按照步长或者区间创建tensor
torch.arange(start=0, end, step=1, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False)

torch.range(start=0, end, step=1, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False)

torch.linspace(start, end, steps=100, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False)

torch.logspace(start, end, steps=100, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False)

(1)典型的tensor构建方法 (注意torch.tensor()和troch.Tensor()区别)
torch.tensor()

torch.tensor(data, dtype=None, device=None, requires_grad=False)
其中data可以是:list, tuple, array, scalar等类型。
torch.tensor()可以从data中的数据部分做拷贝(而不是直接引用),根据原始数据类型生成相应的torch.LongTensor,torch.FloatTensor,torch.DoubleTensor等

#使用list创建tensor
a = torch.tensor([1,2])
print(a)
print(a.type(),', ',a.dtype,', ',type(a))

在这里插入图片描述

#使用array创建tensor
a = np.zeros(2)
t = torch.tensor(a)
print(t)
print(t.type(),', ',t.dtype,', ',type(t))

在这里插入图片描述
torch.Tensor()

#torch.Tensor()是默认张量类型torch.FloatTensor()的别名
t1 = torch.Tensor([2,3])    #传入的是数据
t2 = torch.Tensor((2,3,4))  #传入的是数据
t3 = torch.Tensor(2,3)      #传入的是shape torch.Tensor(d1,d2,d3,……)
print(t1)
print(t1.type(),t1.dtype)
print(t2)
print(t2.type(),t2.dtype)
print(t3)
print(t3.type(),t3.dtype)

pytorch学习(二)创建tensor的方法(超详细!)以及tensor和numpy,variable相互转换、pytorch常用函数操作_第1张图片

torch.FloatTensor()

'''
最好只使用torch.FloatTensor(d1,d2,d3……)这种形式,即传入的是shape。
避免传入数据,因为可能会与torch.tensor()发生混淆。
torch.tensor()只能传入数据。
'''
t4 = torch.FloatTensor(2,4)

print(t4)
print(t4.type(),t4.dtype)

pytorch学习(二)创建tensor的方法(超详细!)以及tensor和numpy,variable相互转换、pytorch常用函数操作_第2张图片

import torch
t3 = torch.IntTensor(2,3)
print(t3)
print(type(t3),t3.type(),t3.dtype)

在这里插入图片描述

torch.tensor()和torch.Tensor()区别链接

(2)使用numpy创建tensor(numpy和tensor相互转换)
Pytorch中的variable, tensor与numpy相互转化的方法链接

t1为张量,a1为numpy
tensor转换为numpy:numpy_a=t1.numpy()
numpy转换为tensor:torch_a=torch.from_numpy(a1)

'''
使用numpy创建tensor
'''
#使用numpy创建tensor
#使用numpy创建tensor
import numpy as np
import torch

#使用numpy创建tensor
a1 = np.array([1,2,3.3])
a2 = np.ones([2,3])
print(a1.dtype)
print(a2.dtype)

#from_numpy(ndarray) -> Tensor
t1 = torch.from_numpy(a1)
t2 = torch.from_numpy(a2)

print(t1)
print(type(t1),', ',t1.type(),', ',t1.dtype)
print(t2)
print(type(t2),', ',t2.type(),', ',t2.dtype)

pytorch学习(二)创建tensor的方法(超详细!)以及tensor和numpy,variable相互转换、pytorch常用函数操作_第3张图片

'''
tensor转化为numpy
'''
#numpy() -> numpy.ndarray
ar1 = t1.numpy()
print(ar1,ar1.dtype)

在这里插入图片描述
(3)创建特殊值组成的tensor
pytorch官网各种函数用法链接

torch.empty(*sizes, out=None, dtype=None, layout=torch.strided,
 device=None, requires_grad=False, pin_memory=False) → Tensor

Returns a tensor filled with uninitialized data. The shape of the tensor is defined by the variable argument sizes.
返回填充有未初始化数据的张量。 张量的形状由可变的参数大小定义。


参数解释(详细见链接):
pytorch torch.empty()函数参数解释链接

sizes (int...) – a sequence of integers defining the shape of the output tensor. Can be a variable number of arguments or a collection like a list or tuple.
定义输出张量形状的整数序列。 
可以是可变数量的参数,也可以是列表或元组之类的集合。

out (Tensor, optional) – the output tensor 输出张量

dtype (torch.dtype, optional) – the desired data type of returned tensor. Default: if None, uses a global default (see torch.set_default_tensor_type()).
返回张量的所需数据类型。 
默认值:如果为None,则使用全局默认值(请参阅torch.set_default_tensor_type())。
#创建未初始化数据(数据会非常不规则,可能为0)
#后面一定要记得初始化
import torch
t1 = torch.empty([2,3]) #传入的是shape
t2 = torch.empty(2,3)   #传入的是shape
print(t1,t1.type())
print(t2,t2.type())

pytorch学习(二)创建tensor的方法(超详细!)以及tensor和numpy,variable相互转换、pytorch常用函数操作_第4张图片

t1 = torch.empty(2,3)
t3 = torch.empty_like(t1)
print(t1,t1.type())
print(t3,t3.type())

pytorch学习(二)创建tensor的方法(超详细!)以及tensor和numpy,variable相互转换、pytorch常用函数操作_第5张图片
torch.ones()、torch.ones_like()、torch.zeros()、torch.eye()

t1 = torch.ones(3,3)
t2 = torch.ones_like(t1)
t3 = torch.zeros(2,3)    
t4 = torch.eye(3,4)
t5 = torch.eye(3)

print(t1)
print(t2)
print(t3)
print(t4)
print(t5)

pytorch学习(二)创建tensor的方法(超详细!)以及tensor和numpy,variable相互转换、pytorch常用函数操作_第6张图片
torch.full()

#full(size, fill_value)
t1 = torch.full([2,3],7)
t2 = torch.full([],7)#生成标量
t3 = torch.full([1],7)#生成向量
print(t1)
print(t2)
print(t3)

pytorch学习(二)创建tensor的方法(超详细!)以及tensor和numpy,variable相互转换、pytorch常用函数操作_第7张图片
(4)按照步长或者区间创建tensor
torch.arange(start=0, end, step=1)

python中range以及numpy中的arange链接1
python中range以及numpy中的arange链接2

总结:
torch.range(start=1, end=6) 的结果是会包含end的,
而torch.arange(start=1, end=6)的结果并不包含end。
两者创建的tensor的类型也不一样。

而python中的range和numpy中的arange均不包含end(左闭右开),并且,python中的range不支持步长为小数。

torch.arange(start=0, end, step=1)

#torch中arange和range
#arange(start=0, end, step=1)
t1 = torch.arange(0,10)
t2 = torch.arange(0,10,2)
t3 = torch.arange(0,1,0.1)

print(t1,t1.type())
print(t2,t2.type())
print(t3,t3.type())

pytorch学习(二)创建tensor的方法(超详细!)以及tensor和numpy,variable相互转换、pytorch常用函数操作_第8张图片
torch.range(start=0, end, step=1)

''' 
torch.range(start=0, end, step=1)
torch.range()可以用torch.arange()代替,不建议使用torch.range()
'''
t1 = torch.range(0,10)
t2 = torch.range(0,10,2)
t3 = torch.range(0,1,0.1)

print(t1,t1.type())
print(t2,t2.type())
print(t3,t3.type())

pytorch学习(二)创建tensor的方法(超详细!)以及tensor和numpy,variable相互转换、pytorch常用函数操作_第9张图片
(5)
torch.linspace(start, end, steps=100)
pytorch学习(二)创建tensor的方法(超详细!)以及tensor和numpy,variable相互转换、pytorch常用函数操作_第10张图片

#torch.linspace(start, end, steps=100) step为生成的数据个数,默认为100个
#等差
t1 = torch.linspace(0,10,steps=4)  
t2 = torch.linspace(0,10,steps=10)
t3 = torch.linspace(0,10,steps=11)
print(t1,t1.type())
print(t2,t2.type())
print(t3,t3.type())

在这里插入图片描述
logspace(start, end, steps=100, base=10.0)

#logspace(start, end, steps=100, base=10.0)
#生成base(10)的start次方为起始值,base的end次方为终止值的steps个数构成的等比数列
t4 = torch.logspace(0,2,steps=3,base=2)
t5 = torch.logspace(0,-1,steps=2)
print(t4,t4.type())
print(t5,t5.type())

在这里插入图片描述
(6)
torch.rand()、torch.randn()、torch.randint()、torch.randperm()用法链接

你可能感兴趣的:(pytorch)