torch.int32
torch.int64
torch.float32
torch.float64
tensor.dtype
torch.tensor(1)
# 得到标量结果tensor(1)
torch.tensor((1,2,3))
# 得到向量结果tensor([1,2,3])
# 生成shape=torch.Size([1,2,3])的随机torch.int32类型的tensor
torch.IntTensor(*size, out=None)
# 使用
torch.IntTensor(1,2,3)
# 输出结果:
tensor([[[-734048928, 32757, -734048928],
[ 32757, 32, 0]]], dtype=torch.int32)
# 同理生成随机torch.float32类型的tensor
torch.FloatTensor(2,3,4,5)
torch.Tensor(2,3)默认是FloatTensor
随机生成tensor
# randn/rand不需要制定最大最小值
# 在[0,1)之间均匀分布
torch.rand(*size, out=None) # 均匀分布
# 均值为0,方差为1的正太分布
torch.randn(*size, out=None) # 正太分布
# 需要制定最大最小值
torch.randint(low, high, size)
torch,randint_like(input, low=0, high=None)
tensor.int() # int32
tensor.long() # int64
tensor.float()
tensor.double()
cpu_imgs.cuda()
gpu_imgs.cpu()
torch.from_numpy( imgs )
cpu_imgs.numpy()
note:GPU tensor不能直接转为numpy数组,必须先转到CPU tensor。
如果tensor是标量的话,可以直接使用 item() 函数(只能是标量)将值取出来:
print loss_output.item()
# 可以返回值和索引. numpy不可以.
min_value, min_index=tensor.min(dim=1)
1. torch,numpy都有这种索引方法, 其中range(6)可以用相应的列表代替.
x.shape(6,2,4)
x[range(6), np.array([0,1])]
x_t[range(6), torch.tensor([0,1]) ]
x_t[[0,1], [0,1]],意一样,但是取第一个维度的0,1; 然后取第二个维度的[0,1].注意这不是切片,这是可以随意间隔的取.
# 采用None索引,相当于扩充维度
x = np.arange(12).reshape(6,2)
x_t = torch.tensor(x)
# Numpy array
x[None,:].shape # (1,6,2)
x[:,None,:].shape # (6,1,2)
x[:,:,None].shape # (6,2,1)
# Torch tensor
x_t[None,:].shape # torch.size([1,6,2])
x_t[:,None,:].shape # torch.size([6,1,2])
x_t[:,:,None].shape # torch.size([6,2,1])
返回当前张量在某维扩展更大后的张量。扩展(expand)张量不会分配新的内存,只是在存在的张量上创建一个新的视图(view),一个大小(size)等于1的维度扩展到更大的尺寸。也就是说,如果改变被扩展的张量,那么扩展部分和被扩展部分都会发生改变.
import torch
>> x = torch.tensor([1, 2, 3])
>> x.expand(2, 3) # 长度不为1的维度,要么置-1, 要么长度要相等.
tensor([[1, 2, 3],
[1, 2, 3]])
>> x = torch.randn(2, 1, 1, 4)
>> x.expand(-1, 2, 3, -1)
torch.Size([2, 2, 3, 4])
沿着特定的维度重复这个张量,和expand()不同的是,这个函数拷贝张量的数据。
import torch
>> x = torch.tensor([1, 2, 3])
>> x.repeat(3, 2)
tensor([[1, 2, 3, 1, 2, 3],
[1, 2, 3, 1, 2, 3],
[1, 2, 3, 1, 2, 3]])
>> x2 = torch.randn(2, 3, 4)
>> x2.repeat(2, 1, 3).shape
torch.Tensor([4, 3, 12])