本文主要介绍Python一些常见的数据格式之间的转换方法,尤其是和Pytorch中tensor类型进行相关转换的数据操作。
Numpy创建的默认浮点类型是np.float64
Numpy创建的整数ndarrays是np.int32
1.直接使用torch.tensor函数--------深拷贝
2.使用torch.from_numpy方法------浅拷贝
这两个方法比较而言,使用torch.from_numpy方法更好,更安全。
当只有一个元素(size =1)时,利用item()方法可以转化标量。
1.numpy自带函数 nump.tolist()——要注意列表中数据的维度
1.使用Image.fromarray()方法
注意:Image.fromarray()对输入的dtype的要求是uint8类型
torch中tensor默认的浮点类型是float32类型
torch中tensor默认的整数类型是int64类型
【注意和numpy的区别】
首先看一下torch.tensor()和torch.Tensor()这两个方法。两者都是深拷贝方法,返回张量的同时,与原数据不共享内存,因此不受原数据改变的影响。
再来了解一下的区别:
创建空的tensot的方法:
#两种方法
torch.Tensor()
torch.tensor(())
torch.as_tensor(data, dtype=None, device=None)->Tensor
data:可以是list, tuple, ndarray, scalar等类型
dtype:可以指定tensor中数据的类型,
device:指定返回tensor所在的位置,默认是cpu
注意:torch.as_tensor()默认情况下是一个浅拷贝方法,当指定的dtype和data的类型不一致时才是深拷贝。
2.使用 torch.Tensor.numpy() 函数--------浅拷贝
在使用Pytorch训练的过程中经常要将数据放到gpu上训练,或者是将GPU上训练好的模型数据放在cpu上测试。所以tensor类型经常要来回转换,下面简单介绍一些之间的转换方法。
1.使用 .cuda()方法
2.使用torch.set_default_tensor_type() 方法,将默认的浮点类型设置为cuda类型。
#把数据转到CPU----.cpu()方法
gpu_tensor.cpu()
常用写法:
若gpu存在,则放到gpu上;否则放在cpu上。
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
tensor1 = tensor1.to(device)
tensor2 = tensor2.to(device)
#......
读取图像时主要使用cv2.imread() 函数
用法为:
img = cv2.imread(filename, flags)
#filename:图片路径
#flags:读取图片的格式。默认为1:彩色图片;0:灰度图片;
import numpy as np
import cv2
img=cv2.imdecode(np.fromfile(imgpath, dtype=np.uint8), cv2.IMREAD_COLOR)
读取和显示图像方法如下:
from PIL import Image
img = Image.open('E:\A.png')
img.show()
print(type(img))
要用到pytorch里的图形库torchvision,而torchvision.transforms主要是用于常见的一些图形变换。
用法如下:
别写成了:torchvision.transforms.ToTensor(img)
注意:ToTensor()方法转化为tensor时会把灰度范围从0-255变换到0-1之间
其实还有很多内容,后续再补充。