<center id="qkqgy"><optgroup id="qkqgy"></optgroup></center>
  • <menu id="qkqgy"></menu>
    <nav id="qkqgy"></nav>
    <xmp id="qkqgy"><nav id="qkqgy"></nav>
  • <xmp id="qkqgy"><menu id="qkqgy"></menu>
    <menu id="qkqgy"><menu id="qkqgy"></menu></menu>
    <tt id="qkqgy"><tt id="qkqgy"></tt></tt>

  • <>torchvision

    torchvision 是 PyTorch 的一個圖形圖像庫(專門用來處理圖像和視覺的),主要用于構建計算機視覺模型。

    torchvision 包含四個大類:

    * torchvision.datasets:包含一些加載數據的函數及常用的數據集接口
    * torchvision.models:包含常用的模型結構(含預訓練模型),如 AlexNet、VGG 等
    * torchvision.transforms:包含常用的圖片變換操作,如裁剪、旋轉等
    * torchvision.utils:包含其他一些有用的方法
    <>torchvision.transforms

    torchvision.transforms 是 PyTorch 中的圖像預處理包,包含了很多對圖像數據進行變換的函數,主要用于常見的一些圖形變換。

    torchvision.transforms.Compose() 類,這個類的主要作用是串聯多個圖形變換的操作,它會對列表里面的變換操作進行遍歷。

    torchvision.transforms.ToTensor() 類,把 shape=(H*W*C) 的像素值范圍為 [0, 255] 的
    PIL.Image 或者 numpy.ndarray 轉換成 shape=(C*H*W) 的像素值范圍為 [0.0, 1.0] 的
    torch.FloatTensor。

    torchvision.transforms.ToPILImage() 類,把 shape=(C*H*W) 的 Tensor 或者
    shape=(H*W*C) 的 numpy.ndarray 轉換成 shape=(H*W*C) 的 PIL.Image,值不變。

    torchvision.transforms.Normalize(mean, std) 類,用給定的均值和標準差分別對每個通道的數據進行規范化。
    具體來說,給定均值 ( M 1 , M 2 , . . . , M n ) (M_1, M_2, ..., M_n) (M1?,M2?,...,Mn?)
    和標準差 ( S 1 , S 2 , . . . , S n ) (S_1, S_2, ..., S_n) (S1?,S2?,...,Sn?),其中
    n(一般為 3 (R, G, B))為通道數。用公式 channel = (channel - mean) / std 來進行規范化。
    對每個通道進行如下操作:output[channel] = (input[channel] - mean[channel]) / std[channel]。
    比如原來的 tensor 是三個維度的,數值在 [0, 1] 之間,經過變換之后數值范圍就擴展到 [-1, 1] 之間。計算如下:((0, 1) -
    0.5) / 0.5 = (-1, 1)。

    torchvision.transforms.CenterCrop(size) 類,將給定的 PIL.Image 進行中心裁剪,得到指定的 size。參數
    size 可以是一個整數,裁剪出來的是一個正方形圖像;size 也可以是一個 tuple(target_height, target_width)。

    torchvision.transforms.RandomCrop(size, padding=0) 類,對 PIL.Image
    進行隨機裁剪,即裁剪中心點的位置隨機選取。參數 size 可以是一個整數,也可以是一個 tuple。

    torchvision.transforms.RandomResizedCrop(size) 類,先對 PIL.Image 進行隨機裁剪,然后再將其
    resize 成給定 size 大小。

    torchvision.transforms.RandomHorizontalFlip(p=0.5) 類,將給定的 PIL.Image
    隨機水平翻轉,翻轉的概率默認為 0.5。

    torchvision.transforms.RandomVerticalFlip(p=0.5) 類,將給定的 PIL.Image
    隨機垂直翻轉,翻轉的概率默認為 0.5。

    torchvision.transforms.Pad(padding, fill=0) 類,用給定的值填充 PIL.Image
    的所有邊。padding–各邊要填充多少個像素,fill–用什么值填充。
    import torchvision.transforms as transforms # 圖像預處理 transform = transforms.
    Compose([ transforms.Resize(96), # 將圖像縮放到 96*96 大小 transforms.ToTensor(), #
    將圖像數據轉換成張量 transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5)) # 對張量數據進行歸一化 ]
    )
    <>torchvision.datasets

    torchvision.datasets 是用于數據加載的包,PyTorch 團隊在這個包中幫我們提前處理好了很多圖像數據集。如
    MNIST、CocoCaptions、CocoDetection、LSUN、ImageFolder、ImageNet、CIFAR10、STL10、SVHN、PhotoTour
    等。

    所有數據集都是 torch.utils.data.Dataset 的子類,它們實現了 _getitem_ 和 __len__ 方法,因此它們都可以傳遞給
    torch.utils.data.DataLoader。
    import torchvision.datasets as datasets # 數據集準備 trainset = datasets.MNIST( root
    ='./data', # 根目錄 train=True, # 用于指定需要載入數據集的哪個部分,這里載入的是訓練集;如果為 False,則載入測試集
    transform=transform, # 用于指定導入數據集時需要對數據進行哪些變換操作,需提前定義這些變換操作 download=True #
    用于指定是否需要網上下載;如果為 True,則從網上下載數據集并將其放在根目錄中;如果已下載數據集,則不會再次下載 ) # 數據集加載 trainloader
    = torch.utils.data.DataLoader( trainset, # 準備的數據集 batch_size=4, # 設定圖像數據的批次大小
    shuffle=True, # 如果為 True,則每個 epoch 都會將數據集打亂 num_workers=2, # 設定加載數據時的線程數目;默認為
    0,主線程加載數據 collate_fn=<function default_collate>, # 指定取樣本的方式,可以自己定義函數來實現想要的功能
    pin_memory=False, # 指定是否為鎖頁內存 drop_last=False # 用于指定對 len(trainset)/batch_size
    余下的數據的處理方式;如果為 True,則將最后不夠一個 batch_size 的數據拋棄;如果為 False,則保留 ) '''
    主機中的內存有兩種存在方式,一是鎖頁,二是不鎖頁。鎖頁內存存放的內容在任何情況下都不會與主機的虛擬內存(虛擬內存就是硬盤)進行交換;而不鎖頁內存在主機內存不足時,數據會存放在虛擬內存中。顯卡中的顯存全部是鎖頁內存。
    當計算機的內存充足時,可以設置 pin_memory=True;當系統卡住,或者交換內存使用過多的時候,設置 pin_memory=False。因為
    pin_memory 與電腦硬件性能有關,PyTorch 開發者不能確保每一個煉丹玩家都有高端設備,因此 pin_memory 默認為 False。 '''
    <>torchvision.models

    torchvision.models 中包含如 AlexNet、VGG、ResNet、SqueezeNet、DenseNet
    等模型結構,同時為我們提供已經預訓練好的模型,我們加載之后可以直接使用。

    可以通過以下代碼快速創建一個隨機初始化權重的模型:
    import torchvision.models as models alexnet = models.alexnet() vgg16 = models.
    vgg16() resnet18 = models.resnet18()
    也可以通過 pretrained=True 來加載一個預訓練好的模型:
    import torchvision.models as models alexnet = models.alexnet(pretrained=True)
    vgg16= models.vgg16(pretrained=True) resnet18 = models.resnet18(pretrained=True)
    我們把 torchvision 中的多個類組合起來使用:
    # 初始的 MNIST 數據集圖像大小為 28*28,我們把它們處理成 96*96 的 torch.Tensor 的格式 import torchvision
    .transforms as transforms import torchvision.datasets as datasets from torch.
    utils.data import DataLoader # 圖像預處理 transform = transforms.Compose([ transforms
    .Resize(96), # 縮放到 96*96 大小 transforms.ToTensor(), # 將圖像轉換成 Tensor transforms.
    Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5)) # 歸一化 ]) # 數據集準備 train_dataset =
    datasets.MNIST(root='./data/', train=True, transform=transform, download=True)
    # 數據集加載 train_loader = DataLoader(dataset=train_dataset, batch_size=8, shuffle=
    True) print(len(train_dataset)) print(len(train_loader)) --------- 60000 7500

    技術
    下載桌面版
    GitHub
    百度網盤(提取碼:draw)
    Gitee
    云服務器優惠
    阿里云優惠券
    騰訊云優惠券
    華為云優惠券
    站點信息
    問題反饋
    郵箱:ixiaoyang8@qq.com
    QQ群:766591547
    關注微信
    巨胸美乳无码人妻视频