path = untar_data(URLs.ADULT_SAMPLE)
df = pd.read_csv(path/'adult.csv')
cat_names = ['workclass', 'education', 'marital-status', 'occupation', 'relationship', 'race']
cont_names = ['age', 'fnlwgt', 'education-num']
procs = [Categorify, FillMissing, Normalize]
dls = TabularDataLoaders.from_df(df, path, procs=procs, cat_names=cat_names, cont_names=cont_names,
y_names="salary", valid_idx=list(range(800,1000)), bs=64)
learn = tabular_learner(dls)表格学习器
用于快速获取可训练表格数据的
Learner 函数您可能想在此模块中使用的主函数是 tabular_learner。它会自动创建一个适合您数据的 TabularModel 并推断出正确的损失函数。有关上下文中的使用示例,请参阅表格教程。
主要函数
TabularLearner
TabularLearner (dls:fastai.data.core.DataLoaders, model:Callable, loss_func:Optional[Callable]=None, opt_func:fastai.optimi zer.Optimizer|fastai.optimizer.OptimWrapper=<function Adam>, lr:float|slice=0.001, splitter:Callable=<function trainable_params>, cbs:fastai.callback.core.Callback|coll ections.abc.MutableSequence|None=None, metrics:Union[Call able,collections.abc.MutableSequence,NoneType]=None, path:str|pathlib.Path|None=None, model_dir:str|pathlib.Path='models', wd:float|int|None=None, wd_bn_bias:bool=False, train_bn:bool=True, moms:tuple=(0.95, 0.85, 0.95), default_cbs:bool=True)
用于表格数据的 Learner
| 类型 | 默认值 | 详情 | |
|---|---|---|---|
| dls | 数据加载器 | 包含 fastai 或 PyTorch DataLoader 的 DataLoaders |
|
| 模型 | 可调用对象 | 用于训练或推理的 PyTorch 模型 | |
| 损失函数 | 可选 | None | 损失函数。默认为 dls 中的损失函数 |
| 优化函数 | fastai.optimizer.Optimizer | fastai.optimizer.OptimWrapper | Adam | 用于训练的优化函数 |
| 学习率 | float | slice | 0.001 | 默认学习率 |
| 分割器 | 可调用对象 | 可训练参数 | 将模型分割为参数组。默认为一个参数组 |
| 回调函数 | fastai.callback.core.Callback | collections.abc.MutableSequence | None | None | 要添加到 Learner 的 Callback 函数 |
| 指标 | Union | None | 在验证集上计算的 Metric 指标 |
| 路径 | str | pathlib.Path | None | None | 保存、加载和导出模型的父目录。默认为 dls 的 path |
| 模型目录 | str | pathlib.Path | 模型 | 保存和加载模型的子目录 |
| 权重衰减 | float | int | None | None | 默认权重衰减 |
| bn_bias_权重衰减 | bool | False | 对归一化层和偏置参数应用权重衰减 |
| 训练 bn | bool | True | 训练冻结的归一化层 |
| 动量 | tuple | (0.95, 0.85, 0.95) | 调度器的默认动量 |
| 默认回调函数 | bool | True | 包含默认的 Callback 函数 |
它的工作方式与普通 Learner 完全相同,唯一的区别在于它实现了一个专门用于处理单行数据的 predict 方法。
tabular_learner
tabular_learner (dls:TabularDataLoaders, layers:list=None, emb_szs:list=None, config:dict=None, n_out:int=None, y_range:Tuple=None, loss_func:Callable|None=None, opt_func:Optimizer|OptimWrapper=<function Adam>, lr:float|slice=0.001, splitter:Callable=<function trainable_params>, cbs:Callback|MutableSequence|None=None, metrics:Callable|MutableSequence|None=None, path:str|Path|None=None, model_dir:str|Path='models', wd:float|int|None=None, wd_bn_bias:bool=False, train_bn:bool=True, moms:tuple=(0.95, 0.85, 0.95), default_cbs:bool=True)
使用 dls 获取一个 Learner,带有 metrics,并包含一个使用剩余参数创建的 TabularModel。
| 类型 | 默认值 | 详情 | |
|---|---|---|---|
| dls | 数据加载器 | 包含 fastai 或 PyTorch DataLoader 的 DataLoaders |
|
| 层 | list | None | 由 LinBnDrop 生成的层的大小 |
| 嵌入大小 | list | None | 所有类别特征的 n_unique, embedding_size 元组 |
| 配置 | dict | None | 来自 tabular_config 的 TabularModel 配置参数 |
| 输出大小 | int | None | 模型的最终输出大小 |
| y 范围 | Tuple | None | 最终 sigmoid 函数的低值和高值范围 |
| 损失函数 | 可选 | None | 损失函数。默认为 dls 中的损失函数 |
| 优化函数 | fastai.optimizer.Optimizer | fastai.optimizer.OptimWrapper | Adam | 用于训练的优化函数 |
| 学习率 | float | slice | 0.001 | 默认学习率 |
| 分割器 | 可调用对象 | 可训练参数 | 将模型分割为参数组。默认为一个参数组 |
| 回调函数 | fastai.callback.core.Callback | collections.abc.MutableSequence | None | None | 要添加到 Learner 的 Callback 函数 |
| 指标 | Union | None | 在验证集上计算的 Metric 指标 |
| 路径 | str | pathlib.Path | None | None | 保存、加载和导出模型的父目录。默认为 dls 的 path |
| 模型目录 | str | pathlib.Path | 模型 | 保存和加载模型的子目录 |
| 权重衰减 | float | int | None | None | 默认权重衰减 |
| bn_bias_权重衰减 | bool | False | 对归一化层和偏置参数应用权重衰减 |
| 训练 bn | bool | True | 训练冻结的归一化层 |
| 动量 | tuple | (0.95, 0.85, 0.95) | 调度器的默认动量 |
| 默认回调函数 | bool | True | 包含默认的 Callback 函数 |
如果您的数据是使用 fastai 构建的,您可能不需要向 emb_szs 传递任何内容,除非您想更改库的默认设置(由 get_emb_sz 生成);n_out 也应自动推断。layers 默认为 [200,100],并与 config 一起传递给 TabularModel。
使用 tabular_config 创建 config 并自定义所使用的模型。y_range 提供了便捷访问,因为此参数经常使用。
所有其他参数都传递给 Learner。
TabularLearner.predict
TabularLearner.predict (row:pandas.core.series.Series)
对单个样本进行预测
| 类型 | 详情 | |
|---|---|---|
| 行 | Series | 要预测的特征 |
我们可以将单行数据传递给 TabularLearner 的 predict 方法。其输出与其他 predict 方法略有不同,因为它总会同时返回输入数据。
row, clas, probs = learn.predict(df.iloc[0])row.show()| 工作类型 | 教育程度 | 婚姻状况 | 职业 | 关系 | 种族 | 教育程度-数值_缺失 | 年龄 | 最终权重 | 教育程度-数值 | 薪资 | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 私营 | 大专学历 | 已婚公民配偶 | #na# | 妻子 | 白人 | False | 49.0 | 101320.001685 | 12.0 | <50k |
clas, probs(tensor(0), tensor([0.5264, 0.4736]))