在定义了所有配置之后,我们需要将它们整合在一起,这就是 TabularModel
发挥作用的地方。TabularModel
是核心的工作马,它负责协调和设置所有内容。
TabularModel
解析配置并:
- 初始化模型
- 设置实验跟踪框架
- 初始化和设置
TabularDatamodule
,它处理所有数据转换并为 DataLoader 做准备 - 设置回调函数和 Pytorch Lightning Trainer
- 使您能够训练、保存、加载和预测
初始化 Tabular Model¶
基本用法:¶
data_config
: DataConfig: DataConfig 对象或 yaml 文件的路径。model_config
: ModelConfig: ModelConfig 的子类或 yaml 文件的路径。根据配置类型确定运行哪个模型。optimizer_config
: OptimizerConfig: OptimizerConfig 对象或 yaml 文件的路径。trainer_config
: TrainerConfig: TrainerConfig 对象或 yaml 文件的路径。experiment_config
: ExperimentConfig: ExperimentConfig 对象或 yaml 文件的路径。
使用示例¶
tabular_model = TabularModel(
data_config=data_config,
model_config=model_config,
optimizer_config=optimizer_config,
trainer_config=trainer_config,
experiment_config=experiment_config,
)
模型扫描¶
PyTorch Tabular 还提供了一种简单的方法来检查不同模型和配置在给定数据集上的性能。这是通过 model_sweep
函数完成的。它接受一个模型配置列表或 pytorch_tabular.MODEL_PRESETS
中定义的预设之一,并在数据上训练它们。然后根据提供的指标对模型进行排名并返回最佳模型。
这些是主要的参数:
- task
: 预测任务的类型。可以是 'classification' 或 'regression'
- train
: 训练数据
- test
: 用于评估性能的测试数据
- 所有配置对象都可以作为对象或 yaml 文件的路径传递。
- models
: 要比较的模型列表。这可以是 pytorch_tabular.MODEL_SWEEP_PRESETS
中定义的预设之一,或 ModelConfig
对象的列表。
- metrics
: 训练期间需要跟踪的指标列表。指标应为 torchmetrics
中实现的功能指标之一。默认情况下,分类为准确率,回归为均方误差。
- metrics_prob_input
: 配置中定义的分类指标是强制参数。这定义了指标函数的输入是概率还是类别。长度应与指标数量相同。默认为 None。
- metrics_params
: 要传递给指标函数的参数。
- rank_metric
: 用于对模型进行排名的指标。元组的第一个元素是指标名称,第二个元素是方向。默认为 ('loss', "lower_is_better")。
- return_best_model
: 如果为 True,将返回最佳模型。默认为 True。
使用示例¶
sweep_df, best_model = model_sweep(
task="classification", # 可以是 "classification", "regression"
train=train,
test=test,
data_config=data_config,
optimizer_config=optimizer_config,
trainer_config=trainer_config,
model_list="lite", # pytorch_tabular.MODEL_SWEEP_PRESETS 中定义的预设之一
common_model_args=dict(head="LinearHead", head_config=head_config),
metrics=['accuracy', "f1_score"], # 训练期间跟踪的指标
metrics_params=[{}, {"average": "weighted"}],
metrics_prob_input=[False, True],
rank_metric=("accuracy", "higher_is_better"), # 用于对模型进行排名的指标。
progress_bar=True, # 如果为 True,将显示进度条
verbose=False # 如果为 True,将打印每个模型的结果
)
更多示例,请查看教程笔记本 - Model Sweep 以获取示例用法。
高级用法¶
config
: DictConfig: 另一种初始化TabularModel
的方法是使用omegaconf
中的Dictconfig
。虽然不推荐,但您可以创建一个包含所有参数的普通字典,并从omegaconf
创建一个DictConfig
并在此处传递。缺点是您将跳过所有验证(包括类型验证和逻辑验证)。这主要用于从检查点加载保存的模型。model_callable
: Optional[Callable]: 通常,模型可调用对象和参数是从 ModelConfig 推断出来的。但在特殊情况下,例如使用自定义模型时,您可以将类(而不是初始化对象)传递给此参数并覆盖基于配置的初始化。
训练 API(监督学习)¶
有两种用于训练或“拟合”模型的 API。
- 高级 API
- 低级 API
低级 API 更灵活,允许您自定义训练循环。高级 API 更易于使用,推荐用于大多数用例。
高级API¶
pytorch_tabular.TabularModel.fit(train, validation=None, loss=None, metrics=None, metrics_prob_inputs=None, optimizer=None, optimizer_params=None, train_sampler=None, target_transform=None, max_epochs=None, min_epochs=None, seed=42, callbacks=None, datamodule=None, cache_data='memory', handle_oom=True)
¶
fit方法,接收数据并触发训练.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
train
|
DataFrame
|
训练数据框 |
required |
validation
|
Optional[DataFrame]
|
如果提供,将在训练过程中使用此数据框作为验证集. 用于早停和日志记录.如果未提供,将使用20%的训练数据作为验证集. 默认为None. |
None
|
loss
|
Optional[Module]
|
自定义损失函数,不在标准PyTorch库中 |
None
|
metrics
|
Optional[List[Callable]]
|
自定义度量函数(可调用对象),具有 签名metric_fn(y_hat, y),并适用于torch张量输入.对于分类任务,y_hat预期形状为 (batch_size, num_classes),对于回归任务,y_hat预期形状为(batch_size, 1),y预期形状为 (batch_size, 1) |
None
|
metrics_prob_inputs
|
Optional[List[bool]]
|
这是分类度量的强制参数. 如果度量函数需要概率作为输入,请设置为True. 列表的长度应等于度量函数的数量.默认为None. |
None
|
optimizer
|
Optional[Optimizer]
|
自定义优化器,是标准PyTorch优化器的替代品. 这应该是类,而不是初始化的对象 |
None
|
optimizer_params
|
Optional[Dict]
|
用于初始化自定义优化器的参数. |
None
|
train_sampler
|
Optional[Sampler]
|
自定义PyTorch批次采样器,将传递给DataLoaders. 对于处理不平衡数据和其他自定义批次策略很有用 |
None
|
target_transform
|
Optional[Union[TransformerMixin, Tuple(Callable)]]
|
如果提供,在模型训练前对目标应用变换,在预测时应用逆变换. 参数可以是具有inverse_transform方法的sklearn Transformer, 或由可调用对象组成的元组(transform_func, inverse_transform_func) |
None
|
max_epochs
|
Optional[int]
|
覆盖要运行的最大轮数.默认为None. |
None
|
min_epochs
|
Optional[int]
|
覆盖要运行的最小轮数.默认为None. |
None
|
seed
|
Optional[int]
|
(int): 用于可重复性的随机种子.默认为42. |
42
|
callbacks
|
Optional[List[Callback]]
|
训练期间使用的回调列表.默认为None. |
None
|
datamodule
|
Optional[TabularDatamodule]
|
数据模块. 如果提供,将忽略其他参数如train、test等,并使用数据模块. 默认为None. |
None
|
cache_data
|
str
|
决定如何在数据加载器中缓存数据.如果设置为 "memory",将在内存中缓存.如果设置为有效路径,将在该路径中缓存.默认为"memory". |
'memory'
|
handle_oom
|
bool
|
如果为True,将尝试优雅地处理OOM错误.默认为True. |
True
|
Returns:
Type | Description |
---|---|
Trainer
|
pl.Trainer: PyTorch Lightning Trainer实例 |
Source code in src/pytorch_tabular/tabular_model.py
662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 |
|
pytorch_tabular.TabularModel.cross_validate(cv, train, metric=None, return_oof=False, groups=None, verbose=True, reset_datamodule=True, handle_oom=True, **kwargs)
¶
交叉验证模型.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
cv
|
可选[Union[int, Iterable, BaseCrossValidator]]
|
确定交叉验证的分割策略. 可能的输入包括:
|
required |
train
|
DataFrame
|
带有标签的训练数据 |
required |
metric
|
(可选[Union[str, Callable]], 可选)
|
用于评估的指标.
如果为None,将使用配置中的第一个指标.如果提供字符串,将使用定义的该指标.如果提供可调用对象,将使用该函数作为指标.我们期望可调用对象的形式为 |
None
|
return_oof
|
(bool, 可选)
|
如果为True,将返回交叉验证结果以及折叠外的预测. 默认为False. |
False
|
groups
|
(可选[Union[str, ndarray]], 可选)
|
用于分割样本的组标签.如果提供,将作为交叉验证器 |
None
|
verbose
|
(bool, 可选)
|
如果为True,将记录结果. 默认为True. |
True
|
reset_datamodule
|
(bool, 可选)
|
如果为True,将在每次迭代时重置datamodule. 这将更慢,因为我们将为每个折叠拟合变换.如果为False,我们采用一种近似方法,即一旦变换在第一个折叠上拟合,它们将对所有其他折叠有效. 默认为True. |
True
|
handle_oom
|
(bool, 可选)
|
如果为True,将优雅地处理内存不足错误. |
True
|
**kwargs
|
传递给模型 |
{}
|
Returns:
Name | Type | Description |
---|---|---|
DataFrame |
包含交叉验证结果的数据框 |
Source code in src/pytorch_tabular/tabular_model.py
1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 |
|
低级API¶
低级API更加灵活,允许你编写更复杂的逻辑,如交叉验证、集成等。低级API更为冗长,需要你编写更多代码,但它为用户提供了更多的控制。
fit
方法被拆分为三个子方法:
-
prepare_dataloader
-
prepare_model
-
train
prepare_dataloader¶
此方法负责设置TabularDataModule
并返回该对象。你可以使用save_dataloader
保存此对象,稍后使用load_datamodule
加载它以跳过数据准备步骤。这在进行交叉验证或集成时非常有用。
pytorch_tabular.TabularModel.prepare_dataloader(train, validation=None, train_sampler=None, target_transform=None, seed=42, cache_data='memory')
¶
准备用于训练和验证的数据加载器.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
train
|
DataFrame
|
训练数据框 |
required |
validation
|
Optional[DataFrame]
|
如果提供,将在训练过程中使用此数据框作为验证集. 用于早停和日志记录.如果未提供,将使用训练数据的20%作为验证集. 默认为 None. |
None
|
train_sampler
|
Optional[Sampler]
|
自定义的 PyTorch 批次采样器,将传递给 DataLoaders. 适用于处理不平衡数据和其他自定义批次策略. |
None
|
target_transform
|
Optional[Union[TransformerMixin, Tuple(Callable)]]
|
如果提供,在模型训练前对目标应用此变换,并在预测时应用逆变换. 参数可以是具有 inverse_transform 方法的 sklearn Transformer,或 由可调用对象组成的元组 (transform_func, inverse_transform_func). |
None
|
seed
|
Optional[int]
|
用于可重复性的随机种子.默认为 42. |
42
|
cache_data
|
str
|
决定如何在数据加载器中缓存数据.如果设置为 "memory",将在内存中缓存.如果设置为有效路径,将在该路径中缓存.默认为 "memory". |
'memory'
|
Returns:
Name | Type | Description |
---|---|---|
TabularDatamodule |
TabularDatamodule
|
准备好的数据模块 |
Source code in src/pytorch_tabular/tabular_model.py
prepare_model¶
此方法负责设置和初始化模型,并接受准备好的datamodule作为输入。它返回模型实例。
pytorch_tabular.TabularModel.prepare_model(datamodule, loss=None, metrics=None, metrics_prob_inputs=None, optimizer=None, optimizer_params=None)
¶
准备模型以进行训练.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
datamodule
|
TabularDatamodule
|
数据模块 |
required |
loss
|
(Optional[Module], 可选)
|
自定义损失函数,不在标准 PyTorch 库中 |
None
|
metrics
|
(Optional[List[Callable]], 可选)
|
自定义度量函数(可调用对象),具有 metric_fn(y_hat, y) 签名并作用于 torch 张量输入 |
None
|
metrics_prob_inputs
|
(Optional[List[bool]], 可选)
|
这是分类度量的必填参数.如果度量函数需要概率作为输入,请设置为 True. 列表的长度应等于度量函数的数量.默认为 None. |
None
|
optimizer
|
(Optional[Optimizer], 可选)
|
自定义优化器,是标准 PyTorch 优化器的直接替代品. 这应该是类,而不是初始化的对象 |
None
|
optimizer_params
|
(Optional[Dict], 可选)
|
用于初始化自定义优化器的参数. |
None
|
Returns:
Name | Type | Description |
---|---|---|
BaseModel |
BaseModel
|
准备好的模型 |
Source code in src/pytorch_tabular/tabular_model.py
train¶
此方法负责训练模型,并接受准备好的datamodule和模型作为输入。它返回训练后的模型实例。
pytorch_tabular.TabularModel.train(model, datamodule, callbacks=None, max_epochs=None, min_epochs=None, handle_oom=True)
¶
训练模型.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
model
|
LightningModule
|
要训练的PyTorch Lightning模型. |
required |
datamodule
|
TabularDatamodule
|
数据模块 |
required |
callbacks
|
Optional[List[Callback]]
|
训练期间使用的回调函数列表.默认为None. |
None
|
max_epochs
|
Optional[int]
|
覆盖要运行的最大epoch数.默认为None. |
None
|
min_epochs
|
Optional[int]
|
覆盖要运行的最小epoch数.默认为None. |
None
|
handle_oom
|
bool
|
如果为True,将尝试优雅地处理OOM错误.默认为True. |
True
|
Returns:
Type | Description |
---|---|
Trainer
|
pl.Trainer: PyTorch Lightning Trainer实例 |
Source code in src/pytorch_tabular/tabular_model.py
训练API(自监督学习)¶
对于自监督学习,存在一个不同的API,因为过程不同。
- pytorch_tabular.TabularModel.pretrain: 此方法负责预训练模型。它接受输入数据框和其他参数,以在提供的数据上进行预训练。
- pytorch_tabular.TabularModel.create_finetune_model: 如果我们想使用预训练模型进行微调,我们需要创建一个带有预训练权重的新模型。此方法负责创建微调模型。它接受预训练模型并返回一个微调模型。返回的对象是
TabularModel
的单独实例,可用于微调模型。 - pytorch_tabular.TabularModel.finetune: 此方法负责微调模型,并且只能与通过
create_finetune_model
创建的模型一起使用。它接受输入数据框和其他参数,以在提供的数据上进行微调。
注意
传递给pretrain
的数据框不需要包含目标列。但即使你在DataConfig
中定义了目标列,它也会被忽略。但传递给finetune
的数据框必须包含目标列。
pytorch_tabular.TabularModel.pretrain(train, validation=None, optimizer=None, optimizer_params=None, max_epochs=None, min_epochs=None, seed=42, callbacks=None, datamodule=None, cache_data='memory')
¶
预训练方法,接收数据并触发训练.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
train
|
DataFrame
|
训练数据框 |
required |
validation
|
Optional[DataFrame]
|
如果提供,将在训练过程中使用此数据框作为验证集. 用于早停和日志记录.如果未提供,将使用训练数据的20%作为验证集.默认为None. |
None
|
optimizer
|
Optional[Optimizer]
|
自定义优化器,可作为标准PyTorch优化器的替代品. 应为类,而非初始化对象. |
None
|
optimizer_params
|
Optional[Dict]
|
用于初始化自定义优化器的参数. |
None
|
max_epochs
|
Optional[int]
|
覆盖要运行的最大周期数.默认为None. |
None
|
min_epochs
|
Optional[int]
|
覆盖要运行的最小周期数.默认为None. |
None
|
seed
|
Optional[int]
|
(int): 随机种子,用于可重复性.默认为42. |
42
|
callbacks
|
Optional[List[Callback]]
|
训练过程中使用的回调列表. 默认为None. |
None
|
datamodule
|
Optional[TabularDatamodule]
|
数据模块.如果提供,将忽略其他参数如train、test等, 并使用数据模块.默认为None. |
None
|
cache_data
|
str
|
决定如何在数据加载器中缓存数据.如果设置为"memory",将在内存中缓存. 如果设置为有效路径,将在该路径中缓存.默认为"memory". |
'memory'
|
Returns: pl.Trainer: PyTorch Lightning Trainer实例
Source code in src/pytorch_tabular/tabular_model.py
pytorch_tabular.TabularModel.create_finetune_model(task, head, head_config, train, validation=None, train_sampler=None, target_transform=None, target=None, optimizer_config=None, trainer_config=None, experiment_config=None, loss=None, metrics=None, metrics_prob_input=None, metrics_params=None, optimizer=None, optimizer_params=None, learning_rate=None, target_range=None, seed=42)
¶
创建一个新的TabularModel模型,使用预训练权重以及新的任务和头部.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
task
|
str
|
要执行的任务.可以是 "regression" 或 "classification" 之一. |
required |
head
|
str
|
用于模型的头部.应为 |
required |
head_config
|
Dict
|
定义头部的配置字典.如果留空,将初始化为默认的线性头部. |
required |
train
|
DataFrame
|
带有标签的训练数据. |
required |
validation
|
Optional[DataFrame]
|
带有标签的验证数据.默认为 None. |
None
|
train_sampler
|
Optional[Sampler]
|
如果提供,将用作训练的批次采样器.默认为 None. |
None
|
target_transform
|
Optional[Union[TransformerMixin, Tuple]]
|
如果提供,将在训练前用于转换目标,并在预测后进行逆转换. |
None
|
target
|
Optional[str]
|
如果未在初始预训练阶段提供,则为目标列名称.默认为 None. |
None
|
optimizer_config
|
Optional[OptimizerConfig]
|
如果提供,将重新定义微调阶段的优化器.默认为 None. |
None
|
trainer_config
|
Optional[TrainerConfig]
|
如果提供,将重新定义微调阶段的训练器.默认为 None. |
None
|
experiment_config
|
Optional[ExperimentConfig]
|
如果提供,将重新定义微调阶段的实验配置.默认为 None. |
None
|
loss
|
Optional[Module]
|
如果提供,将用作微调阶段的损失函数.默认情况下,回归任务为 MSELoss,分类任务为 CrossEntropyLoss. |
None
|
metrics
|
Optional[List[Callable]]
|
用于微调阶段的指标列表(可以是可调用对象或字符串).如果是字符串,应为 |
None
|
metrics_prob_input
|
Optional[List[bool]]
|
分类指标的强制参数. 这定义了指标函数的输入是概率还是类别.长度应与指标数量相同.默认为 None. |
None
|
metrics_params
|
Optional[Dict]
|
与指标顺序相同的指标参数.
例如,多类别的 f1_score 需要参数 |
None
|
optimizer
|
Optional[Optimizer]
|
自定义优化器,是标准 PyTorch 优化器的替代品.如果提供,将忽略 OptimizerConfig.默认为 None. |
None
|
optimizer_params
|
Dict
|
优化器的参数.默认为 {}. |
None
|
learning_rate
|
Optional[float]
|
要使用的学习率.默认为 1e-3. |
None
|
target_range
|
Optional[Tuple[float, float]]
|
回归任务的目标范围.分类任务中忽略.默认为 None. |
None
|
seed
|
Optional[int]
|
随机种子,用于可重复性.默认为 42. |
42
|
Returns:
Name | Type | Description |
---|---|---|
TabularModel |
TabularModel
|
用于微调的新 TabularModel 模型 |
Source code in src/pytorch_tabular/tabular_model.py
849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 |
|
pytorch_tabular.TabularModel.finetune(max_epochs=None, min_epochs=None, callbacks=None, freeze_backbone=False)
¶
微调模型于提供的数据上.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
max_epochs
|
(Optional[int], 可选)
|
训练的最大周期数.默认为 None. |
None
|
min_epochs
|
(Optional[int], 可选)
|
训练的最小周期数.默认为 None. |
None
|
callbacks
|
(Optional[List[Callback]], 可选)
|
如果提供,将添加到 Trainer 的回调中. 默认为 None. |
None
|
freeze_backbone
|
(bool, 可选)
|
如果为 True,将通过关闭梯度来冻结主干网络. 默认为 False,这意味着预训练的权重在微调期间也会进一步调整. |
False
|
Returns:
Type | Description |
---|---|
Trainer
|
pl.Trainer: Trainer 对象 |
Source code in src/pytorch_tabular/tabular_model.py
模型评估¶
pytorch_tabular.TabularModel.predict(test, quantiles=[0.25, 0.5, 0.75], n_samples=100, ret_logits=False, include_input_features=False, device=None, progress_bar=None, test_time_augmentation=False, num_tta=5, alpha_tta=0.1, aggregate_tta='mean', tta_seed=42)
¶
使用训练好的模型对新数据进行预测,并以数据框形式返回结果.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
test
|
DataFrame
|
包含训练期间定义的特征的新数据框 |
required |
quantiles
|
可选[List]
|
对于概率模型(如混合密度网络),这指定了除了 |
[0.25, 0.5, 0.75]
|
n_samples
|
可选[int]
|
从后验分布中抽取的样本数量,用于估计分位数. 对于非概率模型,此参数被忽略.默认为 100 |
100
|
ret_logits
|
bool
|
标志,用于返回原始模型输出/logits(除了骨干特征)以及数据框.默认为 False |
False
|
include_input_features
|
bool
|
已弃用: 标志,用于在返回的数据框中包含输入特征.默认为 True |
False
|
progress_bar
|
Optional[str]
|
选择用于跟踪进度的进度条."rich" 或 "tqdm" 将设置相应的进度条.如果为 None,则不显示进度条. |
None
|
test_time_augmentation
|
bool
|
如果为 True,将使用测试时增强来生成预测. 该方法与此处描述的方法非常相似, 但我们还在嵌入输入中添加噪声以处理分类特征. (x_{aug} = x_{orig} + lpha * \epsilon) 其中 (\epsilon \sim \mathcal{N}(0, 1)) 默认为 False |
False
|
num_tta
|
float
|
为 TTA 运行的增强次数.默认为 0.0 |
5
|
alpha_tta
|
float
|
要添加到输入特征的高斯噪声的标准差 |
0.1
|
aggregate_tta
|
(Union[str, Callable], 可选)
|
用于聚合每次增强预测的函数.如果为 str,应为 "mean", "median", "min", 或 "max" 之一 用于回归.对于分类,前面的选项应用于置信度分数(软投票),然后转换为最终预测.分类还提供了一个额外的选项 "hard_voting". 如果为可调用对象,应为一个函数,该函数接收一个包含 3D 数组(num_samples, num_cv, num_targets)的列表,并返回一个 2D 数组 的最终概率(num_samples, num_targets).默认为 "mean". |
'mean'
|
tta_seed
|
int
|
用于 TTA 中添加噪声的随机种子.默认为 42. |
42
|
Returns:
Name | Type | Description |
---|---|---|
DataFrame |
DataFrame
|
返回一个包含预测和特征(如果 |
Source code in src/pytorch_tabular/tabular_model.py
1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 |
|
pytorch_tabular.TabularModel.evaluate(test=None, test_loader=None, ckpt_path=None, verbose=True)
¶
使用配置中已设置的损失和指标对数据框进行评估.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
test
|
可选[DataFrame]
|
要评估的数据框.如果未提供,将尝试使用拟合期间提供的测试数据.如果两者均未提供,将返回一个空字典. |
None
|
test_loader
|
(可选[DataLoader], 可选)
|
用于评估的数据加载器.如果提供,将使用该数据加载器而不是测试数据框或拟合期间提供的测试数据.默认为None. |
None
|
ckpt_path
|
(可选[Union[str, Path]], 可选)
|
要加载的检查点路径.如果未提供,将尝试使用训练期间的最佳检查点. |
None
|
verbose
|
(bool, 可选)
|
如果为真,将打印结果.默认为True. |
True
|
Returns: 最终的测试结果字典.
Source code in src/pytorch_tabular/tabular_model.py
pytorch_tabular.TabularModel.cross_validate(cv, train, metric=None, return_oof=False, groups=None, verbose=True, reset_datamodule=True, handle_oom=True, **kwargs)
¶
交叉验证模型.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
cv
|
可选[Union[int, Iterable, BaseCrossValidator]]
|
确定交叉验证的分割策略. 可能的输入包括:
|
required |
train
|
DataFrame
|
带有标签的训练数据 |
required |
metric
|
(可选[Union[str, Callable]], 可选)
|
用于评估的指标.
如果为None,将使用配置中的第一个指标.如果提供字符串,将使用定义的该指标.如果提供可调用对象,将使用该函数作为指标.我们期望可调用对象的形式为 |
None
|
return_oof
|
(bool, 可选)
|
如果为True,将返回交叉验证结果以及折叠外的预测. 默认为False. |
False
|
groups
|
(可选[Union[str, ndarray]], 可选)
|
用于分割样本的组标签.如果提供,将作为交叉验证器 |
None
|
verbose
|
(bool, 可选)
|
如果为True,将记录结果. 默认为True. |
True
|
reset_datamodule
|
(bool, 可选)
|
如果为True,将在每次迭代时重置datamodule. 这将更慢,因为我们将为每个折叠拟合变换.如果为False,我们采用一种近似方法,即一旦变换在第一个折叠上拟合,它们将对所有其他折叠有效. 默认为True. |
True
|
handle_oom
|
(bool, 可选)
|
如果为True,将优雅地处理内存不足错误. |
True
|
**kwargs
|
传递给模型 |
{}
|
Returns:
Name | Type | Description |
---|---|---|
DataFrame |
包含交叉验证结果的数据框 |
Source code in src/pytorch_tabular/tabular_model.py
1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 |
|
pytorch_tabular.TabularModel.bagging_predict(cv, train, test, groups=None, verbose=True, reset_datamodule=True, return_raw_predictions=False, aggregate='mean', weights=None, handle_oom=True, **kwargs)
¶
Bagging 预测测试数据.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
cv
|
可选[Union[int, Iterable, BaseCrossValidator]]
|
确定交叉验证的分割策略. 可能的输入包括:
|
required |
train
|
DataFrame
|
带有标签的训练数据 |
required |
test
|
DataFrame
|
需要预测的测试数据 |
required |
groups
|
(可选[Union[str, ndarray]], 可选)
|
在分割时使用的样本组标签.如果提供,将作为交叉验证器 |
None
|
verbose
|
(bool, 可选)
|
如果为True,将记录结果.默认为True. |
True
|
reset_datamodule
|
(bool, 可选)
|
如果为True,将在每次迭代时重置datamodule. 由于每次折叠都会拟合变换,因此速度会较慢.如果为False,我们采用一种近似方法,即一旦在第一次折叠上拟合了变换, 它们将对所有其他折叠有效.默认为True. |
True
|
return_raw_predictions
|
(bool, 可选)
|
如果为True,将返回每次折叠的原始预测.默认为False. |
False
|
aggregate
|
(Union[str, Callable], 可选)
|
用于聚合每次折叠预测的函数.如果为字符串,应为"mean"、"median"、"min"或"max"之一, 用于回归.对于分类,前面的选项应用于置信度分数(软投票),然后转换为最终预测.分类还提供额外的选项"hard_voting". 如果为可调用对象,应为接受3D数组列表(样本数, 交叉验证数, 目标数)并返回最终概率2D数组(样本数, 目标数)的函数.默认为"mean". |
'mean'
|
weights
|
(可选[List[float]], 可选)
|
用于聚合每次折叠预测的权重.如果为None,将使用相等的权重.仅在 |
None
|
handle_oom
|
(bool, 可选)
|
如果为True,将优雅地处理内存不足错误. |
True
|
**kwargs
|
传递给模型 |
{}
|
Returns:
Name | Type | Description |
---|---|---|
DataFrame |
包含集成预测的数据框. |
Source code in src/pytorch_tabular/tabular_model.py
1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 |
|
模型和数据模块的保存与加载¶
保存模型、数据模块和配置¶
pytorch_tabular.TabularModel.save_config(dir)
¶
pytorch_tabular.TabularModel.save_datamodule(dir, inference_only=False)
¶
Saves the datamodule in the specified directory.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
dir
|
str
|
保存datamodule的目录路径 |
required |
inference_only
|
bool
|
如果为True,将仅保存不带数据的推理datamodule. 这不能用于进一步训练,但可用于推理.默认为False. |
False
|
Source code in src/pytorch_tabular/tabular_model.py
pytorch_tabular.TabularModel.save_model(dir, inference_only=False)
¶
保存模型和检查点在指定目录中.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
dir
|
str
|
保存模型的目录路径 |
required |
inference_only
|
bool
|
如果为True,将仅保存数据模块的推理版本 |
False
|
Source code in src/pytorch_tabular/tabular_model.py
pytorch_tabular.TabularModel.save_model_for_inference(path, kind='pytorch', onnx_export_params={'opset_version': 12})
¶
保存模型以供推理.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
path
|
Union[str, Path]
|
保存模型的路径 |
required |
kind
|
str
|
"pytorch" 或 "onnx"(实验性) |
'pytorch'
|
onnx_export_params
|
Dict
|
传递给 torch.onnx.export 的 ONNX 导出参数 |
{'opset_version': 12}
|
Returns:
Name | Type | Description |
---|---|---|
bool |
bool
|
如果模型成功保存则为 True |
Source code in src/pytorch_tabular/tabular_model.py
pytorch_tabular.TabularModel.save_weights(path)
¶
保存模型权重到指定目录.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
path
|
str
|
保存模型的文件路径 |
required |
加载模型和数据模块¶
pytorch_tabular.TabularModel.load_best_model()
¶
在训练完成后加载最佳模型.
Source code in src/pytorch_tabular/tabular_model.py
pytorch_tabular.TabularModel.load_model(dir, map_location=None, strict=True)
classmethod
¶
加载保存在目录中的模型.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
dir
|
str
|
保存模型的目录,包含检查点 |
required |
map_location
|
Union[Dict[str, str], str, device, int, Callable, None])
|
如果你的检查点保存了一个GPU模型,而你现在在CPU上或不同数量的GPU上加载,使用这个参数来映射到新的设置.行为与torch.load()中的相同 |
None
|
strict
|
bool)
|
是否严格要求checkpoint_path中的键与该模块的状态字典返回的键完全匹配.默认值: True. |
True
|
Returns:
Name | Type | Description |
---|---|---|
TabularModel |
TabularModel
|
保存的TabularModel |
Source code in src/pytorch_tabular/tabular_model.py
380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 |
|
pytorch_tabular.TabularModel.load_weights(path)
¶
加载指定目录中的模型权重.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
path
|
str
|
要从中加载模型的文件路径 |
required |
Returns:
Type | Description |
---|---|
None
|
None |
其他功能¶
pytorch_tabular.TabularModel.find_learning_rate(model, datamodule, min_lr=1e-08, max_lr=1, num_training=100, mode='exponential', early_stop_threshold=4.0, plot=True, callbacks=None)
¶
允许用户进行一系列良好的初始学习率测试,以减少选择合适起始学习率的猜测工作.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
model
|
LightningModule
|
要训练的PyTorch Lightning模型. |
required |
datamodule
|
TabularDatamodule
|
数据模块 |
required |
min_lr
|
Optional[float]
|
要调查的最小学习率 |
1e-08
|
max_lr
|
Optional[float]
|
要调查的最大学习率 |
1
|
num_training
|
Optional[int]
|
要测试的学习率数量 |
100
|
mode
|
Optional[str]
|
搜索策略,可以是'linear'或'exponential'.如果设置为 'linear',学习率将通过在每个批次后线性增加来搜索.如果设置为'exponential',将指数增加学习率. |
'exponential'
|
early_stop_threshold
|
Optional[float]
|
停止搜索的阈值.如果在任何时候损失大于 early_stop_threshold*best_loss,则停止搜索.要禁用,请设置为None. |
4.0
|
plot
|
bool
|
如果为真,将使用matplotlib绘图 |
True
|
callbacks
|
Optional[List]
|
如果提供,将添加到Trainer的回调中. |
None
|
Returns:
Type | Description |
---|---|
Tuple[float, DataFrame]
|
建议的学习率和学习率查找器的结果 |
Source code in src/pytorch_tabular/tabular_model.py
pytorch_tabular.TabularModel.summary(model=None, max_depth=-1)
¶
打印模型的摘要.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
max_depth
|
int
|
遍历模块并显示在摘要中的最大深度. 默认为 -1,表示将显示所有模块. |
-1
|