1. from torchvision import transforms
    2. from PIL import Image
    3. from torch.utils.tensorboard import SummaryWriter
    4. img_path = 'data/dataset/train/ants/0013035.jpg'
    5. img_PIL = Image.open(img_path)
    6. 'transforms中ToTensor使用方式'
    7. img_trans = transforms.ToTensor()
    8. img_Tensor = img_trans(img_PIL)
    9. writer = SummaryWriter('logs')
    10. writer.add_image('img_Tensor',img_Tensor)
    11. writer.close()

    命令行窗口键入 tensorboard —logdir=logs即可查看

    transforms相当于一个工具箱,里面有很多工具可以使用,用其工具来对输入的图片进行一定的转换,输出到下一步,上述代码将img通过PIL打开,转换成了tensor形式便于神经网络进行操作。

    1. class person:
    2. def __call__(self, name):
    3. print('__call__'+' hello '+name)
    4. def hello(self,name):
    5. print('hello '+name)
    6. person = person()
    7. person('zhangsan')
    8. person.hello('lisi')
    9. __call__ hello zhangsan
    10. hello lisi

    这串代码可以帮助理解类中内置的 call函数和普通函数

    1. from torch.utils.tensorboard import SummaryWriter
    2. from torchvision import transforms
    3. from PIL import Image
    4. img_path = 'data/dataset/train/ants/0013035.jpg'
    5. img_PIL = Image.open(img_path)
    6. writer = SummaryWriter('logs')
    7. #ToTensor----------------------------
    8. img_trans = transforms.ToTensor()
    9. img_tensor = img_trans(img_PIL)
    10. writer.add_image('img_tensor',img_tensor)
    11. #normalize-------------------------------------
    12. print(img_tensor[0][0][0])
    13. normalize = transforms.Normalize([0.5,0.5,0.5],[0.5,0.5,0.5])
    14. img_norm = normalize(img_tensor)
    15. print(img_norm[0][0][0]) #查看正则化之后的第0层第0行第0列
    16. writer.add_image('img_norm',img_norm)
    17. #Reszie----------------------------------------
    18. #文档中可以看到Resize可以转换PIL和tensor两种类型,但最后tensorboard打开只能是tensor类型因此从以tensor举例
    19. #print(img_PIL.size)
    20. print(img_tensor)
    21. trans_Resize = transforms.Resize((500,500))
    22. img_tensor_Resize = trans_Resize(img_tensor)
    23. #img_PIL_Resize = trans_Resize(img_PIL)
    24. writer.add_image('img_tensor_Resize',img_tensor_Resize)
    25. print(img_tensor_Resize)
    26. #compose----------------------------------------------
    27. trans_Resize_2 = transforms.Resize(500)#这里是HW等比例缩放
    28. #transforms.compose()的作用其实就是将两个功能进行组合:1缩放(这里用的等比例)2转换成tensor类型
    29. #transforms.compose()参数的格式必须是数组,数组的内容必须是transforms
    30. #trans_Resize_2 and img_trans 都是transforms类型
    31. #要注意的是,transforms.Compose()中,trans_Resize_2的输出必须符合img_trans的输入格式.
    32. #这里trans_Resize_2的输出为PIL,符合img_trans(transforms.ToTensor())的输入。
    33. trans_compose = transforms.Compose([trans_Resize_2, img_trans])
    34. img_compose = trans_compose(img_PIL)
    35. writer.add_image('img_compose',img_compose)
    36. ##RandomCrop--------------------------------------
    37. #先随机裁剪 再转换成tensor类型
    38. # trans_Random = transforms.RandomCrop(300)
    39. # img_crop = trans_Random(img_PIL)
    40. # print(img_crop)
    41. # img_crop_tensor = img_trans(img_crop)
    42. # writer.add_image('img_crop',img_crop_tensor)
    43. #用compose组合两个功能
    44. trans_Random = transforms.RandomCrop((300,150))#指定HW 不指定就直接RandomCrop(300)
    45. img_compose_2 = transforms.Compose([trans_Random, img_trans])
    46. #官方文档中写为:
    47. #img_compose_2 = transforms.Compose([transforms.RandomCrop(300),transforms.ToTensor(),])
    48. for i in range(10):
    49. img_crop = img_compose_2(img_PIL)
    50. writer.add_image('img_crop',img_crop,i)
    51. writer.close()
    52. # 多看官方文档
    53. # 关注输入输出类型
    54. # 关注与方法需要的参数
    55. # 多使用print(img) print(type(img)) print(img.shape)查看返回类型