import torch
a=torch.randn(2,3)#随机生成2行3列的矩阵,默认torch.FloatTensor类型
print(a)
print(a.type())
print(a.shape)
输出
tensor([[ 0.8583, 0.0906, -1.2922],
[-0.6729, -0.6208, -1.0874]])
torch.FloatTensor
torch.Size([2, 3])
import cv2
a=torch.rand(1,2,3)#生成1页2行3列的3维张量,数值[0,1]随机均匀生成
print(a)
print(a.type())
print(a.shape)
输出
tensor([[[0.2478, 0.3851, 0.9504],
[0.8396, 0.1004, 0.4696]]])
torch.FloatTensor
torch.Size([1, 2, 3])
创建tensor:
a=torch.tensor(列表(标量))
区别于a=torch.Tensor(2,3),创建一个shape为2行3列的未初始化的tensor
a=torch.rand()
a=torch.randn()
a=torch.full([2,3],7) 创建一个2行3列值全为7的tensor
torch.linespace/logspace线性等分/对数等分
索引与切片
lst[start:stop:step] 列表的切片
lst[index] 列表的索引
import torch
a=torch.rand(4,3,28,28)
print(a[0].shape)
print(a[0,0].shape)
print(a[0,0,0,0])#索引
print(a[0:2,:,:3,:].shape)#切片
输出
torch.Size([3, 28, 28])
torch.Size([28, 28])
tensor(0.4941)
torch.Size([2, 3, 3, 28])
print(a.index_select(2,torch.arange(8)).shape)
(4,3,28,28)对应索引0,1,2,3,取第三维度索引0-7
torch.Size([4, 3, 8, 28]
维度变化
import torch
a=torch.rand(4,3,28,28)
print(a.shape)
print(a.unsqueeze(0).shape)#在第一个维度之前增加一个维度
print(a.unsqueeze(0).squeeze(0).shape)#增加一个维度再挤压掉一个维度,只能挤压1所在的维度
print(a.view(4,2352).shape)#2352=3*28*28
b=torch.rand(1,32,1,1)
print(b.expand(4,32,28,56).shape)#不断复制首元素改变shape便于运算,只能改变1所在的维度
输出
torch.Size([4, 3, 28, 28])
torch.Size([1, 4, 3, 28, 28])
torch.Size([4, 3, 28, 28])
torch.Size([4, 2352])
torch.Size([4, 32, 28, 56])
c=torch.rand(4,3,28,28)
print(c.transpose(1,3).shape)#按索引交换两个维度
print(c.permute(0,2,3,1).shape)#按索引对维度重新排序
输出
torch.Size([4, 28, 28, 3])
torch.Size([4, 28, 28, 3])