From a461d31a9be5371aa41b008f5d8316ca3e456fba Mon Sep 17 00:00:00 2001 From: CoprDistGit Date: Tue, 20 Jun 2023 03:54:54 +0000 Subject: automatic import of python-pytorch-widedeep --- python-pytorch-widedeep.spec | 735 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 735 insertions(+) create mode 100644 python-pytorch-widedeep.spec (limited to 'python-pytorch-widedeep.spec') diff --git a/python-pytorch-widedeep.spec b/python-pytorch-widedeep.spec new file mode 100644 index 0000000..95ddcd7 --- /dev/null +++ b/python-pytorch-widedeep.spec @@ -0,0 +1,735 @@ +%global _empty_manifest_terminate_build 0 +Name: python-pytorch-widedeep +Version: 1.2.2 +Release: 1 +Summary: Combine tabular data with text and images using Wide and Deep models in Pytorch +License: MIT +URL: https://github.com/jrzaurin/pytorch-widedeep +Source0: https://mirrors.aliyun.com/pypi/web/packages/a2/7b/933aa078519dc52551ab8f6ec7d172cab157bb2ec5236f27ccee499b48df/pytorch-widedeep-1.2.2.tar.gz +BuildArch: noarch + +Requires: python3-pandas +Requires: python3-numpy +Requires: python3-scipy +Requires: python3-scikit-learn +Requires: python3-gensim +Requires: python3-spacy +Requires: python3-opencv-contrib-python +Requires: python3-imutils +Requires: python3-tqdm +Requires: python3-torch +Requires: python3-torchvision +Requires: python3-einops +Requires: python3-wrapt +Requires: python3-torchmetrics +Requires: python3-pyarrow +Requires: python3-fastparquet +Requires: python3-pytest +Requires: python3-pytest-cov +Requires: python3-codecov +Requires: python3-sphinx +Requires: python3-sphinx-rtd-theme +Requires: python3-recommonmark +Requires: python3-sphinx-markdown-tables +Requires: python3-sphinx-copybutton +Requires: python3-sphinx-autodoc-typehints +Requires: python3-black +Requires: python3-isort +Requires: python3-flake8 +Requires: python3-mkdocs +Requires: python3-mkdocs-material +Requires: python3-mkdocs-autolinks-plugin +Requires: python3-mkdocs-git-authors-plugin +Requires: python3-mkdocs-jupyter +Requires: python3-mkdocstrings +Requires: python3-mkdocstrings-python +Requires: python3-sphinx +Requires: python3-sphinx-rtd-theme +Requires: python3-recommonmark +Requires: python3-sphinx-markdown-tables +Requires: python3-sphinx-copybutton +Requires: python3-sphinx-autodoc-typehints +Requires: python3-mkdocs +Requires: python3-mkdocs-material +Requires: python3-mkdocs-autolinks-plugin +Requires: python3-mkdocs-git-authors-plugin +Requires: python3-mkdocs-jupyter +Requires: python3-mkdocstrings +Requires: python3-mkdocstrings-python +Requires: python3-black +Requires: python3-isort +Requires: python3-flake8 +Requires: python3-pytest +Requires: python3-pytest-cov +Requires: python3-codecov + +%description +[![PyPI version](https://badge.fury.io/py/pytorch-widedeep.svg)](https://pypi.org/project/pytorch-widedeep/) +[![Python 3.7 3.8 3.9 3.10](https://img.shields.io/badge/python-3.7%20%7C%203.8%20%7C%203.9%20%7C%203.10-blue.svg)](https://pypi.org/project/pytorch-widedeep/) +[![Build Status](https://github.com/jrzaurin/pytorch-widedeep/actions/workflows/build.yml/badge.svg)](https://github.com/jrzaurin/pytorch-widedeep/actions) +[![Documentation Status](https://readthedocs.org/projects/pytorch-widedeep/badge/?version=latest)](https://pytorch-widedeep.readthedocs.io/en/latest/?badge=latest) +[![codecov](https://codecov.io/gh/jrzaurin/pytorch-widedeep/branch/master/graph/badge.svg)](https://codecov.io/gh/jrzaurin/pytorch-widedeep) +[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black) +[![Maintenance](https://img.shields.io/badge/Maintained%3F-yes-green.svg)](https://github.com/jrzaurin/pytorch-widedeep/graphs/commit-activity) +[![contributions welcome](https://img.shields.io/badge/contributions-welcome-brightgreen.svg?style=flat)](https://github.com/jrzaurin/pytorch-widedeep/issues) +[![Slack](https://img.shields.io/badge/slack-chat-green.svg?logo=slack)](https://join.slack.com/t/pytorch-widedeep/shared_invite/zt-soss7stf-iXpVuLeKZz8lGTnxxtHtTw) + + +# pytorch-widedeep + +A flexible package for multimodal-deep-learning to combine tabular data with +text and images using Wide and Deep models in Pytorch + +**Documentation:** [https://pytorch-widedeep.readthedocs.io](https://pytorch-widedeep.readthedocs.io/en/latest/index.html) + +**Companion posts and tutorials:** [infinitoml](https://jrzaurin.github.io/infinitoml/) + +**Experiments and comparisson with `LightGBM`**: [TabularDL vs LightGBM](https://github.com/jrzaurin/tabulardl-benchmark) + +**Slack**: if you want to contribute or just want to chat with us, join [slack](https://join.slack.com/t/pytorch-widedeep/shared_invite/zt-soss7stf-iXpVuLeKZz8lGTnxxtHtTw) + +### Introduction + +``pytorch-widedeep`` is based on Google's [Wide and Deep Algorithm](https://arxiv.org/abs/1606.07792), +adjusted for multi-modal datasets + +In general terms, `pytorch-widedeep` is a package to use deep learning with +tabular data. In particular, is intended to facilitate the combination of text +and images with corresponding tabular data using wide and deep models. With +that in mind there are a number of architectures that can be implemented with +just a few lines of code. For details on the main components of those +architectures please visit the +[repo](https://github.com/jrzaurin/pytorch-widedeep). + + +### Installation + +Install using pip: + +```bash +pip install pytorch-widedeep +``` + +Or install directly from github + +```bash +pip install git+https://github.com/jrzaurin/pytorch-widedeep.git +``` + +#### Developer Install + +```bash +# Clone the repository +git clone https://github.com/jrzaurin/pytorch-widedeep +cd pytorch-widedeep + +# Install in dev mode +pip install -e . +``` + +### Quick start + +Binary classification with the [adult +dataset]([adult](https://www.kaggle.com/wenruliu/adult-income-dataset)) +using `Wide` and `DeepDense` and defaults settings. + +Building a wide (linear) and deep model with ``pytorch-widedeep``: + +```python +import pandas as pd +import numpy as np +import torch +from sklearn.model_selection import train_test_split + +from pytorch_widedeep import Trainer +from pytorch_widedeep.preprocessing import WidePreprocessor, TabPreprocessor +from pytorch_widedeep.models import Wide, TabMlp, WideDeep +from pytorch_widedeep.metrics import Accuracy +from pytorch_widedeep.datasets import load_adult + + +df = load_adult(as_frame=True) +df["income_label"] = (df["income"].apply(lambda x: ">50K" in x)).astype(int) +df.drop("income", axis=1, inplace=True) +df_train, df_test = train_test_split(df, test_size=0.2, stratify=df.income_label) + +# Define the 'column set up' +wide_cols = [ + "education", + "relationship", + "workclass", + "occupation", + "native-country", + "gender", +] +crossed_cols = [("education", "occupation"), ("native-country", "occupation")] + +cat_embed_cols = [ + "workclass", + "education", + "marital-status", + "occupation", + "relationship", + "race", + "gender", + "capital-gain", + "capital-loss", + "native-country", +] +continuous_cols = ["age", "hours-per-week"] +target = "income_label" +target = df_train[target].values + +# prepare the data +wide_preprocessor = WidePreprocessor(wide_cols=wide_cols, crossed_cols=crossed_cols) +X_wide = wide_preprocessor.fit_transform(df_train) + +tab_preprocessor = TabPreprocessor( + cat_embed_cols=cat_embed_cols, continuous_cols=continuous_cols # type: ignore[arg-type] +) +X_tab = tab_preprocessor.fit_transform(df_train) + +# build the model +wide = Wide(input_dim=np.unique(X_wide).shape[0], pred_dim=1) +tab_mlp = TabMlp( + column_idx=tab_preprocessor.column_idx, + cat_embed_input=tab_preprocessor.cat_embed_input, + continuous_cols=continuous_cols, +) +model = WideDeep(wide=wide, deeptabular=tab_mlp) + +# train and validate +trainer = Trainer(model, objective="binary", metrics=[Accuracy]) +trainer.fit( + X_wide=X_wide, + X_tab=X_tab, + target=target, + n_epochs=5, + batch_size=256, +) + +# predict on test +X_wide_te = wide_preprocessor.transform(df_test) +X_tab_te = tab_preprocessor.transform(df_test) +preds = trainer.predict(X_wide=X_wide_te, X_tab=X_tab_te) + +# Save and load + +# Option 1: this will also save training history and lr history if the +# LRHistory callback is used +trainer.save(path="model_weights", save_state_dict=True) + +# Option 2: save as any other torch model +torch.save(model.state_dict(), "model_weights/wd_model.pt") + +# From here in advance, Option 1 or 2 are the same. I assume the user has +# prepared the data and defined the new model components: +# 1. Build the model +model_new = WideDeep(wide=wide, deeptabular=tab_mlp) +model_new.load_state_dict(torch.load("model_weights/wd_model.pt")) + +# 2. Instantiate the trainer +trainer_new = Trainer(model_new, objective="binary") + +# 3. Either start the fit or directly predict +preds = trainer_new.predict(X_wide=X_wide, X_tab=X_tab) +``` + +Of course, one can do **much more**. See the Examples folder, the +documentation or the companion posts for a better understanding of the content +of the package and its functionalities. + +### Testing + +``` +pytest tests +``` + +### Acknowledgments + +This library takes from a series of other libraries, so I think it is just +fair to mention them here in the README (specific mentions are also included +in the code). + +The `Callbacks` and `Initializers` structure and code is inspired by the +[`torchsample`](https://github.com/ncullen93/torchsample) library, which in +itself partially inspired by [`Keras`](https://keras.io/). + +The `TextProcessor` class in this library uses the +[`fastai`](https://docs.fast.ai/text.transform.html#BaseTokenizer.tokenizer)'s +`Tokenizer` and `Vocab`. The code at `utils.fastai_transforms` is a minor +adaptation of their code so it functions within this library. To my experience +their `Tokenizer` is the best in class. + +The `ImageProcessor` class in this library uses code from the fantastic [Deep +Learning for Computer +Vision](https://www.pyimagesearch.com/deep-learning-computer-vision-python-book/) +(DL4CV) book by Adrian Rosebrock. + + + + +%package -n python3-pytorch-widedeep +Summary: Combine tabular data with text and images using Wide and Deep models in Pytorch +Provides: python-pytorch-widedeep +BuildRequires: python3-devel +BuildRequires: python3-setuptools +BuildRequires: python3-pip +%description -n python3-pytorch-widedeep +[![PyPI version](https://badge.fury.io/py/pytorch-widedeep.svg)](https://pypi.org/project/pytorch-widedeep/) +[![Python 3.7 3.8 3.9 3.10](https://img.shields.io/badge/python-3.7%20%7C%203.8%20%7C%203.9%20%7C%203.10-blue.svg)](https://pypi.org/project/pytorch-widedeep/) +[![Build Status](https://github.com/jrzaurin/pytorch-widedeep/actions/workflows/build.yml/badge.svg)](https://github.com/jrzaurin/pytorch-widedeep/actions) +[![Documentation Status](https://readthedocs.org/projects/pytorch-widedeep/badge/?version=latest)](https://pytorch-widedeep.readthedocs.io/en/latest/?badge=latest) +[![codecov](https://codecov.io/gh/jrzaurin/pytorch-widedeep/branch/master/graph/badge.svg)](https://codecov.io/gh/jrzaurin/pytorch-widedeep) +[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black) +[![Maintenance](https://img.shields.io/badge/Maintained%3F-yes-green.svg)](https://github.com/jrzaurin/pytorch-widedeep/graphs/commit-activity) +[![contributions welcome](https://img.shields.io/badge/contributions-welcome-brightgreen.svg?style=flat)](https://github.com/jrzaurin/pytorch-widedeep/issues) +[![Slack](https://img.shields.io/badge/slack-chat-green.svg?logo=slack)](https://join.slack.com/t/pytorch-widedeep/shared_invite/zt-soss7stf-iXpVuLeKZz8lGTnxxtHtTw) + + +# pytorch-widedeep + +A flexible package for multimodal-deep-learning to combine tabular data with +text and images using Wide and Deep models in Pytorch + +**Documentation:** [https://pytorch-widedeep.readthedocs.io](https://pytorch-widedeep.readthedocs.io/en/latest/index.html) + +**Companion posts and tutorials:** [infinitoml](https://jrzaurin.github.io/infinitoml/) + +**Experiments and comparisson with `LightGBM`**: [TabularDL vs LightGBM](https://github.com/jrzaurin/tabulardl-benchmark) + +**Slack**: if you want to contribute or just want to chat with us, join [slack](https://join.slack.com/t/pytorch-widedeep/shared_invite/zt-soss7stf-iXpVuLeKZz8lGTnxxtHtTw) + +### Introduction + +``pytorch-widedeep`` is based on Google's [Wide and Deep Algorithm](https://arxiv.org/abs/1606.07792), +adjusted for multi-modal datasets + +In general terms, `pytorch-widedeep` is a package to use deep learning with +tabular data. In particular, is intended to facilitate the combination of text +and images with corresponding tabular data using wide and deep models. With +that in mind there are a number of architectures that can be implemented with +just a few lines of code. For details on the main components of those +architectures please visit the +[repo](https://github.com/jrzaurin/pytorch-widedeep). + + +### Installation + +Install using pip: + +```bash +pip install pytorch-widedeep +``` + +Or install directly from github + +```bash +pip install git+https://github.com/jrzaurin/pytorch-widedeep.git +``` + +#### Developer Install + +```bash +# Clone the repository +git clone https://github.com/jrzaurin/pytorch-widedeep +cd pytorch-widedeep + +# Install in dev mode +pip install -e . +``` + +### Quick start + +Binary classification with the [adult +dataset]([adult](https://www.kaggle.com/wenruliu/adult-income-dataset)) +using `Wide` and `DeepDense` and defaults settings. + +Building a wide (linear) and deep model with ``pytorch-widedeep``: + +```python +import pandas as pd +import numpy as np +import torch +from sklearn.model_selection import train_test_split + +from pytorch_widedeep import Trainer +from pytorch_widedeep.preprocessing import WidePreprocessor, TabPreprocessor +from pytorch_widedeep.models import Wide, TabMlp, WideDeep +from pytorch_widedeep.metrics import Accuracy +from pytorch_widedeep.datasets import load_adult + + +df = load_adult(as_frame=True) +df["income_label"] = (df["income"].apply(lambda x: ">50K" in x)).astype(int) +df.drop("income", axis=1, inplace=True) +df_train, df_test = train_test_split(df, test_size=0.2, stratify=df.income_label) + +# Define the 'column set up' +wide_cols = [ + "education", + "relationship", + "workclass", + "occupation", + "native-country", + "gender", +] +crossed_cols = [("education", "occupation"), ("native-country", "occupation")] + +cat_embed_cols = [ + "workclass", + "education", + "marital-status", + "occupation", + "relationship", + "race", + "gender", + "capital-gain", + "capital-loss", + "native-country", +] +continuous_cols = ["age", "hours-per-week"] +target = "income_label" +target = df_train[target].values + +# prepare the data +wide_preprocessor = WidePreprocessor(wide_cols=wide_cols, crossed_cols=crossed_cols) +X_wide = wide_preprocessor.fit_transform(df_train) + +tab_preprocessor = TabPreprocessor( + cat_embed_cols=cat_embed_cols, continuous_cols=continuous_cols # type: ignore[arg-type] +) +X_tab = tab_preprocessor.fit_transform(df_train) + +# build the model +wide = Wide(input_dim=np.unique(X_wide).shape[0], pred_dim=1) +tab_mlp = TabMlp( + column_idx=tab_preprocessor.column_idx, + cat_embed_input=tab_preprocessor.cat_embed_input, + continuous_cols=continuous_cols, +) +model = WideDeep(wide=wide, deeptabular=tab_mlp) + +# train and validate +trainer = Trainer(model, objective="binary", metrics=[Accuracy]) +trainer.fit( + X_wide=X_wide, + X_tab=X_tab, + target=target, + n_epochs=5, + batch_size=256, +) + +# predict on test +X_wide_te = wide_preprocessor.transform(df_test) +X_tab_te = tab_preprocessor.transform(df_test) +preds = trainer.predict(X_wide=X_wide_te, X_tab=X_tab_te) + +# Save and load + +# Option 1: this will also save training history and lr history if the +# LRHistory callback is used +trainer.save(path="model_weights", save_state_dict=True) + +# Option 2: save as any other torch model +torch.save(model.state_dict(), "model_weights/wd_model.pt") + +# From here in advance, Option 1 or 2 are the same. I assume the user has +# prepared the data and defined the new model components: +# 1. Build the model +model_new = WideDeep(wide=wide, deeptabular=tab_mlp) +model_new.load_state_dict(torch.load("model_weights/wd_model.pt")) + +# 2. Instantiate the trainer +trainer_new = Trainer(model_new, objective="binary") + +# 3. Either start the fit or directly predict +preds = trainer_new.predict(X_wide=X_wide, X_tab=X_tab) +``` + +Of course, one can do **much more**. See the Examples folder, the +documentation or the companion posts for a better understanding of the content +of the package and its functionalities. + +### Testing + +``` +pytest tests +``` + +### Acknowledgments + +This library takes from a series of other libraries, so I think it is just +fair to mention them here in the README (specific mentions are also included +in the code). + +The `Callbacks` and `Initializers` structure and code is inspired by the +[`torchsample`](https://github.com/ncullen93/torchsample) library, which in +itself partially inspired by [`Keras`](https://keras.io/). + +The `TextProcessor` class in this library uses the +[`fastai`](https://docs.fast.ai/text.transform.html#BaseTokenizer.tokenizer)'s +`Tokenizer` and `Vocab`. The code at `utils.fastai_transforms` is a minor +adaptation of their code so it functions within this library. To my experience +their `Tokenizer` is the best in class. + +The `ImageProcessor` class in this library uses code from the fantastic [Deep +Learning for Computer +Vision](https://www.pyimagesearch.com/deep-learning-computer-vision-python-book/) +(DL4CV) book by Adrian Rosebrock. + + + + +%package help +Summary: Development documents and examples for pytorch-widedeep +Provides: python3-pytorch-widedeep-doc +%description help +[![PyPI version](https://badge.fury.io/py/pytorch-widedeep.svg)](https://pypi.org/project/pytorch-widedeep/) +[![Python 3.7 3.8 3.9 3.10](https://img.shields.io/badge/python-3.7%20%7C%203.8%20%7C%203.9%20%7C%203.10-blue.svg)](https://pypi.org/project/pytorch-widedeep/) +[![Build Status](https://github.com/jrzaurin/pytorch-widedeep/actions/workflows/build.yml/badge.svg)](https://github.com/jrzaurin/pytorch-widedeep/actions) +[![Documentation Status](https://readthedocs.org/projects/pytorch-widedeep/badge/?version=latest)](https://pytorch-widedeep.readthedocs.io/en/latest/?badge=latest) +[![codecov](https://codecov.io/gh/jrzaurin/pytorch-widedeep/branch/master/graph/badge.svg)](https://codecov.io/gh/jrzaurin/pytorch-widedeep) +[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black) +[![Maintenance](https://img.shields.io/badge/Maintained%3F-yes-green.svg)](https://github.com/jrzaurin/pytorch-widedeep/graphs/commit-activity) +[![contributions welcome](https://img.shields.io/badge/contributions-welcome-brightgreen.svg?style=flat)](https://github.com/jrzaurin/pytorch-widedeep/issues) +[![Slack](https://img.shields.io/badge/slack-chat-green.svg?logo=slack)](https://join.slack.com/t/pytorch-widedeep/shared_invite/zt-soss7stf-iXpVuLeKZz8lGTnxxtHtTw) + + +# pytorch-widedeep + +A flexible package for multimodal-deep-learning to combine tabular data with +text and images using Wide and Deep models in Pytorch + +**Documentation:** [https://pytorch-widedeep.readthedocs.io](https://pytorch-widedeep.readthedocs.io/en/latest/index.html) + +**Companion posts and tutorials:** [infinitoml](https://jrzaurin.github.io/infinitoml/) + +**Experiments and comparisson with `LightGBM`**: [TabularDL vs LightGBM](https://github.com/jrzaurin/tabulardl-benchmark) + +**Slack**: if you want to contribute or just want to chat with us, join [slack](https://join.slack.com/t/pytorch-widedeep/shared_invite/zt-soss7stf-iXpVuLeKZz8lGTnxxtHtTw) + +### Introduction + +``pytorch-widedeep`` is based on Google's [Wide and Deep Algorithm](https://arxiv.org/abs/1606.07792), +adjusted for multi-modal datasets + +In general terms, `pytorch-widedeep` is a package to use deep learning with +tabular data. In particular, is intended to facilitate the combination of text +and images with corresponding tabular data using wide and deep models. With +that in mind there are a number of architectures that can be implemented with +just a few lines of code. For details on the main components of those +architectures please visit the +[repo](https://github.com/jrzaurin/pytorch-widedeep). + + +### Installation + +Install using pip: + +```bash +pip install pytorch-widedeep +``` + +Or install directly from github + +```bash +pip install git+https://github.com/jrzaurin/pytorch-widedeep.git +``` + +#### Developer Install + +```bash +# Clone the repository +git clone https://github.com/jrzaurin/pytorch-widedeep +cd pytorch-widedeep + +# Install in dev mode +pip install -e . +``` + +### Quick start + +Binary classification with the [adult +dataset]([adult](https://www.kaggle.com/wenruliu/adult-income-dataset)) +using `Wide` and `DeepDense` and defaults settings. + +Building a wide (linear) and deep model with ``pytorch-widedeep``: + +```python +import pandas as pd +import numpy as np +import torch +from sklearn.model_selection import train_test_split + +from pytorch_widedeep import Trainer +from pytorch_widedeep.preprocessing import WidePreprocessor, TabPreprocessor +from pytorch_widedeep.models import Wide, TabMlp, WideDeep +from pytorch_widedeep.metrics import Accuracy +from pytorch_widedeep.datasets import load_adult + + +df = load_adult(as_frame=True) +df["income_label"] = (df["income"].apply(lambda x: ">50K" in x)).astype(int) +df.drop("income", axis=1, inplace=True) +df_train, df_test = train_test_split(df, test_size=0.2, stratify=df.income_label) + +# Define the 'column set up' +wide_cols = [ + "education", + "relationship", + "workclass", + "occupation", + "native-country", + "gender", +] +crossed_cols = [("education", "occupation"), ("native-country", "occupation")] + +cat_embed_cols = [ + "workclass", + "education", + "marital-status", + "occupation", + "relationship", + "race", + "gender", + "capital-gain", + "capital-loss", + "native-country", +] +continuous_cols = ["age", "hours-per-week"] +target = "income_label" +target = df_train[target].values + +# prepare the data +wide_preprocessor = WidePreprocessor(wide_cols=wide_cols, crossed_cols=crossed_cols) +X_wide = wide_preprocessor.fit_transform(df_train) + +tab_preprocessor = TabPreprocessor( + cat_embed_cols=cat_embed_cols, continuous_cols=continuous_cols # type: ignore[arg-type] +) +X_tab = tab_preprocessor.fit_transform(df_train) + +# build the model +wide = Wide(input_dim=np.unique(X_wide).shape[0], pred_dim=1) +tab_mlp = TabMlp( + column_idx=tab_preprocessor.column_idx, + cat_embed_input=tab_preprocessor.cat_embed_input, + continuous_cols=continuous_cols, +) +model = WideDeep(wide=wide, deeptabular=tab_mlp) + +# train and validate +trainer = Trainer(model, objective="binary", metrics=[Accuracy]) +trainer.fit( + X_wide=X_wide, + X_tab=X_tab, + target=target, + n_epochs=5, + batch_size=256, +) + +# predict on test +X_wide_te = wide_preprocessor.transform(df_test) +X_tab_te = tab_preprocessor.transform(df_test) +preds = trainer.predict(X_wide=X_wide_te, X_tab=X_tab_te) + +# Save and load + +# Option 1: this will also save training history and lr history if the +# LRHistory callback is used +trainer.save(path="model_weights", save_state_dict=True) + +# Option 2: save as any other torch model +torch.save(model.state_dict(), "model_weights/wd_model.pt") + +# From here in advance, Option 1 or 2 are the same. I assume the user has +# prepared the data and defined the new model components: +# 1. Build the model +model_new = WideDeep(wide=wide, deeptabular=tab_mlp) +model_new.load_state_dict(torch.load("model_weights/wd_model.pt")) + +# 2. Instantiate the trainer +trainer_new = Trainer(model_new, objective="binary") + +# 3. Either start the fit or directly predict +preds = trainer_new.predict(X_wide=X_wide, X_tab=X_tab) +``` + +Of course, one can do **much more**. See the Examples folder, the +documentation or the companion posts for a better understanding of the content +of the package and its functionalities. + +### Testing + +``` +pytest tests +``` + +### Acknowledgments + +This library takes from a series of other libraries, so I think it is just +fair to mention them here in the README (specific mentions are also included +in the code). + +The `Callbacks` and `Initializers` structure and code is inspired by the +[`torchsample`](https://github.com/ncullen93/torchsample) library, which in +itself partially inspired by [`Keras`](https://keras.io/). + +The `TextProcessor` class in this library uses the +[`fastai`](https://docs.fast.ai/text.transform.html#BaseTokenizer.tokenizer)'s +`Tokenizer` and `Vocab`. The code at `utils.fastai_transforms` is a minor +adaptation of their code so it functions within this library. To my experience +their `Tokenizer` is the best in class. + +The `ImageProcessor` class in this library uses code from the fantastic [Deep +Learning for Computer +Vision](https://www.pyimagesearch.com/deep-learning-computer-vision-python-book/) +(DL4CV) book by Adrian Rosebrock. + + + + +%prep +%autosetup -n pytorch-widedeep-1.2.2 + +%build +%py3_build + +%install +%py3_install +install -d -m755 %{buildroot}/%{_pkgdocdir} +if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi +if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi +if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi +if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi +pushd %{buildroot} +if [ -d usr/lib ]; then + find usr/lib -type f -printf "\"/%h/%f\"\n" >> filelist.lst +fi +if [ -d usr/lib64 ]; then + find usr/lib64 -type f -printf "\"/%h/%f\"\n" >> filelist.lst +fi +if [ -d usr/bin ]; then + find usr/bin -type f -printf "\"/%h/%f\"\n" >> filelist.lst +fi +if [ -d usr/sbin ]; then + find usr/sbin -type f -printf "\"/%h/%f\"\n" >> filelist.lst +fi +touch doclist.lst +if [ -d usr/share/man ]; then + find usr/share/man -type f -printf "\"/%h/%f.gz\"\n" >> doclist.lst +fi +popd +mv %{buildroot}/filelist.lst . +mv %{buildroot}/doclist.lst . + +%files -n python3-pytorch-widedeep -f filelist.lst +%dir %{python3_sitelib}/* + +%files help -f doclist.lst +%{_docdir}/* + +%changelog +* Tue Jun 20 2023 Python_Bot - 1.2.2-1 +- Package Spec generated -- cgit v1.2.3