Pytorch 中的 张量tensor《----》 PIL 转换

需要导入的工具库:
import torch
from PIL import Image
import matplotlib.pyplot as plt
from torchvision import transforms as T

# loader使用torchvision中自带的transforms函数
loader = transforms.Compose([ transforms.ToTensor() ])
#在.Compose()中可添加多个操作,对图片进行改变
unloader = transforms.ToPILImage()

1. PIL读取图片转化为Tensor
输入图片地址返回tensor变量:

def  image_loader(image_name):
		image = Image.open(image_name).convert(‘RGB’)
		image = loader(image).unsqueeze(0)
		return  image.to(device, torch.float) 

2. Tensor转化为PIL图片
输入tensor变量 输出 PIL格式图片:

def  tensor_to_PIL(tensor):
		image = tensor.cpu().clone()
		image = image.squeeze(0)
		image = unloader(image)
		return  image

3. 直接展示tensor格式图片

def  imshow(tensor, title=None):
	image = tensor.cpu().clone()
	image = image.squeeze(0) 
	image = unloader(image)
	#先转换成PIL格式的image,再展示
	plt.imshow(image)

** 4、直接保存tensor格式图片**

def  save_image(tensor, **para):
		dir = ‘./results’
		image = tensor.cpu().clone() 
		image = image.squeeze(0)
		 image = unloader(image)
		 #先转换成PIL格式的image,再保存
		if not os.path.exists(dir):
			os.makedirs(dir)
		image.save(‘results_{}/s{}-c{}-l{}-e{}-sl{:4f}-cl{:4f}.jpg’.format(num,‘style_weight’,‘content_weight’,‘lr’,‘epoch’,‘style_loss’,‘content_loss’)) 

5. 将 N * H * W * C 的numpy格式图片转化为相应的tensor格式:

def  toTensor(img):
		img = torch.from_numpy( img.transpose((0, 3, 1, 2)) )
		return  img.float().div(255).unsqueeze(0)

Numpy的ndarray 或者Tensor转化成PILImage类型【在数据类型上,两者都有明确的要求】

1. ndarray的数据类型要求:

dtype=uint8, range[0, 255] and shape H x W x C

2. Tensor 的shape为: C * H * W 要求:

FloadTensor的,不允许DoubleTensor或者其他类型.

可以直接使用 pip torchsnooper 来安装:
用 **

@torchsnooper.snoop()

** 装饰一下要调试的函数,这个函数在执行的时候,就会自动print 出来每一行的执行结果的 tensor 的形状、数据类型、设备、是否需要梯度的信息

在使用

matplotlib的过程中:

常常会需要画很多图,但是好像并不能同时**展示许多图。**这是因为python可视化库matplotlib的显示模式默认为阻塞(block)模式。
什么是阻塞模式那?我的理解就是在plt.show()之后,程序会暂停到那儿,并不会继续执行下去。如果需要继续执行程序,就要关闭图片。
那如何展示动态图或多个窗口呢?这就要使用

图前 plt.ion() — 图后 plt.ioff()

这2个函数,使matplotlib的显示模式转换为交互(interactive)模式。即使在脚本中遇到plt.show(),代码还是会继续执行。

你可能感兴趣的:(深度学习,python学习,心得体会)