pytorch .data(pytorch中dataset)

    本文主要介紹py torch . data(py torch中的數據集),下面一起看看py torch . data(py torch中的數據集)相關資訊。
    本節參考小土丘的pytorch入門視頻教程。建議學習時多讀源代碼。你可以通過源代碼中的注釋快速找出一個類或函數的功能以及輸入輸出的類型。
    dataset#借用dataset可以快速訪問深度學習所需的數據。例如,我們需要訪問以下培訓數據:
    其中,訓練數據集存儲在train中,螞蟻和蜜蜂都是它們所包含的圖片數據的文件夾名和標簽,驗證數據集存儲在val中。
    如果我們希望數據集類實現以下數據訪問形式:
    dataset = my dataset( 根目錄 , 標簽目錄 )img,label = dataset [0] #我們只需要繼承dataset類,并重寫__getitem__(必需的)和__len__(建議的)方法。可以通過在交互模式下執行以下語句來查看詳細信息:
    從torch.utils.data導入數據集幫助(dataset) #還是執行數據集??#或者在pycharm中按住ctrl點擊dataset直接查看源代碼。輸出如下所示:
    表示: class : ` dataset &;的抽象類。所有表示從鍵到數據樣本的映射的數據集都應該對其進行子類化。所有子類都應該覆蓋: methe cho 6-@ . com `_ _ getitem _ _ `,支持為給定鍵提取數據樣本。子類還可以選擇覆蓋: methe cho 6-@ . com `_ _ len _ _ `,這將返回數據集大小的許多: class cho 6-@ . com `~torch . utils . data . sampl:class: ` ~ torch . utils . data . data loader `的實現和默認選項.定義mydataset類:# import os from torch . utils . data import dataset from torch . utils . data . dataset import t _ co from pil import image class my datas: d: 得到了所有的圖像文件名:參數root_dir:數據路徑:參數lab:標簽 self . root _ d . ir = root _ dir self . label _ dir = label _ dir self . data _ dir = os . path . join(self . root _ dir,self . label _ dir)self . img _ names = os . listdir(self . data _ dir)def _ _ getitem _ _(self,index)-t_co: 只能通過下標訪問數據集:參數ind:下標:r: img(pil)。標簽 img _ nam: return len(self . img _ names)使用我的數據集。class #以交互模式導入mydataset并執行以下語句:
    ants _ dataset = my dataset( 數據集/訓練 , 螞蟻 )#創建數據集bees _ dataset = my dataset( 數據集/訓練 , 蜜蜂 )img,label = ants _ dataset[47]# access data len(bees _ dataset)# get dataset length img . show# display picture dataset = ants _ dataset bees _ dataset # add dataset tensor board # tensor board可以用來記錄一些數據(標量、圖片等。)以日志的形式在訓練模型時生成,同時也可以將記錄的數據可視化,方便我們對現有模型進行分析。比如借助tensorboard,記錄并可視化損失函數隨訓練周期的下降過程。
    要使用tensorboard,必須首先通過以下命令將其安裝在conda環境中:
    conda安裝tensorboard記錄標量)#記錄標量需要使用torch.utils.tensorboard中summarywriter類的add_scalar方法
    創建并執行以下python腳本:
    來自火炬。utils。tensorboard導入摘要writer #參數:log_dir,存儲日志的路徑名writer = summary writer( 日志 )#記錄曲線y = x 2 #參數1:標簽,數據標識符#參數2: scalar_valu: writer中i的x軸數據。add _ scalar( y = x 2 ,i * * 2,i) #調用close確保數據刷新到磁盤寫入器。close腳本成功執行后,將在腳本文件所在的當前路徑下創建一個logs文件夾,并生成一個日志文件。成功生成日志后,在conda環境中執行以下命令以啟動tensorboard可視化服務:
    #指示日志存儲的位置和服務啟動時使用的端口。默認端口為6006#多人使用同一臺服務器時,應避免以下兩個tensorboa值相同的參數。rd-logdir = second/logs-port = 6008該命令成功執行后,會給出以下提示:
    在瀏覽器中打開上述鏈接以查看可視化效果:
    注:tensorboard是根據不同標簽可視化的。如果多次寫入的日志具有相同的標記,可能會導致可視化出現問題。只需刪除日志并重新生成它,然后重新啟動可視化服務。
    image)# image可以通過使用torch.utils.tensorboard中summarywriter類的add_image方法來記錄
    該方法定義如下:
    def add _ image (self,tag,img _ tensor,global _ step = none,walltime = none,dataformats = chw )# tag (string)同上# img _ tensor (torch。張量、numpy.array或string/blobnam:圖像數據# global _ st: step # data formats(string):圖像數據格式。如果不是chw,您需要指定創建并執行以下python腳本:
    從torch.utils.tensorboard導入摘要writer從pil導入圖像import numpy as np writer = summary writer( 日志 )img _ path = e: \ \ code \ \ python \ \ py torch-learn \ \ dataset \ \ train \ \ ants \ \ 0013035 . jpg # img是pil . jpegimageplugin . jpegimagefile type img = image . open(img _ path)img _ array = np . array(img)writer . add _ image( 螞蟻 ,img _ array,0,數據格式= hwc )后編劇的劇本。close執行成功,只需像之前一樣啟動可視化服務。
    如果日志中相同標簽標識的數據中有多個global _ steps,可以顯示如下:拖動軸可以看到global _ steps之間的圖像變化。
    轉換#transforms是位于torchvision包中的一個模塊,模塊中有很多類可以把要輸入神經網絡的數據進行轉換,以滿足網絡的需要。
    totensor#這個類可以將pil圖像或numpy.ndarray轉換成張量,以便于將圖像輸入神經網絡。下面的代碼做了一個簡單的例子:將pil圖像轉換成張量后,借助tensorboard可以直接寫入日志文件:
    從torchvision導入轉換從pil導入圖像從torch.utils.t:/code/python/pytorch-learn/dataset/train/.螞蟻 \ /6743948 _ 2b8c096dda.jpg img = image.open (img _ path) #將pil圖像轉換為張量類型# 1。劃分輸入數據形狀w,h,c —— c,w,h# 2。將所有數字除以255。將數據規范化到[0,1] #實例就像方法一樣被調用,其中實際調用的是totensor類中的__call__方法。# mor = trans _ to _ tensor(img)#將張量圖像寫入日志writer = summary writer( 日志 )使用tensorboard。writer . add _ image( img _張量 ,img _ tensor,1) writer.close啟動tensorbard可視化服務并在瀏覽器中訪問:
    normalize#normalize類可以通過均值和標準差來歸一化張量圖像。這種構造函數定義如下:
    #平均(sequenc:表示圖像的每個通道的平均值的序列# std (sequenc:表示圖像的每個通道的標準偏差的序列# inplac:是否原位修改tensordef _ _ init _ _ (self,mean,std,inplac:),這個類的具體歸一化操作如下:
    output[channel]=(input[channel]-mean[channel])/std[channel]對于任意通道,如果原始值為[0,1],傳入均值為0.5,std為0.5,則歸一化運算為:(value-0.5)/0.5 = 2*value-1,帶入。
    創建并執行以下腳本:
    從torchvision導入轉換從pil導入圖像從torch.utils.tensorboard導入摘要writer#在轉換模塊trans _ to _ tenor = transforms中創建totensor類。totensor #在transforms模塊中創建normalize類。三個通道的均值和標準差都是0.5 trans _ normalize = transforms . normalize([0.5,0.5,0.5],[0.5,0.5],0.5)#獲取pil圖像img _ path = :/code/python/pytorch-learn/dataset/train/ants\ /6743948 _ 2b 8 c 096 dda . jpg img = image.open (img _ path) #將pil圖像轉換為張量類型# 1。將所有數字除以255,將數據歸一化為[0,1]img _ tensor = trans _ to _ tensor(img)# normalize tensor img _ normalize = trans _ normalize(img _ tensor)print(type(img _ normalize))# class ;火炬。張量與數學。;= #使用t。傳感器板將張量圖像寫入日志日志 )writer . add _ image( 正常化 ,img _ normalize,1) writer.clos:要求的序列或輸出大小#如果siz:創建并執行以下腳本:
    從torchvision導入轉換從pil導入圖像從torch.utils.tensorboard導入摘要writer# totensor在轉換模塊trans _ to _ tensor = transforms中創建的類。totensor #在轉換模塊trans _ normalize = transforms中創建normalize類。normalize ([0.5,0.5,0.5],[0.5,0.5]) #創建resize類trans _ resize _ 52x 52 = transforms . resize((80,40)) trans _ resize _ 52 = transforms。獲取pil圖像img _ path = :/code/python/pytorch-learn/dataset/train/ants\ /6743948 _ 2b8c096。mg_path)#用tensor board writer = summary writer( 日志 )#將pil圖像轉換成張量類型# 1。輸入數據形狀w,h,c —— c,w,h# 2。將所有數字除以255,將數據歸一化為[0,1]img _ tensor = trans _ to _ tensor(img)#第0步:記錄張量圖像writer . add _ image( img-tensor-normalize-resize _ 52x 52,img _ tensor,0)#歸一化張量img _ normalize = trans _ normalize(img _ tensor)#第一步:記錄歸一化的圖像寫入器。添加圖像( img-tensor-normalize-resize _ 52x 52,img_normalize,1)# resize img _ resize _ 52x 52 = trans _ resize _ 52x 52(img _ normalize)#第二步:記錄(52,52)圖像寫入器。調整大小后添加圖像( img-tensor-normalize-resize _ 52x 52,img _ resize _ 52x52,2) # pair (52,52)52)resize張量再次執行(52)的resize img _ resize 52 = trans _ resize 52(img _ resize 52 x52)#第三步:記錄(52)。調整writer . add _ image( img-tensor-normalize-resize _ 52x 52,img _ resize _ 52,3) writer.close啟動tensorbard可視化服務并在瀏覽器中訪問它:
    compose#在上一節的例子中,我們的圖像處理基于一系列的變換。為了在每次轉換執行后記錄圖像,我們在每兩次轉換之間插入一個圖像記錄操作。如果我們不這樣做。;不需要在每次轉換執行后記錄圖像,那么我們可以通過compose順序執行一系列轉換。
    compose類的構造函數定義如下:
    # trans froms(list of transform objects): # list d:)這個類的核心思想在于__call__函數:
    def _ _ call _ _ (s: for t in s: img = t(img)return img with compose,為了得到上一節的最終結果,我們可以將上一節的腳本簡化如下:
    從torchvision導入轉換從pil導入圖像從torch.utils.tensorboard導入摘要writer# totensor在轉換模塊trans _ to _ tensor = transforms中創建的類。totensor #在轉換模塊trans _ normalize = transforms中創建normalize類。normalize ([0.5,0.5,0.5],[0.5,0.5]) #創建resize類trans _ resize _ 80x 40 = transforms . resize((80,40))trans _ resize _ 200 = transforms。resize (200) #創建合成類trans _ compose = transforms。compose ([trans _ to _ tensor,trans _ normalize,trans _ resize _ 80x40,trans _ resize _ 200]) #獲取pil圖像img _ path = e:/code/python/pytorch-learn/dataset/train/ants\ /6743948 _ 2b8c096dda。g _ path)# execute compose img _ compose = trans _ compose(img)# record合成的圖像writer = summary writer( 日志 ).writer . add _ image( img-tensor-normalize-resize _ 80x 40-resize _ 200,img _ compose,0) writer.close啟動tensorbard可視化服務并在瀏覽器中訪問它:
    transforms模塊中還有許多其他轉換類,它們可以在需要時查詢文檔。在查詢文檔時,理解類或函數的功能以及輸入和輸出類型是很重要的。
    dataset和transforms的組合使用#在pytorch官網首頁,按照不同的模塊提供文檔,包括:核心模塊、音頻模塊、文本模塊、可視化模塊等。
    在torchvision.datasets中,提供了對常用數據集的支持,可以幫助我們快速下載、解壓和使用數據集:
    以cifar10數據集為例,按照以下文檔使用:
    根據文檔,如果要使用cifar10數據集,應該使用torch vision . datasets . cifs ar 10類,該類的構造函數需要傳入以下參數:
    # root (string):數據集所在的目錄# train (bool,可選):tru測試集# transform (callable,optional):function/transform # target _ transform(callable,optional):目標的function/transform # download(bool,optional):如果為tru: str,train: bool = tru: optional[callabl: optional[callabl:·布爾= fals:根據文檔中的__getitem__函數,我們知道當通過下標訪問dataset時,會返回(image,target),即圖像和圖像的類型。
    創建以下腳本并執行它(使用訓練集):
    導入torchvision# create transform,將pil圖像轉換為tensor data _ trans = torch vision . transforms . pose([torch vision . transforms . tot tensor])#建議下載始終為真。即使提前下載了數據集,如果下載很慢也可以復制控制臺輸出的下載地址。然后在迅雷#下載后將壓縮包復制到根目錄下下載地址也可以在火炬威視的源代碼中查看。數據集。cifar10train _ set =火炬視覺。數據集。cifar 10(root = 。/dataset ,train = true,transform=data_trans,download=true)img,target = train _ set[0]print(type(img))# class ;torch.tensor = 打印(目標)# 6 #[ ;飛機與航空。;, 汽車與汽車。;,鳥 , 貓和貓。;, 鹿 , 狗和貓。;, 青蛙 , 馬與馬。;, 船舶與航空公司。;, 卡車 ]打印(train _ set。classes [target]) # frog創建以下腳本并執行它(。
    import torch vision test _ set = torch vision . datasets . cifar 10(root = 。/dataset ,train=false,download=true)img,target = test _ set[0]img . showprint(type(img))# class ;pil.image.image= print(target)# 3 print(test _ set . class[target]) # catdataload:數據集類型dataset # batch _ siz:批處理大小,d: 1 # shuffl:每個歷元后是否打亂數據,d: fals:加載數據時使用的子進程數,0表示使用主進程加載,d: 0。可以設置為cpu核心數# drop _ last (bool,可選):)。當數據個數不能被batch_siz:為fals: dataset[t _ co],batch_siz:可選[int] = 1,shuffl: bool = fals:可選[sampler] = none,batch_sampl:可選[sampler[sequenc: int = 0,collat:可選[_collate_fn_t] = none,pin _ memory: bool = false,drop _ last : boo= none,multiprocessing _ context = none,generator = none,*,prefetch_factor: int = 2,p:布爾= fals:創建并執行以下腳本:
    導入torch vision from torch . utils . data導入dataloader from torch . utils . t: trans _ to _ tensor = torch vision . transforms . to tensortrain _ dataset = torch vision . datasets . cifar 10(root = 。/dataset ,transform = trans _ to _ tensor,download = true) # dataloader根據batch_size封裝img和target,如圖,train _ data loader = data loader(dataset = train _ dataset,batch_siz:的epoch,用于:的batch_num,batch _ data # print(epoch, : ,batch_num) batch_img,batch _ target = batch _ data writer . add _ images( cifr 10-batch 64-no _ shuffle-no _ drop _ last _ epoch { } 。format (epoch),batch _ img,batch _ num)writer . clos:。如果num_work: #這里插入了訓練網絡的全部代碼...if _ _ nam:火車2。如果修改后代碼仍然報錯:os:[win:。
    進入高級系統設置:
    點擊:高級-性能-設置:
    點擊:高級-更改:
    如下圖,將d盤的虛擬內存調整到系統管理的大小(重啟后生效)。如果仍然報告錯誤,您可以將大小自定義為一個很大的值,如10gb-100gb。
    腳本成功執行后,啟動tensorbard可視化服務并在瀏覽器中訪問:
    step=170時:(日志比較大,可能需要在瀏覽器中刷新幾次才能加載滿)。
    當步驟=781時:
    因為我們在創建dataloader時,參數shuffle=false使得epoch0和epoch1之間同批次提取的圖像相同;參數drop_last=false使最后一批圖像即使小于64也不會被丟棄。
    修改腳本,使shuffle=true,drop_last=true,然后再次執行腳本并啟動tensorbard可視化服務。瀏覽器中的訪問結果如下:
    如圖所示,從epoch0和epoch1之間的同一批次(780)提取的圖像不同,丟棄第781批次。
    標簽:
    圖像數據
    了解更多py torch . data(py torch中的數據集)相關內容請關注本站點。

    手機如何控制電腦操作(手機怎么控制電腦屏幕,電腦不用操作)
    靜電導致電腦死機(電腦老有靜電怎么回事)
    shell環境變量的定義(shell設置環境變量即時生效)
    ipad air3重量是多少(iPadair3重量多少千克)
    win10系統u盤安裝制作(win10系統u盤安裝步驟)
    pytorch .data(pytorch中dataset)
    5g網絡什么時候普及全國2020(5g網絡什么時候普及全國各地)
    聯想拯救者保修條例(聯想拯救者保修期幾年)
    微信怎么讓訂閱號成列表狀態(訂閱號信息怎么變成列表)
    oppo的輸入法怎么切換(oppo手機輸入法怎么切換別的輸入法)
    戴爾筆記本電源鍵亮但黑屏怎么辦,我的戴爾筆記本黑屏怎么辦但是還在運作開機的指示燈也亮著 搜
    ps軟件官方下載中文版手機版(ps軟件下載手機版安卓官方網站)
    oppor9splus怎么截屏
    ipad屏幕不亮但有聲音觸屏能用(ipad屏幕不亮但有聲音換屏幕要多少錢)
    諾基亞6120ci怎么下載軟件,怎么在諾基亞上下載軟件
    格力風管機e6是什么故障如何排除的(格力風管機e6是什么故障代碼怎么解決)
    臺式機硬盤如何重新分區,電腦硬盤重新分區方法
    電腦硬盤維修費用大概是多少錢啊
    手機如何做無線攝像頭(手機做wifi攝像頭)
    oppo怎么關相機的聲音了,怎么關閉相機拍照的聲音
    主站蜘蛛池模板: 久久国产精品免费一区| 中文字幕一区日韩在线视频| 亲子乱av一区区三区40岁| 成人中文字幕一区二区三区 | 在线播放一区二区| 无码国产精品久久一区免费| 成人影片一区免费观看| 亚无码乱人伦一区二区| 久久久91精品国产一区二区三区| 国产一区二区三区在线免费观看| 久久精品国产一区二区三| 冲田杏梨高清无一区二区| 日韩欧美一区二区三区免费观看| 无码人妻精品一区二区三区东京热| 国产福利一区二区精品秒拍| 日韩在线一区二区| 精品无码人妻一区二区三区品 | 日本福利一区二区| 精品视频一区二区三区四区| 日本一区二区三区精品中文字幕| 国产高清在线精品一区二区三区 | 国产在线观看91精品一区| 国产福利一区二区三区| 日韩人妻无码一区二区三区久久| 冲田杏梨高清无一区二区| 精品国产不卡一区二区三区| www.亚洲一区| 丰满爆乳一区二区三区| 一区二区三区在线免费看| 中文字幕一区二区三匹| 天堂一区人妻无码| 日韩精品免费一区二区三区| 日本美女一区二区三区| 狠狠综合久久AV一区二区三区| 国产成人无码一区二区在线观看 | 国产高清精品一区| 国产精品美女一区二区视频| 五月婷婷一区二区| 久久久久久一区国产精品| 中文字幕一区二区三区久久网站| 国产成人精品一区二三区熟女 |