1.对numpy数据进行归一化
import torch
import torchvision
import torchvision.transforms as transforms
import numpy as np
X = np.random.choice(255, (5,4,3))
print(X)
transform = transforms.Compose([
transforms.ToTensor(),
transforms.Normalize(mean=(0,0,0), std=(1,1,1)),
])
transform(X)
print(X)
print(X.shape)
2.对PIL读取的图像进行归一化
import torch
from PIL import Image
import torchvision.transforms as transforms
import matplotlib.pyplot as plt
import numpy
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
img = Image.open('D:\datasets\img\lena.jpg')
plt.figure()
plt.imshow(img)
plt.title('原图',fontsize=12,color='r')
plt.show()
transform = transforms.Compose([
transforms.ToTensor(),
transforms.Normalize(mean=(0,0,0), std=(8,8,8)),
])
img1 = transform(img)
img1 = np.array(img1*255, dtype=np.uint8)
print('转换后的shape', img.shape)
img_np = np.zeros((200,200,3),dtype=np.uint8)
img_np[:,:,0] = np.array(img1[0,:,:])
img_np[:,:,1] = np.array(img1[1,:,:])
img_np[:,:,2] = np.array(img1[2,:,:])
plt.figure()
plt.imshow(img_np)
plt.title('转换后',fontsize=12,color='r')
plt.show()
print('转为适合imshow后的shape', img_np.shape)
img2 = img1.transpose(1,2,0)
print(img2.shape)
plt.figure()
plt.imshow(img2)
plt.show()
3.其他一些转换代码
img_out = transforms.ToTensor()(img_in)
a = np.array([[[253,254,255]]])
b = transforms.ToTensor()(a)
unloader = transforms.ToPILImage()
image = image.squeeze(0)
image = unloader(image)
pytorch.transforms.ToTensor()的一个细节
输入数据值域不需要满足在 [0,255] 范围内,事实上这个函数只是给整个矩阵除了 255.0.
参考文献: