婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 解決pytorch讀取自制數據集出現過的問題

解決pytorch讀取自制數據集出現過的問題

熱門標簽:佛山400電話辦理 儋州電話機器人 小蘇云呼電話機器人 朝陽手機外呼系統 北瀚ai電銷機器人官網手機版 所得系統電梯怎樣主板設置外呼 市場上的電銷機器人 北京電銷外呼系統加盟 地圖標注面積

問題1

問題描述:

TypeError: default_collate: batch must contain tensors, numpy arrays, numbers, dicts or lists; found class 'PIL.Image.Image'>

解決方式

數據格式不對, 把image轉成tensor,參數transform進行如下設置就可以了:transform=transform.ToTensor()。注意檢測一下transform

問題2

問題描述:

TypeError: append() takes exactly one argument (2 given)

出現問題的地方

imgs.append(words[0], int(words[1]))

解決方式

加括號,如下

imgs.append((words[0], int(words[1])))

問題3

問題描述

RuntimeError: Input type (torch.cuda.FloatTensor) and weight type (torch.FloatTensor) should be the same

解決方式

數據和模型不在同一設備上,應該要么都在GPU運行,要么都在CPU

問題4

問題描述

RuntimeError: Given groups=1, weight of size [64, 1, 3, 3], expected input[1, 3, 512, 512] to have 1 channels, but got 3 channels instead

解決方式

圖像竟然是RGB,但我的訓練圖像是一通道的灰度圖,所以得想辦法把 mode 轉換成灰度圖L

補充:神經網絡 pytorch 數據集讀取(自動讀取數據集,手動讀取自己的數據)

對于pytorch,我們有現成的包裝好的數據集可以使用,也可以自己創建自己的數據集,大致來說有三種方法,這其中用到的兩個包是datasets和DataLoader

datasets:用于將數據和標簽打包成數據集

DataLoader:用于對數據集的高級處理,比如分組,打亂,處理等,在訓練和測試中可以直接使用DataLoader進行處理

第一種 現成的打包數據集

這種比較簡答,只需要現成的幾行代碼和一個路徑就可以完成,但是一般都是常用比如cifar-10

對于常用數據集,可以使用torchvision.datasets直接進行讀取,這是對其常用的處理,該類也是繼承于torch.utils.data.Dataset。

#是第一次運行的話會下載數據集 現成的話可以使用root參數指定數據集位置
# 存放的格式如下圖
 
# 根據接口讀取默認的CIFAR10數據 進行訓練和測試
#預處理
transform = transform.Compose([transform.ToTensor(), transform.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))])
#讀取數據集
trainset = torchvision.datasets.CIFAR10(root='./data', train=True, download=False, transform=transform)
#打包成DataLoader
trainloader = torch.utils.data.DataLoader(trainset, batch_size=4, shuffle=True, num_workers=1)
 
#同上
testset = torchvision.datasets.CIFAR10(root='./data', train=False, download=False, transform=transform)
testloader = torch.utils.data.DataLoader(trainset, batch_size=4, shuffle=False, num_workers=1)
classes = (1,2,3,4,5,6,7,8,9,10)  #類別定義
 
#使用
 for epoch in range(3):
        running_loss = 0.0 #清空loss
        for i, data in enumerate(trainloader, 0):
            # get the inputs
            inputs, labels = data #trainloader返回:id,image,labels
 
            # 將inputs與labels裝進Variable中
            inputs, labels = Variable(inputs), Variable(labels)
            
            #使用print代替輸出
            print("epoch:", epoch, "的第", i, "個inputs", inputs.data.size(), "labels", labels.data.size())
 

第二種 自己的圖像分類

這也是一個方便的做法,在pytorch中提供了torchvision.datasets.ImageFolder讓我們訓練自己的圖像。

要求:創建train和test文件夾,每個文件夾下按照類別名字存儲圖像就可以實現dataloader

這里還是拿上個舉例子吧,實際上也可以是我們的數據集

每個下面的布局是這樣的

# 預處理
transform = transform.Compose([transform.ToTensor(), transform.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))])
 
#使用torchvision.datasets.ImageFolder讀取數據集 指定train 和 test文件夾
img_data = torchvision.datasets.ImageFolder('data/cifar-10/train/', transform=transform)
data_loader = torch.utils.data.DataLoader(img_data, batch_size=4, shuffle=True, num_workers=1)
 
testset = torchvision.datasets.ImageFolder('data/cifar-10/test/', transform=transform)
testloader = torch.utils.data.DataLoader(testset, batch_size=4, shuffle=True, num_workers=1)
 
 for epoch in range(3):
        for i, data in enumerate(trainloader, 0):
            # get the inputs
            inputs, labels = data #trainloader返回:id,image,labels
            # 將inputs與labels裝進Variable中
            inputs, labels = Variable(inputs), Variable(labels)
 
            #使用print代替輸出
            print("epoch:", epoch, "的第", i, "個inputs", inputs.data.size(), "labels", labels.data.size())

第三種 一維向量數據集

這個是比較尷尬的,首先我們

假設將數存儲到txt等文件中,先把他讀取出來,讀取的部分就不仔細說了,讀到一個列表里就可以

常用的可以是列表等,舉例子

trainlist = []  # 保存特征的列表
 
targetpath = 'a/b/b'
filelist = os.listdir(targetpath) #列出文件夾下所有的目錄與文件
filecount = len(filelist)
# 根據根路徑 讀取所有文件名 循環讀取文件內容 添加到list
for i in range(filecount):
     filepath = os.path.join(targetpath, filelist[j])
     with open(filepath, 'r') as f:
         line = f.readline()
         # 例如存儲格式為 1,2,3,4,5,6 數字之間以逗號隔開
         templist = list(map(int, line.split(',')))
         trainlist.append(templist)
 
# 數據讀取完畢 現在為維度為filecount的列表 我們需要轉換格式和類型
# 將數據轉換為Tensor
 
# 假如我們的兩類數據分別存在list0 和 list1中
split = len(list0) # 用于記錄標簽的分界
 
#使用numpy.array 和 torch.from_numpy 連續將其轉換為tensor  使用torch.cat拼接
train0_numpy = numpy.array(list0)
train1_numpy = numpy.array(list1)
train_tensor = torch.cat([torch.from_numpy(train0_numpy), torch.from_numpytrain1_numpy)], 0)
#現在的尺寸是【樣本數,長度】 然而在使用神 經網絡處理一維數據要求【樣本數,維度,長度】
# 這個維度指的像一個圖像實際上是一個二維矩陣 但是有三個RGB通道 實際就為【3,行,列】 那么需要處理三個矩陣
# 我們需要在我們的數據中加上這個維度信息
# 注意類型要一樣 可以轉換
shaper = train_tensor.shape  #獲取維度 【樣本數,長度】
aa = torch.ones((shaper[0], 1, shaper[1])) # 生成目標矩陣
for i in range(shaper[0]):  # 將所有樣本復制到新矩陣
·    aa[i][0][:] = train_tensor[i][:]
train_tensor = aa  # 完成了數據集的轉換 【樣本數,維度,長度】
 
# 注 意 如果是讀取的圖像 我們需要的目標維度是【樣本數,維度,size_w,size_h】
# 卷積接受的輸入是這樣的四維度 最后的兩個是圖像的尺寸 維度表示是通道數量 
  
# 下面是生成標簽 標簽注意類別之間的分界 split已經在上文計算出來
# 訓練標簽的
total = len(list0) + len(list1)
train_label = numpy.zeros(total)
train_label[split+1:total] = 1
train_label_tensor = torch.from_numpy(train_label).int()
# print(train_tensor.size(),train_label_tensor.size())
 
# 搭建dataloader完畢
train_dataset = TensorDataset(train_tensor, train_label_tensor)
train_loader = DataLoader(dataset=train_dataset, batch_size=4, shuffle=True)
 
for epoch in range(3):
    for i, data in enumerate(trainloader, 0):
        # get the inputs
        inputs, labels = data #trainloader返回:id,image,labels
        # 將inputs與labels裝進Variable中
        inputs, labels = Variable(inputs), Variable(labels)
 
        #使用print代替輸出
        print("epoch:", epoch, "的第", i, "個inputs", inputs.data.size(), "labels", labels.data.size())

第四種 保存路徑和標簽的方式創建數據集

該方法需要略微的麻煩一些,首先你有一個txt,保存了文件名和對應的標簽,大概是這個意思

然后我們在程序中,根據給定的根目錄找到文件,并將標簽對應保存

class Dataset(object):
"""An abstract class representing a Dataset.
All other datasets should subclass it. All subclasses should override
``__len__``, that provides the size of the dataset, and ``__getitem__``,
supporting integer indexing in range from 0 to len(self) exclusive.
"""
def __getitem__(self, index):
	raise NotImplementedError
def __len__(self):
	raise NotImplementedError
def __add__(self, other):
	return ConcatDataset([self, other])

這是dataset的原本內容,getitem就是獲取元素的部分,用于返回對應index的數據和標簽。那么大概需要做的是我們將txt的內容讀取進來,使用程序處理標簽和數據

# coding: utf-8
from PIL import Image
from torch.utils.data import Dataset
class MyDataset(Dataset):
# 初始化讀取txt 可以設定變換
def __init__(self, txt_path, transform = None, target_transform = None):
	fh = open(txt_path, 'r')
	imgs = []
	for line in fh:
		line = line.rstrip()
		words = line.split()
         # 保存列表 其中有圖像的數據 和標簽
		imgs.append((words[0], int(words[1])))
		self.imgs = imgs 
		self.transform = transform
		self.target_transform = target_transform
def __getitem__(self, index):
	fn, label = self.imgs[index]
	img = Image.open(fn).convert('RGB') 
	if self.transform is not None:
		img = self.transform(img) 
    # 返回圖像和標簽
    
	return img, label
def __len__(self):
	return len(self.imgs)
 
# 當然也可以創建myImageFloder 其txt格式在下圖顯示 
import os
import torch
import torch.utils.data as data
from PIL import Image 
def default_loader(path):
    return Image.open(path).convert('RGB')
 
class myImageFloder(data.Dataset):
    def __init__(self, root, label, transform = None, target_transform=None, loader=default_loader):
        fh = open(label) #打開label文件
        c=0
        imgs=[]  # 保存圖像的列表
        class_names=[]
        for line in  fh.readlines(): #讀取每一行數據
            if c==0:
                class_names=[n.strip() for n in line.rstrip().split('	')] 
            else:
                cls = line.split() #分割為列表
                fn = cls.pop(0)  #彈出最上的一個
                if os.path.isfile(os.path.join(root, fn)):  # 組合路徑名 讀取圖像
                    imgs.append((fn, tuple([float(v) for v in cls])))  #添加到列表
            c=c+1
 
        # 設置信息
        self.root = root
        self.imgs = imgs
        self.classes = class_names
        self.transform = transform
        self.target_transform = target_transform
        self.loader = loader
 
    def __getitem__(self, index):  # 獲取圖像 給定序號
        fn, label = self.imgs[index]  #讀取圖像的內容和對應的label
        img = self.loader(os.path.join(self.root, fn))
        if self.transform is not None:  # 是否變換
            img = self.transform(img)
        return img, torch.Tensor(label) # 返回圖像和label
 
    def __len__(self):
        return len(self.imgs)
    
    def getName(self):
        return self.classes
# 

# 而后使用的時候就可以正常的使用
trainset = MyDataset(txt_path=pathFile,transform = None, target_transform = None)
# trainset = torch.utils.data.DataLoader(myFloder.myImageFloder(root = "../data/testImages/images", label = "../data/testImages/test_images.txt", transform = mytransform ), batch_size= 2, shuffle= False, num_workers= 2)
trainloader = torch.utils.data.DataLoader(trainset, batch_size=32, shuffle=True, num_workers=8)

它的要點是,繼承dataset,在初始化中處理txt文本數據,保存對應的數據,并實現對應的功能。

這其中的原理就是如此,但是注意可能有些許略微不恰當的地方,可能就需要到時候現場調試了。

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • pytorch 如何把圖像數據集進行劃分成train,test和val
  • Pytorch中的數據集劃分&正則化方法
  • pytorch學習教程之自定義數據集
  • pytorch加載語音類自定義數據集的方法教程
  • pytorch加載自己的圖像數據集實例
  • pytorch VGG11識別cifar10數據集(訓練+預測單張輸入圖片操作)

標簽:龍巖 寧夏 酒泉 定西 商丘 江蘇 金融催收 云南

巨人網絡通訊聲明:本文標題《解決pytorch讀取自制數據集出現過的問題》,本文關鍵詞  解決,pytorch,讀取,自制,數據,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《解決pytorch讀取自制數據集出現過的問題》相關的同類信息!
  • 本頁收集關于解決pytorch讀取自制數據集出現過的問題的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    日韩毛片在线免费观看| 51精品秘密在线观看| 91精品国产福利在线观看| 黄一区二区三区| 丝袜脚交一区二区| 中文字幕一区二| 欧美大度的电影原声| 欧美在线综合视频| 欧美综合视频在线观看| 免费高清视频精品| 亚洲黄色小视频| 国产欧美一区二区精品忘忧草 | 欧美中文字幕久久| 色综合视频在线观看| 91丨porny丨在线| 国产jizzjizz一区二区| 国产成人99久久亚洲综合精品| 亚洲电影一区二区三区| 亚洲日本va午夜在线影院| 中文字幕第一区第二区| 国产欧美精品一区二区三区四区 | 日本美女一区二区三区| 亚洲国产cao| 午夜精彩视频在线观看不卡| 同产精品九九九| 美女网站色91| 风流少妇一区二区| 色综合一区二区三区| 欧美午夜免费电影| 日韩三级免费观看| 久久影院午夜片一区| 国产精品美女久久久久高潮| 亚洲欧美偷拍三级| 日本中文一区二区三区| 韩国av一区二区| 成人手机在线视频| 91片黄在线观看| 欧美一区二区三区四区久久| 色综合久久精品| 91麻豆精品91久久久久久清纯 | 精品国产在天天线2019| 久久久噜噜噜久久人人看| 国产精品卡一卡二卡三| 亚洲国产精品久久久久婷婷884 | 成人97人人超碰人人99| 欧洲亚洲精品在线| 2021中文字幕一区亚洲| 亚洲欧美日韩久久| 毛片不卡一区二区| 成年人午夜久久久| 欧美日韩中文字幕一区二区| 久久日韩粉嫩一区二区三区| 亚洲视频1区2区| 精品在线一区二区三区| 色狠狠综合天天综合综合| 欧美一区二区三区视频免费| 亚洲欧洲日韩综合一区二区| 麻豆91精品91久久久的内涵| 成人国产精品免费观看| 91精品国产综合久久久久久漫画| 国产精品久久久久桃色tv| 午夜亚洲国产au精品一区二区| 国产二区国产一区在线观看| 欧美日韩1234| 怡红院av一区二区三区| 国产成人亚洲精品青草天美| 在线成人午夜影院| 一区二区三区 在线观看视频| 国产一区二区中文字幕| 欧美一级片在线| 亚洲1区2区3区4区| 一本一道久久a久久精品| 精品久久久久久久久久久院品网| 99精品久久久久久| 欧美精品一区二区高清在线观看| 亚洲男人天堂av| 国产精品911| 欧美mv日韩mv国产网站| 午夜精品久久久久久| 欧美性受极品xxxx喷水| 国产精品理伦片| 成人激情小说网站| 久久日韩粉嫩一区二区三区| 国产最新精品免费| 日韩精品在线看片z| 亚洲午夜久久久久久久久电影院| gogo大胆日本视频一区| 精品播放一区二区| 麻豆一区二区99久久久久| 7777精品久久久大香线蕉| 亚洲第一成年网| 欧美日韩二区三区| 天堂av在线一区| 4438亚洲最大| 蜜桃一区二区三区在线| 欧美美女网站色| 偷窥国产亚洲免费视频| 7777精品伊人久久久大香线蕉超级流畅| 亚洲免费毛片网站| 欧美性色黄大片手机版| 亚洲第一综合色| 91精品国产综合久久香蕉的特点| 日本网站在线观看一区二区三区 | 欧美日韩一级二级三级| 欧美一区2区视频在线观看| 一区二区免费看| 欧美亚洲一区三区| 亚洲激情图片qvod| 成人av中文字幕| 亚洲国产精品ⅴa在线观看| 成人黄页在线观看| 亚洲视频一区在线| 欧美人体做爰大胆视频| 欧美剧在线免费观看网站| 亚洲成人黄色小说| 欧美精品视频www在线观看| 日本不卡视频在线观看| 日韩一区二区三区在线| 久久精品999| 国产日产欧美一区| 91在线一区二区三区| 午夜不卡在线视频| 日韩欧美国产麻豆| 久久电影国产免费久久电影| 国产亚洲一区二区三区在线观看| 99在线热播精品免费| 亚洲高清免费观看| 亚洲精品一区二区在线观看| 成人免费黄色在线| 日本中文字幕一区二区视频| 日韩久久久精品| 成人av动漫在线| 亚洲欧洲制服丝袜| 7777精品伊人久久久大香线蕉超级流畅 | 一本色道久久综合亚洲精品按摩| 亚洲午夜免费福利视频| 日韩影视精彩在线| 欧美成人a在线| 欧美三级在线看| 国产精品亚洲午夜一区二区三区| 国产精品久久久久久久久免费桃花| 成人免费福利片| 亚洲精品亚洲人成人网| 日韩三级电影网址| 91高清在线观看| 久久99精品久久久久久动态图| 国产精品视频看| 欧美色图在线观看| 国产成a人亚洲精品| 日韩专区中文字幕一区二区| 国产精品乱码一区二三区小蝌蚪| 欧美日本一区二区| 成人中文字幕合集| 日韩激情视频在线观看| 国产调教视频一区| 26uuu国产电影一区二区| 在线观看免费视频综合| 久久超碰97人人做人人爱| 亚洲欧美激情小说另类| 欧美精品一区二区三区高清aⅴ | 一区二区久久久| 国产精品久久久久一区二区三区共| 日韩一级成人av| 69堂精品视频| 色94色欧美sute亚洲线路一ni| 国产高清亚洲一区| 久久国产精品免费| 日日夜夜精品视频天天综合网| 亚洲免费观看在线视频| 亚洲色图在线播放| 中文字幕日韩精品一区| 久久久电影一区二区三区| 欧美一级夜夜爽| 欧美日韩国产小视频在线观看| 欧美伊人久久大香线蕉综合69| 不卡视频一二三| 成人天堂资源www在线| 国产黄人亚洲片| 久久精品二区亚洲w码| 麻豆免费精品视频| 国内精品伊人久久久久影院对白| 五月天视频一区| 午夜精品久久久久久| 爽好多水快深点欧美视频| 亚洲成a人片在线不卡一二三区| 丝袜诱惑制服诱惑色一区在线观看| 亚洲午夜电影在线观看| 亚洲夂夂婷婷色拍ww47| 亚洲精品成人精品456| 亚洲激情自拍视频| 亚洲免费观看高清| 日韩影视精彩在线| 久久 天天综合| 激情偷乱视频一区二区三区| 精品一区二区国语对白| 国产一区欧美二区| 国产真实乱子伦精品视频| 国产乱理伦片在线观看夜一区 | 国产精品亚洲第一区在线暖暖韩国| 久久99热国产|