最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

pytorch加載自己的圖片數(shù)據(jù)集的2種方法詳解

 更新時間:2022年06月11日 11:19:30   作者:_-周-_  
數(shù)據(jù)預(yù)處理在解決深度學(xué)習(xí)問題的過程中,往往需要花費大量的時間和精力,下面這篇文章主要給大家介紹了關(guān)于pytorch加載自己的圖片數(shù)據(jù)集的2種方法,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下

pytorch加載圖片數(shù)據(jù)集有兩種方法。

1.ImageFolder 適合于分類數(shù)據(jù)集,并且每一個類別的圖片在同一個文件夾, ImageFolder加載的數(shù)據(jù)集, 訓(xùn)練數(shù)據(jù)為文件件下的圖片, 訓(xùn)練標(biāo)簽是對應(yīng)的文件夾, 每個文件夾為一個類別

導(dǎo)入ImageFolder()包
from torchvision.datasets import ImageFolder

在Flower_Orig_dataset文件夾下有flower_orig 和 sunflower這兩個文件夾, 這兩個文件夾下放著同一個類別的圖片。 使用 ImageFolder 加載的圖片, 就會返回圖片信息和對應(yīng)的label信息, 但是label信息是根據(jù)文件夾給出的, 如flower_orig就是標(biāo)簽0, sunflower就是標(biāo)簽1。

ImageFolder 加載數(shù)據(jù)集

1. 導(dǎo)入包和設(shè)置transform

import torch
from torchvision import transforms, datasets
import torch.nn as nn
from torch.utils.data import DataLoader
 
transforms = transforms.Compose([
    transforms.Resize(256),    # 將圖片短邊縮放至256,長寬比保持不變:
    transforms.CenterCrop(224),   #將圖片從中心切剪成3*224*224大小的圖片
    transforms.ToTensor()          #把圖片進(jìn)行歸一化,并把數(shù)據(jù)轉(zhuǎn)換成Tensor類型
]) 

2.加載數(shù)據(jù)集: 將分類圖片的父目錄作為路徑傳遞給ImageFolder(), 并傳入transform。這樣就有了要加載的數(shù)據(jù)集, 之后就可以使用DataLoader加載數(shù)據(jù), 并構(gòu)建網(wǎng)絡(luò)訓(xùn)練。

path = r'D:\數(shù)據(jù)集\Flower_Orig_dataset'
data_train = datasets.ImageFolder(path, transform=transforms)
data_loader = DataLoader(data_train, batch_size=64, shuffle=True)
for i, data in enumerate(data_loader):
    images, labels = data
    print(images.shape)
    print(labels.shape)
    break

使用pytorch提供的Dataset類創(chuàng)建自己的數(shù)據(jù)集。

具體步驟:

1.  首先要有一個txt文件, 這個文件格式是: 圖片路徑  標(biāo)簽.  這樣的格式, 所以使用os庫, 遍歷自己的圖片名, 并把標(biāo)簽和圖片路徑寫入txt文件。

2. 有了這個txt文件, 我們就可以在類里面構(gòu)造我們的數(shù)據(jù)集.

2.1    把圖片路徑和圖片標(biāo)簽分割開, 有兩個列表, 一個列表是圖片路徑名, 一個列表是標(biāo)簽號, 有一點就是第 i 個圖片列表和 第 i 個標(biāo)簽是對應(yīng)的

3. 重寫__len__方法  和  __getitem__方法

3.1 getitem方法中, 獲得對應(yīng)的圖片路徑,并用PIL庫讀取文件把圖片transfrom后, 在getitem函數(shù)中返回讀取的圖片和標(biāo)簽即可

4.就可以構(gòu)建數(shù)據(jù)集實例和加載數(shù)據(jù)集.

 定義一個用來生成[ 圖片路徑 標(biāo)簽] 這樣的txt文件函數(shù)

def make_txt(root, file_name, label):
    path = os.path.join(root, file_name)
    data = os.listdir(path)
    f = open(path+'\\'+'f.txt', 'w')
    for line in data:
        f.write(line+' '+str(label)+'\n')
    f.close()
#調(diào)用函數(shù)生成兩個文件夾下的txt文件
make_txt(path, file_name='flower_orig', label=0)
make_txt(path, file_name='sunflower', label=1)

將連個txt文件合并成一個txt文件,表示數(shù)據(jù)集所有的圖片和標(biāo)簽

def link_txt(file1, file2):
    txt_list = []
    path = r'D:\數(shù)據(jù)集\Flower_Orig_dataset\data.txt'
 
    f = open(path, 'a')
 
    f1 = open(file1, 'r')
    data1 = f1.readlines()
    for line in data1:
        txt_list.append(line)
 
    f2 = open(file2, 'r')
    data2 = f2.readlines()
    for line in data2:
        txt_list.append(line)
 
    for line in txt_list:
        f.write(line)
 
    f.close()
    f1.close()
    f2.close()
 
#調(diào)用函數(shù), 將兩個文件夾下的txt文件合并
file1 = r'D:\數(shù)據(jù)集\Flower_Orig_dataset\flower_orig\f.txt'
file2 = r'D:\數(shù)據(jù)集\Flower_Orig_dataset\sunflower\f.txt'
link_txt(file1=file1, file2=file2)

現(xiàn)在我們已經(jīng)有了我們制作數(shù)據(jù)集所需要的txt文件, 接下來要做的即使繼承Dataset類, 來構(gòu)建自己的數(shù)據(jù)集 , 別忘了前面說的 構(gòu)建數(shù)據(jù)集步驟, 在__getitem__函數(shù)中, 需要拿到圖片路徑和標(biāo)簽, 并且用PIL庫方法讀取圖片,對圖片進(jìn)行transform轉(zhuǎn)換后,返回圖片信息和標(biāo)簽信息

Dataset加載數(shù)據(jù)集

我們讀取圖片的根目錄, 在根目錄下有所有圖片的txt文件, 拿到txt文件后, 先讀取txt文件, 之后遍歷txt文件中的每一行, 首先去除掉尾部的換行符, 在以空格切分,前半部分是圖片名稱, 后半部分是圖片標(biāo)簽, 當(dāng)圖片名稱和根目錄結(jié)合,就得到了我們的圖片路徑   
class MyDataset(Dataset):
    def __init__(self, img_path, transform=None):
        super(MyDataset, self).__init__()
        self.root = img_path
 
        self.txt_root = self.root + 'data.txt'
        f = open(self.txt_root, 'r')
        data = f.readlines()
 
        imgs = []
        labels = []
        for line in data:
            line = line.rstrip()
            word = line.split()
            imgs.append(os.path.join(self.root, word[1], word[0]))
 
            labels.append(word[1])
        self.img = imgs
        self.label = labels
        self.transform = transform
 
    def __len__(self):
        return len(self.label)
 
    def __getitem__(self, item):
        img = self.img[item]
        label = self.label[item]
 
        img = Image.open(img).convert('RGB')
 
        #此時img是PIL.Image類型   label是str類型
 
        if transforms is not None:
            img = self.transform(img)
 
        label = np.array(label).astype(np.int64)
        label = torch.from_numpy(label)
        
        return img, label

 加載我們的數(shù)據(jù)集:

path = r'D:\數(shù)據(jù)集\Flower_Orig_dataset'
dataset = MyDataset(path, transform=transform)
 
data_loader = DataLoader(dataset=dataset, batch_size=64, shuffle=True)

接下來我們就可以構(gòu)建我們的網(wǎng)絡(luò)架構(gòu):

class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.conv1 = nn.Conv2d(3,16,3)
        self.maxpool = nn.MaxPool2d(2,2)
        self.conv2 = nn.Conv2d(16,5,3)
 
        self.relu = nn.ReLU()
        self.fc1 = nn.Linear(55*55*5, 1200)
        self.fc2 = nn.Linear(1200,64)
        self.fc3 = nn.Linear(64,2)
 
    def forward(self,x):
        x = self.maxpool(self.relu(self.conv1(x)))    #113
        x = self.maxpool(self.relu(self.conv2(x)))    #55
        x = x.view(-1, self.num_flat_features(x))
        x = self.relu(self.fc1(x))
        x = self.relu(self.fc2(x))
        x = self.fc3(x)
        return x
    
    
    def num_flat_features(self, x):
        size = x.size()[1:]
        num_features = 1
        for s in size:
            num_features *= s
 
        return num_features
 

 訓(xùn)練我們的網(wǎng)絡(luò):

model = Net()
 
criterion = torch.nn.CrossEntropyLoss()
optimizer = optim.SGD(model.parameters(), lr=0.01)
 
 
epochs = 10
for epoch in range(epochs):
    running_loss = 0.0
    for i, data in enumerate(data_loader):
        images, label = data
 
        out = model(images)
 
        loss = criterion(out, label)
 
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()
 
        running_loss += loss.item()
        if(i+1)%10 == 0:
            print('[%d  %5d]   loss: %.3f'%(epoch+1, i+1, running_loss/100))
            running_loss = 0.0
 
print('finished train')

 保存網(wǎng)絡(luò)模型(這里不止是保存參數(shù),還保存了網(wǎng)絡(luò)結(jié)構(gòu))

#保存模型
torch.save(net, 'model_name.pth')   #保存的是模型, 不止是w和b權(quán)重值
 
# 讀取模型
model = torch.load('model_name.pth')

總結(jié)

到此這篇關(guān)于pytorch加載自己的圖片數(shù)據(jù)集的2種方法的文章就介紹到這了,更多相關(guān)pytorch加載圖片數(shù)據(jù)集內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python腳本實現(xiàn)小猿口算

    Python腳本實現(xiàn)小猿口算

    最近小猿口算已經(jīng)被不少大學(xué)生攻占,一個好好的給小學(xué)生的口算題已經(jīng)變成了大學(xué)生的計算機大戰(zhàn),下面我們就來看看如何使用Python腳本就行吧小猿口算
    2024-10-10
  • python3 xpath和requests應(yīng)用詳解

    python3 xpath和requests應(yīng)用詳解

    這篇文章主要介紹了python3 xpath和requests應(yīng)用詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • Python list和str互轉(zhuǎn)的實現(xiàn)示例

    Python list和str互轉(zhuǎn)的實現(xiàn)示例

    這篇文章主要介紹了Python list和str互轉(zhuǎn)的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • Python中讀取和加解密PDF文件的詳細(xì)教程

    Python中讀取和加解密PDF文件的詳細(xì)教程

    在Python中讀取和加密PDF文件是一項常見且實用的任務(wù),尤其對于需要處理大量文檔自動化處理的場景,本文將詳細(xì)介紹如何使用Python讀取PDF文件內(nèi)容以及如何使用不同的庫來給PDF文件加密,需要的朋友可以參考下
    2024-08-08
  • Python操作SQLite簡明教程

    Python操作SQLite簡明教程

    這篇文章主要介紹了Python操作SQLite簡明教程,簡單明了的入門教程,包含連接、建表、增刪修查等例子,需要的朋友可以參考下
    2014-07-07
  • Python數(shù)字比較與類結(jié)構(gòu)

    Python數(shù)字比較與類結(jié)構(gòu)

    這篇文章主要介紹了Python數(shù)字比較與類結(jié)構(gòu),文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-07-07
  • Python中for循環(huán)和while循環(huán)的基本使用方法

    Python中for循環(huán)和while循環(huán)的基本使用方法

    這篇文章主要介紹了Python中for循環(huán)和while循環(huán)的基本使用方法,是Python入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-08-08
  • Python光學(xué)仿真理解Jones矩陣學(xué)習(xí)

    Python光學(xué)仿真理解Jones矩陣學(xué)習(xí)

    這篇文章主要為大家介紹了Python光學(xué)仿真理解Jones矩陣的學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2021-10-10
  • Python把圖片轉(zhuǎn)化為pdf代碼實例

    Python把圖片轉(zhuǎn)化為pdf代碼實例

    這篇文章主要介紹了Python把圖片轉(zhuǎn)化為pdf代碼實例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-07-07
  • DjangoRestFramework 使用 simpleJWT 登陸認(rèn)證完整記錄

    DjangoRestFramework 使用 simpleJWT 登陸認(rèn)證完整記錄

    Djangorestframework-simplejwt是Django REST Framework框架的一個jwt插件,使用 python http 工具進(jìn)行接口測試的方法文中給大家提到,重點給大家分享djangorestframework-simplejwt 使用記錄及登陸認(rèn)證的完成過程,感興趣的朋友跟隨小編一起看看吧
    2021-06-06

最新評論

武义县| 辛集市| 固始县| 丽水市| 吉安县| 汤阴县| 固始县| 峡江县| 辽中县| 同心县| 内丘县| 泽州县| 天水市| 宣武区| 阿克苏市| 荣成市| 远安县| 防城港市| 聂荣县| 彭泽县| 石台县| 巫溪县| 龙海市| 麻阳| 新晃| 夏邑县| 延寿县| 九龙县| 新民市| 山东省| 永胜县| 永泰县| 合山市| 阿克陶县| 灵川县| 黄浦区| 香格里拉县| 丹阳市| 东城区| 永和县| 大同市|