买的书到了,草草一翻,补下基础还是有必要的。
这个总结可写的比文档好多了。
函数名 | 说明 |
torch.tensor() | 传入数据如 tensor([2,3]) |
torch.zeros(),torch.zeros_like() | 全0 |
torch.ones(),torch.ones_like() | 全1 |
torch.full(),torch.full_like() | full((2,3),8) 全为8 |
torch.empty() | 不指定数据 |
torch.eye() | 对角线为1的 |
torch.arange(),torch.range(),torch.linspace() | 各元素等差,注意区别参数用法 |
torch.logspace | 等比 |
torch.rand(),torch.rand_like() | 标准均匀分布 |
torch.randn(),torch.randn_like(),torch.normal() | 标准正态分布 |
torch.randint(),torch,randint_like() | 离散均匀分布 |
torch.bernoulli() | {0,1}上的两点分布 |
torch.multinomial() | {0,1,…,n-1}上的多点分布 |
torch.randperm() | 0~n-1的一个随机排列 |
三个不改变元素相对位置
reshape() // view()
squeeze()
unsqueeze()
与numpy互转
nparray = x.numpy()
torch.from_numpy(nparray)
查看属性
x.size() #可以看具体数值,跟size要区别一瞎
x.data #tensor类型
x.item() #tensor转成array类型
x.dim #维数
x.device #取出来之后可以赋值给其他tensor。 device =x.device, y.to(device)。
改变类型
直接转化 , 声明时
torch.uint8 -> x.byte(),只能torch.ByteTensor()
torch.int32 -> x.short() ,torch.ShortTensor(x)
torch.int32 -> x.int() ,torch.IntTensor(x)
torch.int64 -> x.long() , torch.LongTensor(x)
torch.float32 -> x.float() , torch.FloatTensor(x)
torch.float64 -> x.double() , torch.DoubleTensor(x)
tensor_1 = torch.FloatTensor(2,3) #shape=(2,3)
x.type_as(tesnor_1) # set x to float32
指定设备
声明时 device = torch.device('cuda')
或者x.to(device)
第一个是可以创建, shape相同, 数据类型相同.
>>> x = torch.randn(3, dtype=torch.float64)
>>> torch.zeros_like(x)
tensor([ 0., 0., 0.], dtype=torch.float64)
>>> torch.zeros_like(x, dtype=torch.int)
tensor([ 0, 0, 0], dtype=torch.int32)
当然如果是单纯想要得到属性与前者相同的Tensor, 但是shape不想要一致:
>>> x = torch.randn(3, dtype=torch.float64)
>>> x.new_ones(2) # 属性一致
tensor([ 1., 1.], dtype=torch.float64)
>>> x.new_ones(4, dtype=torch.int)
tensor([ 1, 1, 1, 1], dtype=torch.int32)
//主要参考<<神经网络与pytorch实战>>