深度学习框架PyTorch:入门与实践 学习(四)

PyTorch中常用工具

torchvision

  1. models:提供深度学习中各种经典的网络结构以及预训练好的模型,包括AlexNet, VGG, ResNet, Inception
  2. datsets:提供常用的数据集加载,设计上均继承torch.utils.data.dataset,主要包括MNIST,CIFAR10/100,ImageNet,COCO
  3. transforms:提供常用的数据预处理操作,主要包括对tensor和PILImage对象的操作
  4. torchvision.utils.save_image:直接将tensor保存成图片
    from torch.utils import data
    import os
    from PIL import Image
    from torchvision import transforms
    from torchvision import utils
    import numpy
    import torch
    
    class Data(data.Dataset):
        def __init__(self, root):
            # 返回指定路径下的文件和文件夹列表。
            imgs_HR = os.listdir(os.path.join(root, 'gt'))
            self.imgs_HR = [os.path.join(root, 'gt', img) for img in imgs_HR]
            imgs_LR = os.listdir(os.path.join(root, 'lr'))
            self.imgs_LR = [os.path.join(root, 'lr', img) for img in imgs_LR]
            self.transform = transforms.ToTensor()
    
        def __getitem__(self, item):
            img_path_LR = self.imgs_LR[item]
            img_path_HR = self.imgs_HR[item]
            LR_img = Image.open(img_path_LR)
            HR_img = Image.open(img_path_HR)
            HR = self.transform(HR_img)
            # print(HR1.shape)
            LR = self.transform(LR_img)
            filename = os.path.splitext(os.path.basename(img_path_HR))
            return LR, HR, filename
    
        def __len__(self):
            return len(self.imgs_HR)
    
    
    if __name__ == '__main__':
        train = Data(root='/data/wcy/celebA-18000/test')
        for LR, HR, filename in train:
            print(filename)
            utils.save_image(HR,
                             os.path.join('/data/wcy/wcy/fishnet/result-test/{}.png').format(str(filename[0])))
    

     

可视化工具

  1. tensorboardX:命令:tensorboard --logdir=log目录 --port=指定端口
  2. visdom:pip install visdom

GPU加速

tensor,variable,nn.module都有一个.cuda对象,通过调用该方法可以将其转为对应的GPU对象,variable和tensor.cuda会将新对象转移到GPU而其他的数据还保留在cpu。而module.cuda会将所有的数据都转移到GPU上。

服务器有多个GPU,tensor.cuda()会将tensor保存到第一块GPU上,等价于tensor.cuda(0)。指定其他GPU的方法:

  1. torch.cuda.set_device(1):指定第二块GPU
  2. 设置环境变量:CUDA_VISIBLE_DEVICES=0,2,3,设置使用第一,三、四块卡。此时tensor.cuda(1)会将tensor转移到CUDA_VISIBLE_DEVICES[1]=2,即第三块卡上。
    import os
    os.environ['CUDA_VISIBLE_DEVICES'] = "0,1,2"

     

持久化

tensor,variable,nn.module和optimizer均可以保存到硬盘中。保存:torch.save(obj, filename)加载:obj = torch.load(filename)

module和optimizer建议保存他们的state_dict()

from torchvision import transforms
import torch as t
a = t.Tensor(3, 4)
if t.cuda().is_available():
    a = a.cuda()
    t.save(a, 'a.pth')
    b = t.load('a.pth')
    # 加载为c, 存储于CPU
    c = t.load('a.pth', map_llocation=lambda storage, loc:storage)
    # 加载为d,存储于GPU
    d = t.load('a.pth', map_location={'cuda:1':'cuda:0'})

# 设置默认类型
t.set_default_tensor_type('torch.FloatTensor')
from torchvision.models import AlexNet
model = AlexNet()
t.save(model.state_dict(), 'alexnet.pth')
model.load_state_dict(t.load('alexnet.pth'))
optimizer = t.optim.Adam(model.parameters(), lr=0.1)
t.save(optimizer.state_dict(), 'optimizer.pth')
optimizer.load_state_dict(t.load('optimizer.pth'))
all_data = dict(
    optimizer=optimizer.state_dict(),
    model = model.state_dict(),
    info = u'模型和优化器的所有参数'
)
t.save(all_data, 'all.pth')
all_data = t.load('all_pth')
all_data.keys()



 

 

 

 

 

 

 

 

 

你可能感兴趣的:(PyTorch)