目录
1.Tensor的组合/拼接
2.Tensor的切片
3.Tensor的变形操作
4.Tensor的填充操作
5.Tensor的频谱操作(傅里叶变换)
6.Pytorch简单编程技巧
(1条消息) Pytorch框架的学习(1)_An efforter的博客-CSDN博客
(1条消息) Pytorch框架的学习(2)_An efforter的博客-CSDN博客
torch.cat(seq, dim=0, out=None):按照已经存在的维度进行拼接
import torch
a= torch . zeros ( (2,4))
b = torch. ones ( (2,4))
out = torch.cat( ( a,b ),dim=0 )
print(out)
out = torch.cat( ( a,b ),dim=1)
print(out)
torch.stack(seq, dim=0, out=None):按照新的维度进行拼接
a = torch. linspace(1,6,6 ).view(2,3)
b = torch.linspace(7,12,6 ).view(2,3)
print(a)
print(b)
out = torch.stack( ( a, b), dim=0)
print(out)
print(out.shape) #结果变成了三维
torch.chunk(tensor, chunks, dim=0)︰按照某个维度平均分块(最后一个可能小于平均值)
import torch
a=torch.rand(3,4)
out=torch.chunk(a,2,dim=0)
print(out[0],out[0].shape)
print(out[1],out[1].shape)
print("------------------------------")
#一维与二维
out1=torch.chunk(a,2,dim=1)
print(out1[0],out1[0].shape)
print(out1[1],out1[1].shape)
torch.split(tensor, split_size_or_sections, dim=0):按照某个维度依照第二个参数给出的list或者int进行分割tensor
out2=torch.split(a,2,dim=0)
print(out2[0],out2[0].shape)
print(out2[1],out2[1].shape)
这里是按照int数来切分的,1,3,6.
import torch
a=torch.rand(10,4)
out3=torch.split(a,[1,3,6],dim=0)
for t in out3:
print(t,t.shape)
torch.reshape(input, shape)
torch.t(input):只针对2D tensor转置
import torch
a=torch.rand(3,2)
print(a)
#重新换行列,但是保持值得个数
out=torch.reshape(a,(1,6))
print(out)
#对于2D进行转置
print(torch.t(out))
torch.transpose(input, dim0, dim1):交换两个维度
这里维数的转换关系,一定要清楚,不清楚别看,浪费时间。先去整理好张量与维数的关系。关注我,有空时候,我专门出一篇。
b=torch.rand(1,2,3) #这里是一个2*3的矩阵
#注意注意,这里一定注意,知道维数的转换关系。
out1 = torch.transpose(b,0,1) #转换之后变成了两个 1*3的矩阵,是不是就是三维矩阵
print(b,b.shape)
print(out1,out1.shape)
torch.squeeze(input, dim=None, out=None):去除那些维度大小为1的维度
torch.unsqueeze(input, dim, out=None):在指定位置添加维度
out2=torch.squeeze(a)
print(out2)
print(out2.shape)
out3=torch.unsqueeze(a,-1)
print(out3)
print(out3.shape)
torch.unbind(tensor, dim=0):去除某个维度
这里是把三维[3,2,1],也就是三个2*1的矩阵,unbind函数dim=0,就是从0轴去除,那就变成了三个独立的2*1的矩阵,可以换成1维与二维德,多尝试一下,一定要清楚tensor与dim的关系。我自己也好晕,多写代码,多输出。
out4=torch.unbind(out3,dim=0)
print(out4)
torch.flip(input, dims):按照给定维度翻转张量
import torch
a=torch.rand(3,2)
print(a)
print(torch.flip(a,dims=[0])) #换成1轴,在下面
这是对于0轴的翻转(看清楚):
这是对于1轴的翻转(看清楚):
torch.rot90(input, k, dims):按照指定维度和旋转次数进行张量旋转:
k默认就是1,k=0与k=4是不变的。如果是-1,那就是顺时针旋转一下
torch.full((2,3),3.14)
tensor([[ 3.14,3.14,3.14],[ 3.14,3.14,3.14])
很简单就是先设定 2*3的矩阵,全部填充3.14。
模型的保存/加载
并行化
分布式
Tensor on GPU
如下示例代码:
if torch.cuda.is_available():
device = torch.device(" cuda")# GPU
y = torch.ones_like(x, device=device) #直接创建一个在GPU上的Tensor = x.to(device)
#等价于.to("cuda")
z=x +y
print(z)
print(z.to("cpu", torch.double))
# to()还可以同时更改数据类型
out=out.to(torch.device("cuda")) #调用到gpu上面去运行
print("gpu:",out.is_cuda)
flip=torch.flip(out,dims=[0]) #在0轴上作出反转,所以图片是反的
out=out.to(torch.device("cpu")) #调用到gpu上面去运行
print("gpu:",out.is_cuda)
Tensor的相关配置
Tensor与numpy的相互转换
import torch
import numpy as np
import cv2
img=cv2.imread("pytorch.jpg")
# a=np.zeros([2,2])
out=torch.from_numpy(img) #numpy转化为torch(不了解的了解一下,跟pytorch差不多)
print(out)
print(out.shape) #因为这里读出的是图片,应该是H*W*C(通道)
flip=torch.flip(out,dims=[0]) #在0轴上作出反转,所以图片是反的
data=flip.numpy() #torch进行转化为numpy
cv2.imshow("image",data) #可视化
cv2.waitKey(0)