插图图片来自PexelsOleg Magni
当谈到关于深度学习的文章时,计算机视觉或自然语言处理(NLP)的进展受到了最大的关注。在 CV 和 NLP 方面的进步是梦幻般的和超级令人兴奋的;然而,许多数据科学家的日常工作都围绕着表格数据处理。
表格数据分类和回归是基本任务。它们通常用经典方法建模,如随机森林 s、支持向量机 s、线性/逻辑回归 s 和朴素贝叶斯,在许多标准库中的一个中实现— scikit-learn 、 XGBoost 等。
尽管如此,尝试更新的深度学习方法来用更复杂的数据建模是有益的。
截图来自https://playground.tensorflow.org用神经网络进行简单分类。
在本帖中,我们将展示如何使用 Lightning Flash 用几行代码准备数据和训练模型。
这个建立在 PyTorch Lightning 之上的开源 AI 工厂为表格、图像、文本等多个领域提供了开箱即用的解决方案。和所有基本任务。我们在两个简单的 Kaggle 竞赛中展示了该解决方案(并在下面链接了特定的内核):
www.kaggle.com](https://www.kaggle.com/jirkaborovec/titanic-crash-with-lightning-flash) [## Starter⚡Flash:宇宙飞船🚀泰坦尼克
www.kaggle.com](https://www.kaggle.com/code/jirkaborovec/starter-flash-spaceship-titanic)
www.kaggle.com](https://www.kaggle.com/jirkaborovec/house-prices-predictions-with-lightning-flash)
在下面的小节中,我将介绍表格建模的四个阶段(外加两个奖励),包括: 1。数据准备 2。模型创建 3。培训模式 4。评估/推理
Lightning Flash API 统一了各种数据加载和任务,确保分类和回归代码相似且易于阅读。
一般来说,数据准备是一个宽泛的主题,所以在本教程中,让我们缩小范围。对于本帖,我们将使用房价数据集。
我们假设数据是干净的,并且已经针对我们正在解决的任务进行了检查。对于分类,预测是映射到预定义标签的正离散值。对于回归,预测是一个没有任何界限的浮点值。
任何训练管道的第一步都是加载数据和识别数据(每列)类型。我们需要区分连续输入和分类输入。连续(数值)值是示例性的,但是分类(主要是字符串)值需要通过一些内部映射转换成数值。
别担心。所有这些都是在 Flash 内部完成的!作为用户,你不需要考虑它,除非你想。
当您对数字和分类输入进行排序时,您可以手动转换它们,或者使用一些启发式/统计来推断类型。
用于转换数字列和分类列的代码段。
接下来,我们使用from_csv
方法创建一个数据模块。为此,我们指定输入 CSV 文件,设置训练和训练/验证分割的批量大小,我们希望用作特征的数字和分类列,以及我们希望预测的目标列。
用于创建 Flash 数据的代码段。经验法则是使用所提供数据的 20%-40%之间的验证分割。
下一步是创建任务模型。在这种情况下,我们将创建一个表格回归模型,其中我们提供了我们的 **DataModule、**以及其他一些特定于模型的属性,比如优化器和学习率。
用于创建 Flash 模型的代码段。
训练一个模型通常是一项非常复杂的任务,但闪电使它变得简单明了。由于 Flash 是由 PyTorch-Lightning (PL)支持的,所以您可以利用所有 PL 回调和功能来训练您的模型。
在这种情况下,我们将使用 CSV 记录器方便地将训练统计数据绘制到 IPython 笔记本上。
用于培训 Flash 模型的代码段。我们训练 75 个纪元,并利用我们机器上的所有 GPU。
培训完成后,我们用seaborn
包绘制流程中收集的所有指标和损失:
用于绘制收集的指标的代码片段。
如果您不知道您的模型/数据的最佳学习率,您可以使用 PyTorch Lightning 学习率探测器。您需要在训练器中启用 LR,并在fit
方法之前调用tune
方法:
寻找最佳学习率的代码片段。
当您运行此代码时,您应该会看到类似下图的训练曲线,表明您的模型正在收敛和学习。
绘制培训指标。
表格建模的最后一部分是对新数据进行推理。同样,Flash 使推断变得简单明了,因为模型会记住在训练期间使用了哪些列,并在数字列和分类列之间进行了分隔。
我们传递一个加载的表或者一个路径到我们想要评估的 CSV 文件,FFlash 会给我们模型预测:
让我们看看预测价格分布是什么:
列车与测试数据的价格分布。
Flash Zero 是 Lightning Flash 的零代码机器学习扩展,它提供了 Lightning Flash 功能,而不需要一行 python 脚本。
Flash zero 对于快速原型和超参数搜索非常有用,这些搜索定义了给定选项或云平台(如 grid.ai )的外部循环。
towardsdatascience.com](https://towardsdatascience.com/hyperparameter-optimization-with-grid-ai-and-no-code-change-b89218d4ff49)
让我们在 Kaggle 的另一个简单的表格分类任务上演示 Flash Zero—表格游乐场系列—2021 年 11 月。
[## (演奏等的)表现,风格;(乐曲)演奏📋带 Lightning⚡闪光的表格。
www.kaggle.com](https://www.kaggle.com/jirkaborovec/playing-tabular-with-lightning-flash)
在这种情况下,我们将替换我们所写的 python 训练脚本,该脚本连续创建数据、模型和训练器:
只需一次 CLI 调用:
flash tabular_classification \
--model.learning_rate=0.01 \
--model.optimizer="AdamW" \
--trainer.max_epochs 20 \
--trainer.accumulate_grad_batches=12 \
--trainer.gradient_clip_val=0.1 \
from_csv \
--train_file=/home/jirka/Downloads/train.csv \
--numerical_fields="['f0', 'f1', ..., 'f99']" \
--target_fields="target"
--batch_size=512
最后,我们可以用 TesorBoard 浏览训练进度,因为它也是默认的闪电记录器:
tensorboard --logdir ./lightning_logs
最近,Lightning Flash 还推出了带有时间序列的表格预测,我们在实际运行的竞争预测加密值目标值上展示了它。
使用mplfinance
包的示例加密时序绘图。
正在进行的带加密的 Kaggle 内核演示可以在这里找到:
[## 🪙Crypto📈使用 Lightning⚡闪光灯进行预测
www.kaggle.com](https://www.kaggle.com/jirkaborovec/crypto-forecasting-with-lightning-flash)
您对更酷的 PyTorch Lightning 集成感兴趣吗? 关注我,加入我们神奇的 懈怠 社区!
Jirka Borovec 拥有 CTU 大学的计算机视觉博士学位。他已经在几家 IT 创业公司和公司从事机器学习和数据科学工作几年了。他喜欢探索有趣的世界问题,用最先进的技术解决这些问题,并开发开源项目。