FAST.AI入門學習筆記——數據預處理

FAST.AI 深度學習工具庫基於著名深度學習框架 PyTorch 構建,PyTorch 是由 Facebook 主導開發的深度學習框架,因其高效的計算過程以及良好的易用性被諸多大公司和科研人員所喜愛。本文簡單介紹FAST.AI 的主要功能模塊,相關數據集和數據類型。結合圖像和文本實例,學習將數據處理成 DataBunch 對象。

FAST.AI 是一家位於美國的深度學習研究機構,致力於讓更多人更方便地使用深度學習技術。FAST.AI 的創始人是傑里米·霍華德(Jeremy Howard)。他是舊金山大學的教職員工,同時也是一位企業家,商業分析師和教育家。
目前,FAST.AI 主要在做兩件事情:製作傳播深度學習知識的 MOOC,和維護 FAST.AI 深度學習工具庫。當然,FAST.AI 也會做一些前沿研究,包括對深度學習社區做貢獻。
FAST.AI 深度學習工具庫基於著名深度學習框架 PyTorch 構建,PyTorch 是由 Facebook 主導開發的深度學習框架,因其高效的計算過程以及良好的易用性被諸多大公司和科研人員所喜愛。你可以把 FAST.AI 看作是 PyTorch 的更高階 API,使深度學習初學者可以通過簡單的幾行代碼就能構建和訓練深度學習模型。

//安裝fastai
!pip install fastai

FAST.AI 包含 20 餘個模塊、主要模塊如下:
fastai.vision:主要用於針對圖像處理和建模。
fastai.text:主要用於針對文本處理和建模。
fastai.tabular:主要用於數據結構化操作。
fastai.collab:主要用於解決協同過濾問題。
fastai.basic_data:該模塊定義基本 DataBunch 數據類,用於建模。
fastai.layers:該模塊包含模型中所需的基本自定義層和一些輔助函數。
fastai.datasets:該模塊方便下載一些常用的基準數據集。

其中,Core 是 FAST.AI 的底層實現模塊,core 和 torch_core 分別依賴於 NumPy,Pandas,Matplotlib 和 PyTorch 庫實現。Training 部分是訓練方法,這個會在後面詳細介紹。最後呈現的是 FAST.AI 主要的 4 個應用模塊:計算機視覺、自然語言處理、協同過濾,以及針對表格數據的處理方法。

數據是一切機器學習應用的前提,不同工具支持的數據類型也不太一樣。例如,scikit-learn 支持 Python 數組和 NumPy 數組,而 TensorFlow 和 PyTorch 都有自己特別定義的張量類型。FAST.AI 基於 PyTorch 開發,所以其沿用了 PyTorch 的數據類型。

FAST.AI 提供了一套方便的基準數據集接口 fastai.datasets,我們可以快速下載 MNIST,COCO 等常用的基準數據集。fastai.datasets 模塊中重點有如下幾個類和方法:
URLs:獲取相應數據集的下載鏈接。
untar_data:下載數據集並解壓。
download_data:僅下載數據集,不解壓。

from fastai.datasets import untar_data, URLs, download_data

#
download_data("https://...")
mnist_path = untar_data(URLs.MNIST)
mnist_path

mnist_path.ls()  # 進一步查看目錄結構

該類具備的 ImageList.from_folder 方法能夠遍歷整個目錄下的樣本數據。FAST.AI 大部分方法在理解時,都可以根據字面意思揣摩其用途。

from fastai.vision import ImageList
# 遍歷指定路徑下的圖像樣本
mnist_data = ImageList.from_folder(mnist_path)
mnist_data
mnist_data[0]  # 讀取第一個樣本

如果你有使用 PyTorch 的經驗,應該知道 PyTorch 中傳入模型的數據會被製作成爲 Dataloader 數據加載器。數據加載器包含了一系列對數據的預處理流程,以及能夠以小批量的方式加載數據,這在深度學習中是非常重要的。FAST.AI 中一個類似的概念是 DataBunch,DataBunch 是傳入模型的基本對象,你可以通過部分 FAST.AI Dataset 或 PyTorch DataLoader 進行構建。首先,我們來看一下使用 FAST.AI Dataset 來快速構建一個 DataBunch 對象。
我們可以使用 fastai.vision.ImageDataBunch 來快速構建一個圖像類的 DataBunch 對象。同樣,我們會用到一個 ImageDataBunch.from_folder 從文件夾路徑構建的方法,這和上面非常相似。

DataBunch 對象基本參數爲 DataBunch(train_dl:DataLoader,valid_dl:DataLoader),所以需要傳入訓練集和驗證集。如果你的路徑下文件夾名稱以 train 和 valid 這樣的規範名稱命名,ImageDataBunch.from_folder 可以自動識別。否則,就需要像下方一樣自定義。

from fastai.vision import ImageDataBunch

# 傳入數據集路徑,以及指定路徑下訓練集和驗證集文件夾名稱
mnist_data_bunch = ImageDataBunch.from_folder(
    mnist_path, train='training', valid='testing')
mnist_data_bunch
# 傳入預覽行數,圖像尺寸
mnist_data_bunch.show_batch(3, figsize=(5, 5))

//或者:
# 讀取 DataBunch 中的一個小批次數據
mnist_data_bunch.one_batch()

除了圖像數據,文本數據也是常見的一類。接下來,我們以 FAST.AI 提供的文本數據集爲例,將其處理成 DataBunch 對象。IMDB 是一個電影評論數據集,其記錄了 IMDB 網站中的電影評論,併爲這些文本數據添加了積極和消極標籤。

imdb_path = untar_data(URLs.IMDB_SAMPLE)
imdb_path, imdb_path.ls()  # 查看路徑

根據上面的路徑,我們可以看出數據全部存放與 texts.csv 中,所以我們使用 TextDataBunch.from_csv 來讀取數據。其中,需要傳入路徑和文件名參數。默認情況下,該方法因爲默認參數 valid_pct=0.2 會將全部數據中的 20% 劃爲驗證集。

from fastai.text import TextDataBunch

imdb_data_bunch = TextDataBunch.from_csv(imdb_path, 'texts.csv')
imdb_data_bunch
imdb_data_bunch.show_batch()
imdb_data_bunch.one_batch()
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章