深度學習框架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()



 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章