人工智能學習pyTorch自建數據集及可視化結果實現過程

一、自定義數據集

現有數據如下:

5個文件夾,每個文件夾是神奇寶貝的一種。

每個圖片形狀、大小、格式不一。

我們訓練CNN的時候需要的是tensor類型的數據,因此需要將所有的圖片進行下列轉換:

1.對文件夾編號,進行映射,比如妙蛙種子文件夾編號0,皮卡丘編號1等。

2.對文件夾中所有圖片,進行編號的對應,這個就是標簽。並保存為一個csv文件。

3.圖片信息獲取:分為train,val,test

4.處理圖片,使其成為torch可以處理的類型

1.文件夾映射

前半部分為文件夾的映射。我們希望傳入數據的時候直接傳入文件夾的名字,而文件夾所在的路徑就是py文件所在的路徑,因此這樣可以直接讀取。對於路徑的操作使用os.path.join進行。

2.圖片對應標簽

輸入的filename,就是我們將圖片和標簽信息存儲的文件。

使用glob.glob方法,可以輕松調取路徑下的所有指定類型的文件。

將名字和標簽對應好後,通過csv.writer,可以將信息以csv格式寫入新文件。

以上是保存的部分,在這個函數中,我們還要重新讀取一下這個文件,因為要在這個類中獲得最終的圖片,以及標簽,並且返回。

3.訓練及測試數據分割

這裡是第一步的圖片的後半部分,導入瞭圖片之後,對其進行分割,這裡是按照訓練、交叉驗證、測試,分別是0.6,0.2,0.2進行分割的。

分割完畢後的self.images, self.labels,就可以拿來進行tensor相關的處理瞭。

4.數據處理

上面幾步是準備工作,接下來定義的__getitem__是為瞭能夠使train_loader = DataLoader()這一語句實現。在這裡面直接將數據進行我們希望進行的轉換。比如大小、旋轉、裁剪等。

最後返回處理好的圖片,以及tensor化的標簽。

另外,還需要定義一個__len__,使得我們可以獲得數據集長度。

二、ResNet處理

我們要用ResNet對圖片進行處理,因此其中的參數需要進行一定的修改。

主要的修改部分是ResNet18之中的resblock模塊。因為我們希望輸入的是3通道,224*224的圖片,因此在這裡對通道,步長進行一定的修改,並進行測試,成功之後便可以進行訓練瞭。

三、訓練及可視化

1.數據集導入

同時把GPU設備相關代碼準備好,並且由於需要可視化,因此先實例化visdom,並且在終端上輸入python -m visdom.server,打開visdom監視終端。

2.測試函數

先把模式改為eval(),接下來就是通過model,去訓練測試集,得到標簽,並統計正確率。

3.訓練過程及可視化

和之前的一樣,還是先實例化一個優化器,選擇損失函數模式,實例化ResNet18,然後進行訓練。

在這裡由於要展示,因此先對損失值,交叉驗證分數分別設置一個初始的線,通過append的方法,畫出我們的損失曲線,以及交叉驗證分數曲線。

通過torch.save方法存儲我們的最優解。

最後通過把存儲好的最優解調用起來,使用測試集,來測試最終的效果。

最終獲得的交叉驗證準確率89%,測試集準確率88%,損失值及交叉驗證結果的圖像如下:

以上就是人工智能學習pyTorch自建數據集及可視化結果實現過程的詳細內容,更多關於pyTorch自建數據集及可視化結果實現的資料請關註WalkonNet其它相關文章!

推薦閱讀: