pytorch深度学习框架教程,pytorch深度学习框架--关于图像的基本操作
pytorch深度学习框架教程,pytorch深度学习框架--关于图像的基本操作取值范围为[0 255]的PIL.Image,转换成形状为[C H W],取值范围是[0 1.0]的torch.FloadTensor;我们可以使用 transforms.ToTensor() 将 PIL.Image/numpy.ndarray 数据进转化为torch.FloadTensor,并归一化到[0 1.0]:通常,在使用torchvision.transforms,我们通常使用transforms.Compose将transforms组合在一起。PIL.Image/numpy.ndarray与Tensor的相互转换PIL.Image/numpy.ndarray转化为Tensor,常常用在训练模型阶段的数据读取,而Tensor转化为PIL.Image/numpy.ndarray则用在验证模型阶段的数据输出。
为了方便进行数据的操作,pytorch团队提供了一个torchvision.transforms包,我们可以用transforms进行以下操作:
-
PIL.Image/numpy.ndarray与Tensor的相互转化;
-
归一化;
-
对PIL.Image进行裁剪、缩放等操作。
通常,在使用torchvision.transforms,我们通常使用transforms.Compose将transforms组合在一起。
PIL.Image/numpy.ndarray与Tensor的相互转换
PIL.Image/numpy.ndarray转化为Tensor,常常用在训练模型阶段的数据读取,而Tensor转化为PIL.Image/numpy.ndarray则用在验证模型阶段的数据输出。
我们可以使用 transforms.ToTensor() 将 PIL.Image/numpy.ndarray 数据进转化为torch.FloadTensor,并归一化到[0 1.0]:
-
取值范围为[0 255]的PIL.Image,转换成形状为[C H W],取值范围是[0 1.0]的torch.FloadTensor;
-
形状为[H W C]的numpy.ndarray,转换成形状为[C H W],取值范围是[0 1.0]的torch.FloadTensor。
而transforms.ToPILImage则是将Tensor转化为PIL.Image。如果,我们要将Tensor转化为numpy,只需要使用 .numpy() 即可。如下:
img_path = "./data/img_37.jpg" # transforms.ToTensor() transform1 = transforms.Compose([
归一化
归一化对神经网络的训练是非常重要的,那么我们如何归一化到[-1.0 -1.0]呢?只需要将上面的transform1改为如下所示:
transform2 = transforms.Compose([
(1)transforms.Compose就是将transforms组合在一起;
(2)transforms.Normalize使用如下公式进行归一化:
channel=(channel-mean)/std
这样一来,我们的数据中的每个值就变成了[-1 1]的数了。
PIL.Image的缩放裁剪等操作
此外,transforms还提供了裁剪,缩放等操作,以便进行数据增强。下面就看一个随机裁剪的例子,这个例子中,仍然使用 Compose 将 transforms 组合在一起,如下:
# transforms.RandomCrop()
最后,安利一下pytorch中文文档。在各方小伙伴的努力和支持下,获官方授权翻译的pytorch中文文档终于上线啦!!!(鼓掌)第一版文档还有一些小瑕疵,我们正在校正审阅,力图进一步提升文档质量,同时欢迎大家一起加入该项目,加入pytorch中文社群pytorch-cn。
github项目地址:https://github.com/awfssv/pytorch-cn
PyTorch中文文档地址:http://pytorch-cn.readthedocs.io