summaryrefslogtreecommitdiff
path: root/python-pytorch-widedeep.spec
diff options
context:
space:
mode:
authorCoprDistGit <infra@openeuler.org>2023-06-20 03:54:54 +0000
committerCoprDistGit <infra@openeuler.org>2023-06-20 03:54:54 +0000
commita461d31a9be5371aa41b008f5d8316ca3e456fba (patch)
tree740a76c0dad0b705cda34fa54087030a4e1b54d5 /python-pytorch-widedeep.spec
parentadc6c0af070ee96ecae51155e65481735bd1a462 (diff)
automatic import of python-pytorch-widedeepopeneuler20.03
Diffstat (limited to 'python-pytorch-widedeep.spec')
-rw-r--r--python-pytorch-widedeep.spec735
1 files changed, 735 insertions, 0 deletions
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 <Python_Bot@openeuler.org> - 1.2.2-1
+- Package Spec generated