from torchvision import transformsfrom PIL import Imagefrom torch.utils.tensorboard import SummaryWriterimg_path = 'data/dataset/train/ants/0013035.jpg'img_PIL = Image.open(img_path)'transforms中ToTensor使用方式'img_trans = transforms.ToTensor()img_Tensor = img_trans(img_PIL)writer = SummaryWriter('logs')writer.add_image('img_Tensor',img_Tensor)writer.close()
命令行窗口键入 tensorboard —logdir=logs即可查看
transforms相当于一个工具箱,里面有很多工具可以使用,用其工具来对输入的图片进行一定的转换,输出到下一步,上述代码将img通过PIL打开,转换成了tensor形式便于神经网络进行操作。
class person:def __call__(self, name):print('__call__'+' hello '+name)def hello(self,name):print('hello '+name)person = person()person('zhangsan')person.hello('lisi')》__call__ hello zhangsanhello lisi
这串代码可以帮助理解类中内置的 call函数和普通函数
from torch.utils.tensorboard import SummaryWriterfrom torchvision import transformsfrom PIL import Imageimg_path = 'data/dataset/train/ants/0013035.jpg'img_PIL = Image.open(img_path)writer = SummaryWriter('logs')#ToTensor----------------------------img_trans = transforms.ToTensor()img_tensor = img_trans(img_PIL)writer.add_image('img_tensor',img_tensor)#normalize-------------------------------------print(img_tensor[0][0][0])normalize = transforms.Normalize([0.5,0.5,0.5],[0.5,0.5,0.5])img_norm = normalize(img_tensor)print(img_norm[0][0][0]) #查看正则化之后的第0层第0行第0列writer.add_image('img_norm',img_norm)#Reszie----------------------------------------#文档中可以看到Resize可以转换PIL和tensor两种类型,但最后tensorboard打开只能是tensor类型因此从以tensor举例#print(img_PIL.size)print(img_tensor)trans_Resize = transforms.Resize((500,500))img_tensor_Resize = trans_Resize(img_tensor)#img_PIL_Resize = trans_Resize(img_PIL)writer.add_image('img_tensor_Resize',img_tensor_Resize)print(img_tensor_Resize)#compose----------------------------------------------trans_Resize_2 = transforms.Resize(500)#这里是HW等比例缩放#transforms.compose()的作用其实就是将两个功能进行组合:1缩放(这里用的等比例)2转换成tensor类型#transforms.compose()参数的格式必须是数组,数组的内容必须是transforms#trans_Resize_2 and img_trans 都是transforms类型#要注意的是,transforms.Compose()中,trans_Resize_2的输出必须符合img_trans的输入格式.#这里trans_Resize_2的输出为PIL,符合img_trans(transforms.ToTensor())的输入。trans_compose = transforms.Compose([trans_Resize_2, img_trans])img_compose = trans_compose(img_PIL)writer.add_image('img_compose',img_compose)##RandomCrop--------------------------------------#先随机裁剪 再转换成tensor类型# trans_Random = transforms.RandomCrop(300)# img_crop = trans_Random(img_PIL)# print(img_crop)# img_crop_tensor = img_trans(img_crop)# writer.add_image('img_crop',img_crop_tensor)#用compose组合两个功能trans_Random = transforms.RandomCrop((300,150))#指定HW 不指定就直接RandomCrop(300)img_compose_2 = transforms.Compose([trans_Random, img_trans])#官方文档中写为:#img_compose_2 = transforms.Compose([transforms.RandomCrop(300),transforms.ToTensor(),])for i in range(10):img_crop = img_compose_2(img_PIL)writer.add_image('img_crop',img_crop,i)writer.close()# 多看官方文档# 关注输入输出类型# 关注与方法需要的参数# 多使用print(img) print(type(img)) print(img.shape)查看返回类型
