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()

你可能感兴趣的:(学习总结)