未验证 提交 2ef478cf 编写于 作者: J Javier 提交者: GitHub

Merge pull request #185 from jrzaurin/flash_attention

Flash attention
...@@ -130,26 +130,33 @@ passed through a series of ResNet blocks built with dense layers. ...@@ -130,26 +130,33 @@ passed through a series of ResNet blocks built with dense layers.
3. **TabNet**: details on TabNet can be found in 3. **TabNet**: details on TabNet can be found in
[TabNet: Attentive Interpretable Tabular Learning](https://arxiv.org/abs/1908.07442) [TabNet: Attentive Interpretable Tabular Learning](https://arxiv.org/abs/1908.07442)
Two simpler attention based models that we call:
4. **ContextAttentionMLP**: MLP with at attention mechanism "on top" that is based on
[Hierarchical Attention Networks for Document Classification](https://www.cs.cmu.edu/~./hovy/papers/16HLT-hierarchical-attention-networks.pd)
5. **SelfAttentionMLP**: MLP with an attention mechanism that is a simplified
version of a transformer block that we refer as "query-key self-attention".
The ``Tabformer`` family, i.e. Transformers for Tabular data: The ``Tabformer`` family, i.e. Transformers for Tabular data:
4. **TabTransformer**: details on the TabTransformer can be found in 6. **TabTransformer**: details on the TabTransformer can be found in
[TabTransformer: Tabular Data Modeling Using Contextual Embeddings](https://arxiv.org/pdf/2012.06678.pdf). [TabTransformer: Tabular Data Modeling Using Contextual Embeddings](https://arxiv.org/pdf/2012.06678.pdf).
5. **SAINT**: Details on SAINT can be found in 7. **SAINT**: Details on SAINT can be found in
[SAINT: Improved Neural Networks for Tabular Data via Row Attention and Contrastive Pre-Training](https://arxiv.org/abs/2106.01342). [SAINT: Improved Neural Networks for Tabular Data via Row Attention and Contrastive Pre-Training](https://arxiv.org/abs/2106.01342).
6. **FT-Transformer**: details on the FT-Transformer can be found in 8. **FT-Transformer**: details on the FT-Transformer can be found in
[Revisiting Deep Learning Models for Tabular Data](https://arxiv.org/abs/2106.11959). [Revisiting Deep Learning Models for Tabular Data](https://arxiv.org/abs/2106.11959).
7. **TabFastFormer**: adaptation of the FastFormer for tabular data. Details 9. **TabFastFormer**: adaptation of the FastFormer for tabular data. Details
on the Fasformer can be found in on the Fasformer can be found in
[FastFormers: Highly Efficient Transformer Models for Natural Language Understanding](https://arxiv.org/abs/2010.13382) [FastFormers: Highly Efficient Transformer Models for Natural Language Understanding](https://arxiv.org/abs/2010.13382)
8. **TabPerceiver**: adaptation of the Perceiver for tabular data. Details on 10. **TabPerceiver**: adaptation of the Perceiver for tabular data. Details on
the Perceiver can be found in the Perceiver can be found in
[Perceiver: General Perception with Iterative Attention](https://arxiv.org/abs/2103.03206) [Perceiver: General Perception with Iterative Attention](https://arxiv.org/abs/2103.03206)
And probabilistic DL models for tabular data based on And probabilistic DL models for tabular data based on
[Weight Uncertainty in Neural Networks](https://arxiv.org/abs/1505.05424): [Weight Uncertainty in Neural Networks](https://arxiv.org/abs/1505.05424):
9. **BayesianWide**: Probabilistic adaptation of the `Wide` model. 11. **BayesianWide**: Probabilistic adaptation of the `Wide` model.
10. **BayesianTabMlp**: Probabilistic adaptation of the `TabMlp` model 12. **BayesianTabMlp**: Probabilistic adaptation of the `TabMlp` model
Note that while there are scientific publications for the TabTransformer, Note that while there are scientific publications for the TabTransformer,
SAINT and FT-Transformer, the TabFasfFormer and TabPerceiver are our own SAINT and FT-Transformer, the TabFasfFormer and TabPerceiver are our own
...@@ -196,7 +203,6 @@ using `Wide` and `DeepDense` and defaults settings. ...@@ -196,7 +203,6 @@ using `Wide` and `DeepDense` and defaults settings.
Building a wide (linear) and deep model with ``pytorch-widedeep``: Building a wide (linear) and deep model with ``pytorch-widedeep``:
```python ```python
import pandas as pd
import numpy as np import numpy as np
import torch import torch
from sklearn.model_selection import train_test_split from sklearn.model_selection import train_test_split
......
from time import time
from sklearn.model_selection import train_test_split
from pytorch_widedeep import Trainer
from pytorch_widedeep.models import WideDeep, TabTransformer
from pytorch_widedeep.metrics import Accuracy
from pytorch_widedeep.datasets import load_adult
from pytorch_widedeep.preprocessing import TabPreprocessor
# use_cuda = torch.cuda.is_available()
df = load_adult(as_frame=True)
df.columns = [c.replace("-", "_") for c in df.columns]
df["income_label"] = (df["income"].apply(lambda x: ">50K" in x)).astype(int)
df.drop("income", axis=1, inplace=True)
target_colname = "income_label"
cat_embed_cols = []
for col in df.columns:
if df[col].dtype == "O" or df[col].nunique() < 200 and col != target_colname:
cat_embed_cols.append(col)
train, test = train_test_split(
df, test_size=0.1, random_state=1, stratify=df[[target_colname]]
)
with_cls_token = True
tab_preprocessor = TabPreprocessor(
cat_embed_cols=cat_embed_cols, with_attention=True, with_cls_token=with_cls_token
)
X_tab_train = tab_preprocessor.fit_transform(train)
X_tab_test = tab_preprocessor.transform(test)
target = train[target_colname].values
tab_transformer = TabTransformer(
column_idx=tab_preprocessor.column_idx,
cat_embed_input=tab_preprocessor.cat_embed_input,
input_dim=16,
n_heads=2,
n_blocks=2,
)
linear_tab_transformer = TabTransformer(
column_idx=tab_preprocessor.column_idx,
cat_embed_input=tab_preprocessor.cat_embed_input,
input_dim=16,
n_heads=2,
n_blocks=2,
use_linear_attention=True,
)
flash_tab_transformer = TabTransformer(
column_idx=tab_preprocessor.column_idx,
cat_embed_input=tab_preprocessor.cat_embed_input,
input_dim=16,
n_heads=2,
n_blocks=2,
use_flash_attention=True,
)
s_model = WideDeep(deeptabular=tab_transformer)
l_model = WideDeep(deeptabular=linear_tab_transformer)
f_model = WideDeep(deeptabular=flash_tab_transformer)
for name, model in [("standard", s_model), ("linear", l_model), ("flash", f_model)]:
trainer = Trainer(
model,
objective="binary",
metrics=[Accuracy],
)
s = time()
trainer.fit(
X_tab=X_tab_train,
target=target,
n_epochs=1,
batch_size=64,
val_split=0.2,
)
e = time() - s
print(f"{name} attention time: {round(e, 3)} secs")
...@@ -10,7 +10,7 @@ from sklearn.model_selection import train_test_split ...@@ -10,7 +10,7 @@ from sklearn.model_selection import train_test_split
from pytorch_widedeep.datasets import load_movielens100k from pytorch_widedeep.datasets import load_movielens100k
data, user, items = load_movielens100k(as_frame=True) data, users, items = load_movielens100k(as_frame=True)
# Alternatively, as specified in the docs: 'The last 19 fields are the genres' so: # Alternatively, as specified in the docs: 'The last 19 fields are the genres' so:
# list_of_genres = items.columns.tolist()[-19:] # list_of_genres = items.columns.tolist()[-19:]
...@@ -37,7 +37,7 @@ list_of_genres = [ ...@@ -37,7 +37,7 @@ list_of_genres = [
] ]
# adding a column with the number of movies watched per user # adding a column with the number of movies watched per users
dataset = data.sort_values(["user_id", "timestamp"]).reset_index(drop=True) dataset = data.sort_values(["user_id", "timestamp"]).reset_index(drop=True)
dataset["one"] = 1 dataset["one"] = 1
dataset["num_watched"] = dataset.groupby("user_id")["one"].cumsum() dataset["num_watched"] = dataset.groupby("user_id")["one"].cumsum()
...@@ -61,6 +61,9 @@ dataset["prev_movies"] = ( ...@@ -61,6 +61,9 @@ dataset["prev_movies"] = (
) )
dataset["prev_movies"] = dataset["prev_movies"].apply(lambda x: x.split()) dataset["prev_movies"] = dataset["prev_movies"].apply(lambda x: x.split())
# Adding user feats
dataset = dataset.merge(users, on="user_id", how="left")
# Adding a genre_rate as the mean of all movies rated for a given genre per # Adding a genre_rate as the mean of all movies rated for a given genre per
# user # user
dataset = dataset.merge(items[["movie_id"] + list_of_genres], on="movie_id", how="left") dataset = dataset.merge(items[["movie_id"] + list_of_genres], on="movie_id", how="left")
......
...@@ -47,7 +47,7 @@ train_movies_sequences = df_train.prev_movies.apply( ...@@ -47,7 +47,7 @@ train_movies_sequences = df_train.prev_movies.apply(
).to_list() ).to_list()
y_train = df_train.target.values.astype(int) y_train = df_train.target.values.astype(int)
df_test_user_item = df_train[["user_id", "movie_id", "rating"]] df_test_user_item = df_test[["user_id", "movie_id", "rating"]]
test_movies_sequences = df_test.prev_movies.apply( test_movies_sequences = df_test.prev_movies.apply(
lambda x: [int(el) for el in x] lambda x: [int(el) for el in x]
).to_list() ).to_list()
...@@ -89,7 +89,7 @@ X_test_text = np.array( ...@@ -89,7 +89,7 @@ X_test_text = np.array(
tab_mlp = TabMlp( tab_mlp = TabMlp(
column_idx=tab_preprocessor.column_idx, column_idx=tab_preprocessor.column_idx,
cat_embed_input=tab_preprocessor.cat_embed_input, cat_embed_input=tab_preprocessor.cat_embed_input,
mlp_hidden_dims=[1024, 512, 256], mlp_hidden_dims=[512, 256],
mlp_activation="relu", mlp_activation="relu",
) )
...@@ -124,7 +124,7 @@ trainer.fit( ...@@ -124,7 +124,7 @@ trainer.fit(
"X_text": X_test_text, "X_text": X_test_text,
"target": y_test, "target": y_test,
}, },
n_epochs=10, n_epochs=2,
batch_size=521, batch_size=32,
shuffle=False, shuffle=False,
) )
...@@ -56,6 +56,9 @@ nav: ...@@ -56,6 +56,9 @@ nav:
- 16_Self-Supervised Pre-Training pt 1: examples/16_Self_Supervised_Pretraning_pt1.ipynb - 16_Self-Supervised Pre-Training pt 1: examples/16_Self_Supervised_Pretraning_pt1.ipynb
- 16_Self-Supervised Pre-Training pt 2: examples/16_Self_Supervised_Pretraning_pt2.ipynb - 16_Self-Supervised Pre-Training pt 2: examples/16_Self_Supervised_Pretraning_pt2.ipynb
- 17_Using_a_huggingface_model: examples/17_Usign_a_hugging_face_model.ipynb - 17_Using_a_huggingface_model: examples/17_Usign_a_hugging_face_model.ipynb
- 18_feature_importance_via_attention_weights: examples/18_feature_importance_via_attention_weights.ipynb
- 19_wide_and_deep_for_recsys_pt1: examples/19_wide_and_deep_for_recsys_pt1.ipynb
- 19_wide_and_deep_for_recsys_pt2: examples/19_wide_and_deep_for_recsys_pt2.ipynb
- Contributing: contributing.md - Contributing: contributing.md
theme: theme:
......
...@@ -739,6 +739,12 @@ ...@@ -739,6 +739,12 @@
...@@ -1012,6 +1018,48 @@ ...@@ -1012,6 +1018,48 @@
<li class="md-nav__item">
<a href="/examples/18_feature_importance_via_attention_weights.html" class="md-nav__link">
18_feature_importance_via_attention_weights
</a>
</li>
<li class="md-nav__item">
<a href="/examples/19_wide_and_deep_for_recsys_pt1.html" class="md-nav__link">
19_wide_and_deep_for_recsys_pt1
</a>
</li>
<li class="md-nav__item">
<a href="/examples/19_wide_and_deep_for_recsys_pt2.html" class="md-nav__link">
19_wide_and_deep_for_recsys_pt2
</a>
</li>
</ul> </ul>
</nav> </nav>
</li> </li>
......
...@@ -743,6 +743,12 @@ ...@@ -743,6 +743,12 @@
...@@ -1016,6 +1022,48 @@ ...@@ -1016,6 +1022,48 @@
<li class="md-nav__item">
<a href="examples/18_feature_importance_via_attention_weights.html" class="md-nav__link">
18_feature_importance_via_attention_weights
</a>
</li>
<li class="md-nav__item">
<a href="examples/19_wide_and_deep_for_recsys_pt1.html" class="md-nav__link">
19_wide_and_deep_for_recsys_pt1
</a>
</li>
<li class="md-nav__item">
<a href="examples/19_wide_and_deep_for_recsys_pt2.html" class="md-nav__link">
19_wide_and_deep_for_recsys_pt2
</a>
</li>
</ul> </ul>
</nav> </nav>
</li> </li>
...@@ -1095,7 +1143,7 @@ ...@@ -1095,7 +1143,7 @@
<nav class="md-footer__inner md-grid" aria-label="Footer" > <nav class="md-footer__inner md-grid" aria-label="Footer" >
<a href="examples/17_Usign_a_hugging_face_model.html" class="md-footer__link md-footer__link--prev" aria-label="Previous: 17_Using_a_huggingface_model" rel="prev"> <a href="examples/19_wide_and_deep_for_recsys_pt2.html" class="md-footer__link md-footer__link--prev" aria-label="Previous: 19_wide_and_deep_for_recsys_pt2" rel="prev">
<div class="md-footer__button md-icon"> <div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg>
</div> </div>
...@@ -1104,7 +1152,7 @@ ...@@ -1104,7 +1152,7 @@
<span class="md-footer__direction"> <span class="md-footer__direction">
Previous Previous
</span> </span>
17_Using_a_huggingface_model 19_wide_and_deep_for_recsys_pt2
</div> </div>
</div> </div>
</a> </a>
......
...@@ -750,6 +750,12 @@ ...@@ -750,6 +750,12 @@
...@@ -1092,6 +1098,48 @@ ...@@ -1092,6 +1098,48 @@
<li class="md-nav__item">
<a href="18_feature_importance_via_attention_weights.html" class="md-nav__link">
18_feature_importance_via_attention_weights
</a>
</li>
<li class="md-nav__item">
<a href="19_wide_and_deep_for_recsys_pt1.html" class="md-nav__link">
19_wide_and_deep_for_recsys_pt1
</a>
</li>
<li class="md-nav__item">
<a href="19_wide_and_deep_for_recsys_pt2.html" class="md-nav__link">
19_wide_and_deep_for_recsys_pt2
</a>
</li>
</ul> </ul>
</nav> </nav>
</li> </li>
......
...@@ -750,6 +750,12 @@ ...@@ -750,6 +750,12 @@
...@@ -1085,6 +1091,48 @@ ...@@ -1085,6 +1091,48 @@
<li class="md-nav__item">
<a href="18_feature_importance_via_attention_weights.html" class="md-nav__link">
18_feature_importance_via_attention_weights
</a>
</li>
<li class="md-nav__item">
<a href="19_wide_and_deep_for_recsys_pt1.html" class="md-nav__link">
19_wide_and_deep_for_recsys_pt1
</a>
</li>
<li class="md-nav__item">
<a href="19_wide_and_deep_for_recsys_pt2.html" class="md-nav__link">
19_wide_and_deep_for_recsys_pt2
</a>
</li>
</ul> </ul>
</nav> </nav>
</li> </li>
......
...@@ -750,6 +750,12 @@ ...@@ -750,6 +750,12 @@
...@@ -1071,6 +1077,48 @@ ...@@ -1071,6 +1077,48 @@
<li class="md-nav__item">
<a href="18_feature_importance_via_attention_weights.html" class="md-nav__link">
18_feature_importance_via_attention_weights
</a>
</li>
<li class="md-nav__item">
<a href="19_wide_and_deep_for_recsys_pt1.html" class="md-nav__link">
19_wide_and_deep_for_recsys_pt1
</a>
</li>
<li class="md-nav__item">
<a href="19_wide_and_deep_for_recsys_pt2.html" class="md-nav__link">
19_wide_and_deep_for_recsys_pt2
</a>
</li>
</ul> </ul>
</nav> </nav>
</li> </li>
......
...@@ -750,6 +750,12 @@ ...@@ -750,6 +750,12 @@
...@@ -1085,6 +1091,48 @@ ...@@ -1085,6 +1091,48 @@
<li class="md-nav__item">
<a href="18_feature_importance_via_attention_weights.html" class="md-nav__link">
18_feature_importance_via_attention_weights
</a>
</li>
<li class="md-nav__item">
<a href="19_wide_and_deep_for_recsys_pt1.html" class="md-nav__link">
19_wide_and_deep_for_recsys_pt1
</a>
</li>
<li class="md-nav__item">
<a href="19_wide_and_deep_for_recsys_pt2.html" class="md-nav__link">
19_wide_and_deep_for_recsys_pt2
</a>
</li>
</ul> </ul>
</nav> </nav>
</li> </li>
......
...@@ -750,6 +750,12 @@ ...@@ -750,6 +750,12 @@
...@@ -1033,6 +1039,48 @@ ...@@ -1033,6 +1039,48 @@
<li class="md-nav__item">
<a href="18_feature_importance_via_attention_weights.html" class="md-nav__link">
18_feature_importance_via_attention_weights
</a>
</li>
<li class="md-nav__item">
<a href="19_wide_and_deep_for_recsys_pt1.html" class="md-nav__link">
19_wide_and_deep_for_recsys_pt1
</a>
</li>
<li class="md-nav__item">
<a href="19_wide_and_deep_for_recsys_pt2.html" class="md-nav__link">
19_wide_and_deep_for_recsys_pt2
</a>
</li>
</ul> </ul>
</nav> </nav>
</li> </li>
......
...@@ -750,6 +750,12 @@ ...@@ -750,6 +750,12 @@
...@@ -1071,6 +1077,48 @@ ...@@ -1071,6 +1077,48 @@
<li class="md-nav__item">
<a href="18_feature_importance_via_attention_weights.html" class="md-nav__link">
18_feature_importance_via_attention_weights
</a>
</li>
<li class="md-nav__item">
<a href="19_wide_and_deep_for_recsys_pt1.html" class="md-nav__link">
19_wide_and_deep_for_recsys_pt1
</a>
</li>
<li class="md-nav__item">
<a href="19_wide_and_deep_for_recsys_pt2.html" class="md-nav__link">
19_wide_and_deep_for_recsys_pt2
</a>
</li>
</ul> </ul>
</nav> </nav>
</li> </li>
......
...@@ -750,6 +750,12 @@ ...@@ -750,6 +750,12 @@
...@@ -1085,6 +1091,48 @@ ...@@ -1085,6 +1091,48 @@
<li class="md-nav__item">
<a href="18_feature_importance_via_attention_weights.html" class="md-nav__link">
18_feature_importance_via_attention_weights
</a>
</li>
<li class="md-nav__item">
<a href="19_wide_and_deep_for_recsys_pt1.html" class="md-nav__link">
19_wide_and_deep_for_recsys_pt1
</a>
</li>
<li class="md-nav__item">
<a href="19_wide_and_deep_for_recsys_pt2.html" class="md-nav__link">
19_wide_and_deep_for_recsys_pt2
</a>
</li>
</ul> </ul>
</nav> </nav>
</li> </li>
......
...@@ -750,6 +750,12 @@ ...@@ -750,6 +750,12 @@
...@@ -1064,6 +1070,48 @@ ...@@ -1064,6 +1070,48 @@
<li class="md-nav__item">
<a href="18_feature_importance_via_attention_weights.html" class="md-nav__link">
18_feature_importance_via_attention_weights
</a>
</li>
<li class="md-nav__item">
<a href="19_wide_and_deep_for_recsys_pt1.html" class="md-nav__link">
19_wide_and_deep_for_recsys_pt1
</a>
</li>
<li class="md-nav__item">
<a href="19_wide_and_deep_for_recsys_pt2.html" class="md-nav__link">
19_wide_and_deep_for_recsys_pt2
</a>
</li>
</ul> </ul>
</nav> </nav>
</li> </li>
......
...@@ -750,6 +750,12 @@ ...@@ -750,6 +750,12 @@
...@@ -1033,6 +1039,48 @@ ...@@ -1033,6 +1039,48 @@
<li class="md-nav__item">
<a href="18_feature_importance_via_attention_weights.html" class="md-nav__link">
18_feature_importance_via_attention_weights
</a>
</li>
<li class="md-nav__item">
<a href="19_wide_and_deep_for_recsys_pt1.html" class="md-nav__link">
19_wide_and_deep_for_recsys_pt1
</a>
</li>
<li class="md-nav__item">
<a href="19_wide_and_deep_for_recsys_pt2.html" class="md-nav__link">
19_wide_and_deep_for_recsys_pt2
</a>
</li>
</ul> </ul>
</nav> </nav>
</li> </li>
......
...@@ -750,6 +750,12 @@ ...@@ -750,6 +750,12 @@
...@@ -1078,6 +1084,48 @@ ...@@ -1078,6 +1084,48 @@
<li class="md-nav__item">
<a href="18_feature_importance_via_attention_weights.html" class="md-nav__link">
18_feature_importance_via_attention_weights
</a>
</li>
<li class="md-nav__item">
<a href="19_wide_and_deep_for_recsys_pt1.html" class="md-nav__link">
19_wide_and_deep_for_recsys_pt1
</a>
</li>
<li class="md-nav__item">
<a href="19_wide_and_deep_for_recsys_pt2.html" class="md-nav__link">
19_wide_and_deep_for_recsys_pt2
</a>
</li>
</ul> </ul>
</nav> </nav>
</li> </li>
......
...@@ -750,6 +750,12 @@ ...@@ -750,6 +750,12 @@
...@@ -1092,6 +1098,48 @@ ...@@ -1092,6 +1098,48 @@
<li class="md-nav__item">
<a href="18_feature_importance_via_attention_weights.html" class="md-nav__link">
18_feature_importance_via_attention_weights
</a>
</li>
<li class="md-nav__item">
<a href="19_wide_and_deep_for_recsys_pt1.html" class="md-nav__link">
19_wide_and_deep_for_recsys_pt1
</a>
</li>
<li class="md-nav__item">
<a href="19_wide_and_deep_for_recsys_pt2.html" class="md-nav__link">
19_wide_and_deep_for_recsys_pt2
</a>
</li>
</ul> </ul>
</nav> </nav>
</li> </li>
......
...@@ -750,6 +750,12 @@ ...@@ -750,6 +750,12 @@
...@@ -1071,6 +1077,48 @@ ...@@ -1071,6 +1077,48 @@
<li class="md-nav__item">
<a href="18_feature_importance_via_attention_weights.html" class="md-nav__link">
18_feature_importance_via_attention_weights
</a>
</li>
<li class="md-nav__item">
<a href="19_wide_and_deep_for_recsys_pt1.html" class="md-nav__link">
19_wide_and_deep_for_recsys_pt1
</a>
</li>
<li class="md-nav__item">
<a href="19_wide_and_deep_for_recsys_pt2.html" class="md-nav__link">
19_wide_and_deep_for_recsys_pt2
</a>
</li>
</ul> </ul>
</nav> </nav>
</li> </li>
......
...@@ -750,6 +750,12 @@ ...@@ -750,6 +750,12 @@
...@@ -1064,6 +1070,48 @@ ...@@ -1064,6 +1070,48 @@
<li class="md-nav__item">
<a href="18_feature_importance_via_attention_weights.html" class="md-nav__link">
18_feature_importance_via_attention_weights
</a>
</li>
<li class="md-nav__item">
<a href="19_wide_and_deep_for_recsys_pt1.html" class="md-nav__link">
19_wide_and_deep_for_recsys_pt1
</a>
</li>
<li class="md-nav__item">
<a href="19_wide_and_deep_for_recsys_pt2.html" class="md-nav__link">
19_wide_and_deep_for_recsys_pt2
</a>
</li>
</ul> </ul>
</nav> </nav>
</li> </li>
......
...@@ -750,6 +750,12 @@ ...@@ -750,6 +750,12 @@
...@@ -1080,6 +1086,48 @@ ...@@ -1080,6 +1086,48 @@
<li class="md-nav__item">
<a href="18_feature_importance_via_attention_weights.html" class="md-nav__link">
18_feature_importance_via_attention_weights
</a>
</li>
<li class="md-nav__item">
<a href="19_wide_and_deep_for_recsys_pt1.html" class="md-nav__link">
19_wide_and_deep_for_recsys_pt1
</a>
</li>
<li class="md-nav__item">
<a href="19_wide_and_deep_for_recsys_pt2.html" class="md-nav__link">
19_wide_and_deep_for_recsys_pt2
</a>
</li>
</ul> </ul>
</nav> </nav>
</li> </li>
......
...@@ -750,6 +750,12 @@ ...@@ -750,6 +750,12 @@
...@@ -1073,6 +1079,48 @@ ...@@ -1073,6 +1079,48 @@
<li class="md-nav__item">
<a href="18_feature_importance_via_attention_weights.html" class="md-nav__link">
18_feature_importance_via_attention_weights
</a>
</li>
<li class="md-nav__item">
<a href="19_wide_and_deep_for_recsys_pt1.html" class="md-nav__link">
19_wide_and_deep_for_recsys_pt1
</a>
</li>
<li class="md-nav__item">
<a href="19_wide_and_deep_for_recsys_pt2.html" class="md-nav__link">
19_wide_and_deep_for_recsys_pt2
</a>
</li>
</ul> </ul>
</nav> </nav>
</li> </li>
......
此差异已折叠。
...@@ -3,21 +3,21 @@ ...@@ -3,21 +3,21 @@
<img width="300" src="docs/figures/widedeep_logo.png"> <img width="300" src="docs/figures/widedeep_logo.png">
</p> </p>
[<img src="https://badge.fury.io/py/pytorch-widedeep.svg" alt="PyPI version">](https://pypi.org/project/pytorch-widedeep/) [![PyPI version](https://badge.fury.io/py/pytorch-widedeep.svg)](https://pypi.org/project/pytorch-widedeep/)
[<img src="https://img.shields.io/badge/python-3.7%20%7C%203.8%20%7C%203.9-blue.svg" alt="Python 3.7 3.8 3.9">](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/)
[<img src="https://github.com/jrzaurin/pytorch-widedeep/actions/workflows/build.yml/badge.svg" alt="Build Status">](https://github.com/jrzaurin/pytorch-widedeep/actions) [![Build Status](https://github.com/jrzaurin/pytorch-widedeep/actions/workflows/build.yml/badge.svg)](https://github.com/jrzaurin/pytorch-widedeep/actions)
[<img src="https://readthedocs.org/projects/pytorch-widedeep/badge/?version=latest" alt="Documentation Status">](https://pytorch-widedeep.readthedocs.io/en/latest/?badge=latest) [![Documentation Status](https://readthedocs.org/projects/pytorch-widedeep/badge/?version=latest)](https://pytorch-widedeep.readthedocs.io/en/latest/?badge=latest)
[<img src="https://codecov.io/gh/jrzaurin/pytorch-widedeep/branch/master/graph/badge.svg" alt="codecov">](https://codecov.io/gh/jrzaurin/pytorch-widedeep) [![codecov](https://codecov.io/gh/jrzaurin/pytorch-widedeep/branch/master/graph/badge.svg)](https://codecov.io/gh/jrzaurin/pytorch-widedeep)
[<img src="https://img.shields.io/badge/code%20style-black-000000.svg" alt="Code style: black">](https://github.com/psf/black) [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
[<img src="https://img.shields.io/badge/Maintained%3F-yes-green.svg" alt="Maintenance">](https://github.com/jrzaurin/pytorch-widedeep/graphs/commit-activity) [![Maintenance](https://img.shields.io/badge/Maintained%3F-yes-green.svg)](https://github.com/jrzaurin/pytorch-widedeep/graphs/commit-activity)
[<img src="https://img.shields.io/badge/contributions-welcome-brightgreen.svg?style=flat" alt="contributions welcome">](https://github.com/jrzaurin/pytorch-widedeep/issues) [![contributions welcome](https://img.shields.io/badge/contributions-welcome-brightgreen.svg?style=flat)](https://github.com/jrzaurin/pytorch-widedeep/issues)
[<img src="https://img.shields.io/badge/slack-chat-green.svg?logo=slack" alt="Slack">](https://join.slack.com/t/pytorch-widedeep/shared_invite/zt-soss7stf-iXpVuLeKZz8lGTnxxtHtTw) [![Slack](https://img.shields.io/badge/slack-chat-green.svg?logo=slack)](https://join.slack.com/t/pytorch-widedeep/shared_invite/zt-soss7stf-iXpVuLeKZz8lGTnxxtHtTw)
[![DOI](https://joss.theoj.org/papers/10.21105/joss.05027/status.svg)](https://doi.org/10.21105/joss.05027)
# **pytorch-widedeep** # **pytorch-widedeep**
A flexible package for multimodal-deep-learning to combine tabular data with A flexible package for multimodal-deep-learning to combine tabular data with
text and images using Wide and Deep models (or just "Deep" models) in text and images using Wide and Deep models in Pytorch
Pytorch
**Documentation:** [https://pytorch-widedeep.readthedocs.io](https://pytorch-widedeep.readthedocs.io/en/latest/index.html) **Documentation:** [https://pytorch-widedeep.readthedocs.io](https://pytorch-widedeep.readthedocs.io/en/latest/index.html)
...@@ -33,6 +33,11 @@ The content of this document is organized as follows: ...@@ -33,6 +33,11 @@ The content of this document is organized as follows:
- [Introduction](#introduction) - [Introduction](#introduction)
- [The ``deeptabular`` component](#the-deeptabular-component) - [The ``deeptabular`` component](#the-deeptabular-component)
- [Acknowledgments](#acknowledgments) - [Acknowledgments](#acknowledgments)
- [License](#license)
- [Cite](#cite)
- [BibTex](#bibtex)
- [APA](#apa)
### Introduction ### Introduction
...@@ -131,6 +136,8 @@ The ``Tabformer`` family, i.e. Transformers for Tabular data: ...@@ -131,6 +136,8 @@ The ``Tabformer`` family, i.e. Transformers for Tabular data:
6. **TabTransformer**: details on the TabTransformer can be found in 6. **TabTransformer**: details on the TabTransformer can be found in
[TabTransformer: Tabular Data Modeling Using Contextual Embeddings](https://arxiv.org/pdf/2012.06678.pdf). [TabTransformer: Tabular Data Modeling Using Contextual Embeddings](https://arxiv.org/pdf/2012.06678.pdf).
Note that this is an 'enhanced' implementation that allows for many options that can be set up via
the `TabTransformer` params.
7. **SAINT**: Details on SAINT can be found in 7. **SAINT**: Details on SAINT can be found in
[SAINT: Improved Neural Networks for Tabular Data via Row Attention and Contrastive Pre-Training](https://arxiv.org/abs/2106.01342). [SAINT: Improved Neural Networks for Tabular Data via Row Attention and Contrastive Pre-Training](https://arxiv.org/abs/2106.01342).
8. **FT-Transformer**: details on the FT-Transformer can be found in 8. **FT-Transformer**: details on the FT-Transformer can be found in
...@@ -159,152 +166,6 @@ encoder-decoder method and constrastive-denoising method. Please, see the ...@@ -159,152 +166,6 @@ encoder-decoder method and constrastive-denoising method. Please, see the
documentation and the examples for details on this functionality, and all documentation and the examples for details on this functionality, and all
other options in the library. other options in the library.
<!-- ### 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 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
```
### How to Contribute
Check [CONTRIBUTING](https://github.com/jrzaurin/pytorch-widedeep/CONTRIBUTING.MD) page.
-->
### Acknowledgments ### Acknowledgments
This library takes from a series of other libraries, so I think it is just This library takes from a series of other libraries, so I think it is just
...@@ -325,3 +186,37 @@ The `ImageProcessor` class in this library uses code from the fantastic [Deep ...@@ -325,3 +186,37 @@ The `ImageProcessor` class in this library uses code from the fantastic [Deep
Learning for Computer Learning for Computer
Vision](https://www.pyimagesearch.com/deep-learning-computer-vision-python-book/) Vision](https://www.pyimagesearch.com/deep-learning-computer-vision-python-book/)
(DL4CV) book by Adrian Rosebrock. (DL4CV) book by Adrian Rosebrock.
### License
This work is dual-licensed under Apache 2.0 and MIT (or any later version).
You can choose between one of them if you use this work.
`SPDX-License-Identifier: Apache-2.0 AND MIT`
### Cite
#### BibTex
```
@article{Zaurin_pytorch-widedeep_A_flexible_2023,
author = {Zaurin, Javier Rodriguez and Mulinka, Pavol},
doi = {10.21105/joss.05027},
journal = {Journal of Open Source Software},
month = jun,
number = {86},
pages = {5027},
title = {{pytorch-widedeep: A flexible package for multimodal deep learning}},
url = {https://joss.theoj.org/papers/10.21105/joss.05027},
volume = {8},
year = {2023}
}
```
#### APA
```
Zaurin, J. R., & Mulinka, P. (2023). pytorch-widedeep: A flexible package for
multimodal deep learning. Journal of Open Source Software, 8(86), 5027.
https://doi.org/10.21105/joss.05027
```
...@@ -789,6 +789,12 @@ ...@@ -789,6 +789,12 @@
...@@ -1062,6 +1068,48 @@ ...@@ -1062,6 +1068,48 @@
<li class="md-nav__item">
<a href="examples/18_feature_importance_via_attention_weights.html" class="md-nav__link">
18_feature_importance_via_attention_weights
</a>
</li>
<li class="md-nav__item">
<a href="examples/19_wide_and_deep_for_recsys_pt1.html" class="md-nav__link">
19_wide_and_deep_for_recsys_pt1
</a>
</li>
<li class="md-nav__item">
<a href="examples/19_wide_and_deep_for_recsys_pt2.html" class="md-nav__link">
19_wide_and_deep_for_recsys_pt2
</a>
</li>
</ul> </ul>
</nav> </nav>
</li> </li>
...@@ -1121,10 +1169,10 @@ pip<span class="w"> </span>install<span class="w"> </span>-e<span class="w"> </s ...@@ -1121,10 +1169,10 @@ pip<span class="w"> </span>install<span class="w"> </span>-e<span class="w"> </s
</code></pre></div> </code></pre></div>
<h2 id="dependencies">Dependencies<a class="headerlink" href="#dependencies" title="Permanent link">&para;</a></h2> <h2 id="dependencies">Dependencies<a class="headerlink" href="#dependencies" title="Permanent link">&para;</a></h2>
<ul> <ul>
<li>pandas</li> <li>pandas&gt;=1.3.5</li>
<li>numpy</li> <li>numpy&gt;=1.21.6</li>
<li>scipy</li> <li>scipy&gt;=1.7.3</li>
<li>scikit-learn</li> <li>scikit-learn&gt;=1.0.2</li>
<li>gensim</li> <li>gensim</li>
<li>spacy</li> <li>spacy</li>
<li>opencv-contrib-python</li> <li>opencv-contrib-python</li>
...@@ -1135,6 +1183,8 @@ pip<span class="w"> </span>install<span class="w"> </span>-e<span class="w"> </s ...@@ -1135,6 +1183,8 @@ pip<span class="w"> </span>install<span class="w"> </span>-e<span class="w"> </s
<li>einops</li> <li>einops</li>
<li>wrapt</li> <li>wrapt</li>
<li>torchmetrics</li> <li>torchmetrics</li>
<li>pyarrow</li>
<li>fastparquet&gt;=0.8.1</li>
</ul> </ul>
......
...@@ -27,10 +27,10 @@ pip install -e . ...@@ -27,10 +27,10 @@ pip install -e .
## Dependencies ## Dependencies
* pandas * pandas>=1.3.5
* numpy * numpy>=1.21.6
* scipy * scipy>=1.7.3
* scikit-learn * scikit-learn>=1.0.2
* gensim * gensim
* spacy * spacy
* opencv-contrib-python * opencv-contrib-python
...@@ -41,3 +41,5 @@ pip install -e . ...@@ -41,3 +41,5 @@ pip install -e .
* einops * einops
* wrapt * wrapt
* torchmetrics * torchmetrics
* pyarrow
* fastparquet>=0.8.1
\ No newline at end of file
...@@ -798,6 +798,12 @@ ...@@ -798,6 +798,12 @@
...@@ -1071,6 +1077,48 @@ ...@@ -1071,6 +1077,48 @@
<li class="md-nav__item">
<a href="../examples/18_feature_importance_via_attention_weights.html" class="md-nav__link">
18_feature_importance_via_attention_weights
</a>
</li>
<li class="md-nav__item">
<a href="../examples/19_wide_and_deep_for_recsys_pt1.html" class="md-nav__link">
19_wide_and_deep_for_recsys_pt1
</a>
</li>
<li class="md-nav__item">
<a href="../examples/19_wide_and_deep_for_recsys_pt2.html" class="md-nav__link">
19_wide_and_deep_for_recsys_pt2
</a>
</li>
</ul> </ul>
</nav> </nav>
</li> </li>
......
...@@ -791,6 +791,12 @@ ...@@ -791,6 +791,12 @@
...@@ -1064,6 +1070,48 @@ ...@@ -1064,6 +1070,48 @@
<li class="md-nav__item">
<a href="../examples/18_feature_importance_via_attention_weights.html" class="md-nav__link">
18_feature_importance_via_attention_weights
</a>
</li>
<li class="md-nav__item">
<a href="../examples/19_wide_and_deep_for_recsys_pt1.html" class="md-nav__link">
19_wide_and_deep_for_recsys_pt1
</a>
</li>
<li class="md-nav__item">
<a href="../examples/19_wide_and_deep_for_recsys_pt2.html" class="md-nav__link">
19_wide_and_deep_for_recsys_pt2
</a>
</li>
</ul> </ul>
</nav> </nav>
</li> </li>
......
...@@ -805,6 +805,12 @@ ...@@ -805,6 +805,12 @@
...@@ -1078,6 +1084,48 @@ ...@@ -1078,6 +1084,48 @@
<li class="md-nav__item">
<a href="../examples/18_feature_importance_via_attention_weights.html" class="md-nav__link">
18_feature_importance_via_attention_weights
</a>
</li>
<li class="md-nav__item">
<a href="../examples/19_wide_and_deep_for_recsys_pt1.html" class="md-nav__link">
19_wide_and_deep_for_recsys_pt1
</a>
</li>
<li class="md-nav__item">
<a href="../examples/19_wide_and_deep_for_recsys_pt2.html" class="md-nav__link">
19_wide_and_deep_for_recsys_pt2
</a>
</li>
</ul> </ul>
</nav> </nav>
</li> </li>
...@@ -1174,9 +1222,9 @@ of the <code>Trainer</code>.</p> ...@@ -1174,9 +1222,9 @@ of the <code>Trainer</code>.</p>
<details class="quote"> <details class="quote">
<summary>Source code in <code>pytorch_widedeep/callbacks.py</code></summary> <summary>Source code in <code>pytorch_widedeep/callbacks.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">267</span> <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">268</span>
<span class="normal">268</span> <span class="normal">269</span>
<span class="normal">269</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">n_epochs</span><span class="p">:</span> <span class="nb">int</span><span class="p">):</span> <span class="normal">270</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">n_epochs</span><span class="p">:</span> <span class="nb">int</span><span class="p">):</span>
<span class="nb">super</span><span class="p">(</span><span class="n">LRHistory</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">()</span> <span class="nb">super</span><span class="p">(</span><span class="n">LRHistory</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">n_epochs</span> <span class="o">=</span> <span class="n">n_epochs</span> <span class="bp">self</span><span class="o">.</span><span class="n">n_epochs</span> <span class="o">=</span> <span class="n">n_epochs</span>
</code></pre></div></td></tr></table></div> </code></pre></div></td></tr></table></div>
...@@ -1214,6 +1262,7 @@ of the <code>Trainer</code>.</p> ...@@ -1214,6 +1262,7 @@ of the <code>Trainer</code>.</p>
<div class="highlight"><pre><span></span><code><span class="n">ModelCheckpoint</span><span class="p">(</span> <div class="highlight"><pre><span></span><code><span class="n">ModelCheckpoint</span><span class="p">(</span>
<span class="n">filepath</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">filepath</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">monitor</span><span class="o">=</span><span class="s2">&quot;val_loss&quot;</span><span class="p">,</span> <span class="n">monitor</span><span class="o">=</span><span class="s2">&quot;val_loss&quot;</span><span class="p">,</span>
<span class="n">min_delta</span><span class="o">=</span><span class="mf">0.0</span><span class="p">,</span>
<span class="n">verbose</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">verbose</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span>
<span class="n">save_best_only</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">save_best_only</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
<span class="n">mode</span><span class="o">=</span><span class="s2">&quot;auto&quot;</span><span class="p">,</span> <span class="n">mode</span><span class="o">=</span><span class="s2">&quot;auto&quot;</span><span class="p">,</span>
...@@ -1250,6 +1299,13 @@ class just report best metric and best_epoch.</p> ...@@ -1250,6 +1299,13 @@ class just report best metric and best_epoch.</p>
(<code>str</code>) (<code>str</code>)
<p>quantity to monitor. Typically <em>'val_loss'</em> or metric name <p>quantity to monitor. Typically <em>'val_loss'</em> or metric name
(e.g. <em>'val_acc'</em>)</p> (e.g. <em>'val_acc'</em>)</p>
</li>
<li class="field-body">
<b>min_delta</b>
(<code>float</code>)
<p>minimum change in the monitored quantity to qualify as an
improvement, i.e. an absolute change of less than min_delta, will
count as no improvement.</p>
</li> </li>
<li class="field-body"> <li class="field-body">
<b>verbose</b> <b>verbose</b>
...@@ -1323,12 +1379,7 @@ the repo or the Examples section in this documentation for details</p> ...@@ -1323,12 +1379,7 @@ the repo or the Examples section in this documentation for details</p>
<details class="quote"> <details class="quote">
<summary>Source code in <code>pytorch_widedeep/callbacks.py</code></summary> <summary>Source code in <code>pytorch_widedeep/callbacks.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">395</span> <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">400</span>
<span class="normal">396</span>
<span class="normal">397</span>
<span class="normal">398</span>
<span class="normal">399</span>
<span class="normal">400</span>
<span class="normal">401</span> <span class="normal">401</span>
<span class="normal">402</span> <span class="normal">402</span>
<span class="normal">403</span> <span class="normal">403</span>
...@@ -1378,10 +1429,23 @@ the repo or the Examples section in this documentation for details</p> ...@@ -1378,10 +1429,23 @@ the repo or the Examples section in this documentation for details</p>
<span class="normal">447</span> <span class="normal">447</span>
<span class="normal">448</span> <span class="normal">448</span>
<span class="normal">449</span> <span class="normal">449</span>
<span class="normal">450</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span> <span class="normal">450</span>
<span class="normal">451</span>
<span class="normal">452</span>
<span class="normal">453</span>
<span class="normal">454</span>
<span class="normal">455</span>
<span class="normal">456</span>
<span class="normal">457</span>
<span class="normal">458</span>
<span class="normal">459</span>
<span class="normal">460</span>
<span class="normal">461</span>
<span class="normal">462</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span>
<span class="bp">self</span><span class="p">,</span> <span class="bp">self</span><span class="p">,</span>
<span class="n">filepath</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="n">filepath</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
<span class="n">monitor</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;val_loss&quot;</span><span class="p">,</span> <span class="n">monitor</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;val_loss&quot;</span><span class="p">,</span>
<span class="n">min_delta</span><span class="p">:</span> <span class="nb">float</span> <span class="o">=</span> <span class="mf">0.0</span><span class="p">,</span>
<span class="n">verbose</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> <span class="n">verbose</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span>
<span class="n">save_best_only</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">save_best_only</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
<span class="n">mode</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;auto&quot;</span><span class="p">,</span> <span class="n">mode</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;auto&quot;</span><span class="p">,</span>
...@@ -1392,6 +1456,7 @@ the repo or the Examples section in this documentation for details</p> ...@@ -1392,6 +1456,7 @@ the repo or the Examples section in this documentation for details</p>
<span class="bp">self</span><span class="o">.</span><span class="n">filepath</span> <span class="o">=</span> <span class="n">filepath</span> <span class="bp">self</span><span class="o">.</span><span class="n">filepath</span> <span class="o">=</span> <span class="n">filepath</span>
<span class="bp">self</span><span class="o">.</span><span class="n">monitor</span> <span class="o">=</span> <span class="n">monitor</span> <span class="bp">self</span><span class="o">.</span><span class="n">monitor</span> <span class="o">=</span> <span class="n">monitor</span>
<span class="bp">self</span><span class="o">.</span><span class="n">min_delta</span> <span class="o">=</span> <span class="n">min_delta</span>
<span class="bp">self</span><span class="o">.</span><span class="n">verbose</span> <span class="o">=</span> <span class="n">verbose</span> <span class="bp">self</span><span class="o">.</span><span class="n">verbose</span> <span class="o">=</span> <span class="n">verbose</span>
<span class="bp">self</span><span class="o">.</span><span class="n">save_best_only</span> <span class="o">=</span> <span class="n">save_best_only</span> <span class="bp">self</span><span class="o">.</span><span class="n">save_best_only</span> <span class="o">=</span> <span class="n">save_best_only</span>
<span class="bp">self</span><span class="o">.</span><span class="n">mode</span> <span class="o">=</span> <span class="n">mode</span> <span class="bp">self</span><span class="o">.</span><span class="n">mode</span> <span class="o">=</span> <span class="n">mode</span>
...@@ -1434,6 +1499,11 @@ the repo or the Examples section in this documentation for details</p> ...@@ -1434,6 +1499,11 @@ the repo or the Examples section in this documentation for details</p>
<span class="k">else</span><span class="p">:</span> <span class="k">else</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">monitor_op</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">less</span> <span class="bp">self</span><span class="o">.</span><span class="n">monitor_op</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">less</span>
<span class="bp">self</span><span class="o">.</span><span class="n">best</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">Inf</span> <span class="bp">self</span><span class="o">.</span><span class="n">best</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">Inf</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">monitor_op</span> <span class="o">==</span> <span class="n">np</span><span class="o">.</span><span class="n">greater</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">min_delta</span> <span class="o">*=</span> <span class="mi">1</span>
<span class="k">else</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">min_delta</span> <span class="o">*=</span> <span class="o">-</span><span class="mi">1</span>
</code></pre></div></td></tr></table></div> </code></pre></div></td></tr></table></div>
</details> </details>
...@@ -1568,7 +1638,8 @@ obtained at the last step of training are used.</p> ...@@ -1568,7 +1638,8 @@ obtained at the last step of training are used.</p>
<details class="quote"> <details class="quote">
<summary>Source code in <code>pytorch_widedeep/callbacks.py</code></summary> <summary>Source code in <code>pytorch_widedeep/callbacks.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">593</span> <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">592</span>
<span class="normal">593</span>
<span class="normal">594</span> <span class="normal">594</span>
<span class="normal">595</span> <span class="normal">595</span>
<span class="normal">596</span> <span class="normal">596</span>
...@@ -1612,8 +1683,7 @@ obtained at the last step of training are used.</p> ...@@ -1612,8 +1683,7 @@ obtained at the last step of training are used.</p>
<span class="normal">634</span> <span class="normal">634</span>
<span class="normal">635</span> <span class="normal">635</span>
<span class="normal">636</span> <span class="normal">636</span>
<span class="normal">637</span> <span class="normal">637</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span>
<span class="normal">638</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span>
<span class="bp">self</span><span class="p">,</span> <span class="bp">self</span><span class="p">,</span>
<span class="n">monitor</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;val_loss&quot;</span><span class="p">,</span> <span class="n">monitor</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;val_loss&quot;</span><span class="p">,</span>
<span class="n">min_delta</span><span class="p">:</span> <span class="nb">float</span> <span class="o">=</span> <span class="mf">0.0</span><span class="p">,</span> <span class="n">min_delta</span><span class="p">:</span> <span class="nb">float</span> <span class="o">=</span> <span class="mf">0.0</span><span class="p">,</span>
......
...@@ -791,6 +791,12 @@ ...@@ -791,6 +791,12 @@
...@@ -1064,6 +1070,48 @@ ...@@ -1064,6 +1070,48 @@
<li class="md-nav__item">
<a href="../examples/18_feature_importance_via_attention_weights.html" class="md-nav__link">
18_feature_importance_via_attention_weights
</a>
</li>
<li class="md-nav__item">
<a href="../examples/19_wide_and_deep_for_recsys_pt1.html" class="md-nav__link">
19_wide_and_deep_for_recsys_pt1
</a>
</li>
<li class="md-nav__item">
<a href="../examples/19_wide_and_deep_for_recsys_pt2.html" class="md-nav__link">
19_wide_and_deep_for_recsys_pt2
</a>
</li>
</ul> </ul>
</nav> </nav>
</li> </li>
...@@ -1190,12 +1238,14 @@ minority \space class \space count \times number \space of \space classes \times ...@@ -1190,12 +1238,14 @@ minority \space class \space count \times number \space of \space classes \times
<span class="normal">93</span> <span class="normal">93</span>
<span class="normal">94</span> <span class="normal">94</span>
<span class="normal">95</span> <span class="normal">95</span>
<span class="normal">96</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span> <span class="normal">96</span>
<span class="normal">97</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span>
<span class="bp">self</span><span class="p">,</span> <span class="n">dataset</span><span class="p">:</span> <span class="n">WideDeepDataset</span><span class="p">,</span> <span class="n">batch_size</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="n">num_workers</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span> <span class="bp">self</span><span class="p">,</span> <span class="n">dataset</span><span class="p">:</span> <span class="n">WideDeepDataset</span><span class="p">,</span> <span class="n">batch_size</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="n">num_workers</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span>
<span class="p">):</span> <span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">with_lds</span> <span class="o">=</span> <span class="n">dataset</span><span class="o">.</span><span class="n">with_lds</span> <span class="bp">self</span><span class="o">.</span><span class="n">with_lds</span> <span class="o">=</span> <span class="n">dataset</span><span class="o">.</span><span class="n">with_lds</span>
<span class="k">if</span> <span class="s2">&quot;oversample_mul&quot;</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span> <span class="k">if</span> <span class="s2">&quot;oversample_mul&quot;</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span>
<span class="n">oversample_mul</span> <span class="o">=</span> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;oversample_mul&quot;</span><span class="p">]</span> <span class="n">oversample_mul</span> <span class="o">=</span> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;oversample_mul&quot;</span><span class="p">]</span>
<span class="k">del</span> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;oversample_mul&quot;</span><span class="p">]</span>
<span class="k">else</span><span class="p">:</span> <span class="k">else</span><span class="p">:</span>
<span class="n">oversample_mul</span> <span class="o">=</span> <span class="mi">1</span> <span class="n">oversample_mul</span> <span class="o">=</span> <span class="mi">1</span>
<span class="n">weights</span><span class="p">,</span> <span class="n">minor_cls_cnt</span><span class="p">,</span> <span class="n">num_clss</span> <span class="o">=</span> <span class="n">get_class_weights</span><span class="p">(</span><span class="n">dataset</span><span class="p">)</span> <span class="n">weights</span><span class="p">,</span> <span class="n">minor_cls_cnt</span><span class="p">,</span> <span class="n">num_clss</span> <span class="o">=</span> <span class="n">get_class_weights</span><span class="p">(</span><span class="n">dataset</span><span class="p">)</span>
......
...@@ -903,6 +903,12 @@ ...@@ -903,6 +903,12 @@
...@@ -1176,6 +1182,48 @@ ...@@ -1176,6 +1182,48 @@
<li class="md-nav__item">
<a href="../examples/18_feature_importance_via_attention_weights.html" class="md-nav__link">
18_feature_importance_via_attention_weights
</a>
</li>
<li class="md-nav__item">
<a href="../examples/19_wide_and_deep_for_recsys_pt1.html" class="md-nav__link">
19_wide_and_deep_for_recsys_pt1
</a>
</li>
<li class="md-nav__item">
<a href="../examples/19_wide_and_deep_for_recsys_pt2.html" class="md-nav__link">
19_wide_and_deep_for_recsys_pt2
</a>
</li>
</ul> </ul>
</nav> </nav>
</li> </li>
...@@ -3851,9 +3899,7 @@ reduction: str, default = "mean" ...@@ -3851,9 +3899,7 @@ reduction: str, default = "mean"
<span class="normal">823</span> <span class="normal">823</span>
<span class="normal">824</span> <span class="normal">824</span>
<span class="normal">825</span> <span class="normal">825</span>
<span class="normal">826</span> <span class="normal">826</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">temperature</span><span class="p">:</span> <span class="nb">float</span> <span class="o">=</span> <span class="mf">0.1</span><span class="p">,</span> <span class="n">reduction</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;mean&quot;</span><span class="p">):</span>
<span class="normal">827</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">temperature</span><span class="p">:</span> <span class="nb">float</span> <span class="o">=</span> <span class="mf">0.1</span><span class="p">,</span> <span class="n">reduction</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;mean&quot;</span><span class="p">):</span>
<span class="nb">super</span><span class="p">(</span><span class="n">InfoNCELoss</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">()</span> <span class="nb">super</span><span class="p">(</span><span class="n">InfoNCELoss</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">temperature</span> <span class="o">=</span> <span class="n">temperature</span> <span class="bp">self</span><span class="o">.</span><span class="n">temperature</span> <span class="o">=</span> <span class="n">temperature</span>
...@@ -3909,7 +3955,8 @@ for Tabular Data via Row Attention and Contrastive Pre-Training'.</p> ...@@ -3909,7 +3955,8 @@ for Tabular Data via Row Attention and Contrastive Pre-Training'.</p>
<details class="quote"> <details class="quote">
<summary>Source code in <code>pytorch_widedeep/losses.py</code></summary> <summary>Source code in <code>pytorch_widedeep/losses.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">829</span> <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">828</span>
<span class="normal">829</span>
<span class="normal">830</span> <span class="normal">830</span>
<span class="normal">831</span> <span class="normal">831</span>
<span class="normal">832</span> <span class="normal">832</span>
...@@ -3939,8 +3986,7 @@ for Tabular Data via Row Attention and Contrastive Pre-Training'.</p> ...@@ -3939,8 +3986,7 @@ for Tabular Data via Row Attention and Contrastive Pre-Training'.</p>
<span class="normal">856</span> <span class="normal">856</span>
<span class="normal">857</span> <span class="normal">857</span>
<span class="normal">858</span> <span class="normal">858</span>
<span class="normal">859</span> <span class="normal">859</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">forward</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">g_projs</span><span class="p">:</span> <span class="n">Tuple</span><span class="p">[</span><span class="n">Tensor</span><span class="p">,</span> <span class="n">Tensor</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">Tensor</span><span class="p">:</span>
<span class="normal">860</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">forward</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">g_projs</span><span class="p">:</span> <span class="n">Tuple</span><span class="p">[</span><span class="n">Tensor</span><span class="p">,</span> <span class="n">Tensor</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">Tensor</span><span class="p">:</span>
<span class="w"> </span><span class="sa">r</span><span class="sd">&quot;&quot;&quot;</span> <span class="w"> </span><span class="sa">r</span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Parameters</span> <span class="sd"> Parameters</span>
<span class="sd"> ----------</span> <span class="sd"> ----------</span>
...@@ -4026,14 +4072,14 @@ reduction: str, default = "mean" ...@@ -4026,14 +4072,14 @@ reduction: str, default = "mean"
<details class="quote"> <details class="quote">
<summary>Source code in <code>pytorch_widedeep/losses.py</code></summary> <summary>Source code in <code>pytorch_widedeep/losses.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">887</span> <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">886</span>
<span class="normal">887</span>
<span class="normal">888</span> <span class="normal">888</span>
<span class="normal">889</span> <span class="normal">889</span>
<span class="normal">890</span> <span class="normal">890</span>
<span class="normal">891</span> <span class="normal">891</span>
<span class="normal">892</span> <span class="normal">892</span>
<span class="normal">893</span> <span class="normal">893</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span>
<span class="normal">894</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span>
<span class="bp">self</span><span class="p">,</span> <span class="n">lambda_cat</span><span class="p">:</span> <span class="nb">float</span> <span class="o">=</span> <span class="mf">1.0</span><span class="p">,</span> <span class="n">lambda_cont</span><span class="p">:</span> <span class="nb">float</span> <span class="o">=</span> <span class="mf">1.0</span><span class="p">,</span> <span class="n">reduction</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;mean&quot;</span> <span class="bp">self</span><span class="p">,</span> <span class="n">lambda_cat</span><span class="p">:</span> <span class="nb">float</span> <span class="o">=</span> <span class="mf">1.0</span><span class="p">,</span> <span class="n">lambda_cont</span><span class="p">:</span> <span class="nb">float</span> <span class="o">=</span> <span class="mf">1.0</span><span class="p">,</span> <span class="n">reduction</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;mean&quot;</span>
<span class="p">):</span> <span class="p">):</span>
<span class="nb">super</span><span class="p">(</span><span class="n">DenoisingLoss</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">()</span> <span class="nb">super</span><span class="p">(</span><span class="n">DenoisingLoss</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">()</span>
...@@ -4100,7 +4146,8 @@ categorical feature</p> ...@@ -4100,7 +4146,8 @@ categorical feature</p>
<details class="quote"> <details class="quote">
<summary>Source code in <code>pytorch_widedeep/losses.py</code></summary> <summary>Source code in <code>pytorch_widedeep/losses.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">896</span> <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">895</span>
<span class="normal">896</span>
<span class="normal">897</span> <span class="normal">897</span>
<span class="normal">898</span> <span class="normal">898</span>
<span class="normal">899</span> <span class="normal">899</span>
...@@ -4141,8 +4188,7 @@ categorical feature</p> ...@@ -4141,8 +4188,7 @@ categorical feature</p>
<span class="normal">934</span> <span class="normal">934</span>
<span class="normal">935</span> <span class="normal">935</span>
<span class="normal">936</span> <span class="normal">936</span>
<span class="normal">937</span> <span class="normal">937</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">forward</span><span class="p">(</span>
<span class="normal">938</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">forward</span><span class="p">(</span>
<span class="bp">self</span><span class="p">,</span> <span class="bp">self</span><span class="p">,</span>
<span class="n">x_cat_and_cat_</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span> <span class="n">x_cat_and_cat_</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span>
<span class="n">Union</span><span class="p">[</span><span class="n">List</span><span class="p">[</span><span class="n">Tuple</span><span class="p">[</span><span class="n">Tensor</span><span class="p">,</span> <span class="n">Tensor</span><span class="p">]],</span> <span class="n">Tuple</span><span class="p">[</span><span class="n">Tensor</span><span class="p">,</span> <span class="n">Tensor</span><span class="p">]]</span> <span class="n">Union</span><span class="p">[</span><span class="n">List</span><span class="p">[</span><span class="n">Tuple</span><span class="p">[</span><span class="n">Tensor</span><span class="p">,</span> <span class="n">Tensor</span><span class="p">]],</span> <span class="n">Tuple</span><span class="p">[</span><span class="n">Tensor</span><span class="p">,</span> <span class="n">Tensor</span><span class="p">]]</span>
...@@ -4232,9 +4278,9 @@ Interpretable Tabular Learning</a>.</p> ...@@ -4232,9 +4278,9 @@ Interpretable Tabular Learning</a>.</p>
<details class="quote"> <details class="quote">
<summary>Source code in <code>pytorch_widedeep/losses.py</code></summary> <summary>Source code in <code>pytorch_widedeep/losses.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">996</span> <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">993</span>
<span class="normal">997</span> <span class="normal">994</span>
<span class="normal">998</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">eps</span><span class="p">:</span> <span class="nb">float</span> <span class="o">=</span> <span class="mf">1e-9</span><span class="p">):</span> <span class="normal">995</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">eps</span><span class="p">:</span> <span class="nb">float</span> <span class="o">=</span> <span class="mf">1e-9</span><span class="p">):</span>
<span class="nb">super</span><span class="p">(</span><span class="n">EncoderDecoderLoss</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">()</span> <span class="nb">super</span><span class="p">(</span><span class="n">EncoderDecoderLoss</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">eps</span> <span class="o">=</span> <span class="n">eps</span> <span class="bp">self</span><span class="o">.</span><span class="n">eps</span> <span class="o">=</span> <span class="n">eps</span>
</code></pre></div></td></tr></table></div> </code></pre></div></td></tr></table></div>
...@@ -4299,7 +4345,10 @@ loss, is based on those features.</p> ...@@ -4299,7 +4345,10 @@ loss, is based on those features.</p>
<details class="quote"> <details class="quote">
<summary>Source code in <code>pytorch_widedeep/losses.py</code></summary> <summary>Source code in <code>pytorch_widedeep/losses.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1000</span> <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"> 997</span>
<span class="normal"> 998</span>
<span class="normal"> 999</span>
<span class="normal">1000</span>
<span class="normal">1001</span> <span class="normal">1001</span>
<span class="normal">1002</span> <span class="normal">1002</span>
<span class="normal">1003</span> <span class="normal">1003</span>
...@@ -4335,10 +4384,7 @@ loss, is based on those features.</p> ...@@ -4335,10 +4384,7 @@ loss, is based on those features.</p>
<span class="normal">1033</span> <span class="normal">1033</span>
<span class="normal">1034</span> <span class="normal">1034</span>
<span class="normal">1035</span> <span class="normal">1035</span>
<span class="normal">1036</span> <span class="normal">1036</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">forward</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">x_true</span><span class="p">:</span> <span class="n">Tensor</span><span class="p">,</span> <span class="n">x_pred</span><span class="p">:</span> <span class="n">Tensor</span><span class="p">,</span> <span class="n">mask</span><span class="p">:</span> <span class="n">Tensor</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Tensor</span><span class="p">:</span>
<span class="normal">1037</span>
<span class="normal">1038</span>
<span class="normal">1039</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">forward</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">x_true</span><span class="p">:</span> <span class="n">Tensor</span><span class="p">,</span> <span class="n">x_pred</span><span class="p">:</span> <span class="n">Tensor</span><span class="p">,</span> <span class="n">mask</span><span class="p">:</span> <span class="n">Tensor</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Tensor</span><span class="p">:</span>
<span class="w"> </span><span class="sa">r</span><span class="sd">&quot;&quot;&quot;</span> <span class="w"> </span><span class="sa">r</span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Parameters</span> <span class="sd"> Parameters</span>
<span class="sd"> ----------</span> <span class="sd"> ----------</span>
......
...@@ -826,6 +826,12 @@ ...@@ -826,6 +826,12 @@
...@@ -1099,6 +1105,48 @@ ...@@ -1099,6 +1105,48 @@
<li class="md-nav__item">
<a href="../examples/18_feature_importance_via_attention_weights.html" class="md-nav__link">
18_feature_importance_via_attention_weights
</a>
</li>
<li class="md-nav__item">
<a href="../examples/19_wide_and_deep_for_recsys_pt1.html" class="md-nav__link">
19_wide_and_deep_for_recsys_pt1
</a>
</li>
<li class="md-nav__item">
<a href="../examples/19_wide_and_deep_for_recsys_pt2.html" class="md-nav__link">
19_wide_and_deep_for_recsys_pt2
</a>
</li>
</ul> </ul>
</nav> </nav>
</li> </li>
...@@ -1217,13 +1265,13 @@ multiclass problems</p> ...@@ -1217,13 +1265,13 @@ multiclass problems</p>
<details class="quote"> <details class="quote">
<summary>Source code in <code>pytorch_widedeep/metrics.py</code></summary> <summary>Source code in <code>pytorch_widedeep/metrics.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">76</span> <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">75</span>
<span class="normal">76</span>
<span class="normal">77</span> <span class="normal">77</span>
<span class="normal">78</span> <span class="normal">78</span>
<span class="normal">79</span> <span class="normal">79</span>
<span class="normal">80</span> <span class="normal">80</span>
<span class="normal">81</span> <span class="normal">81</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">top_k</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">1</span><span class="p">):</span>
<span class="normal">82</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">top_k</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">1</span><span class="p">):</span>
<span class="nb">super</span><span class="p">(</span><span class="n">Accuracy</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">()</span> <span class="nb">super</span><span class="p">(</span><span class="n">Accuracy</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">top_k</span> <span class="o">=</span> <span class="n">top_k</span> <span class="bp">self</span><span class="o">.</span><span class="n">top_k</span> <span class="o">=</span> <span class="n">top_k</span>
...@@ -1263,12 +1311,12 @@ multiclass problems</p> ...@@ -1263,12 +1311,12 @@ multiclass problems</p>
<details class="quote"> <details class="quote">
<summary>Source code in <code>pytorch_widedeep/metrics.py</code></summary> <summary>Source code in <code>pytorch_widedeep/metrics.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">84</span> <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">83</span>
<span class="normal">84</span>
<span class="normal">85</span> <span class="normal">85</span>
<span class="normal">86</span> <span class="normal">86</span>
<span class="normal">87</span> <span class="normal">87</span>
<span class="normal">88</span> <span class="normal">88</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">reset</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="normal">89</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">reset</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span> <span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> resets counters to 0</span> <span class="sd"> resets counters to 0</span>
<span class="sd"> &quot;&quot;&quot;</span> <span class="sd"> &quot;&quot;&quot;</span>
...@@ -1338,14 +1386,14 @@ precision for each label, and finds their unweighted mean.</p> ...@@ -1338,14 +1386,14 @@ precision for each label, and finds their unweighted mean.</p>
<details class="quote"> <details class="quote">
<summary>Source code in <code>pytorch_widedeep/metrics.py</code></summary> <summary>Source code in <code>pytorch_widedeep/metrics.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">135</span> <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">134</span>
<span class="normal">135</span>
<span class="normal">136</span> <span class="normal">136</span>
<span class="normal">137</span> <span class="normal">137</span>
<span class="normal">138</span> <span class="normal">138</span>
<span class="normal">139</span> <span class="normal">139</span>
<span class="normal">140</span> <span class="normal">140</span>
<span class="normal">141</span> <span class="normal">141</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">average</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">):</span>
<span class="normal">142</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">average</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">):</span>
<span class="nb">super</span><span class="p">(</span><span class="n">Precision</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">()</span> <span class="nb">super</span><span class="p">(</span><span class="n">Precision</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">average</span> <span class="o">=</span> <span class="n">average</span> <span class="bp">self</span><span class="o">.</span><span class="n">average</span> <span class="o">=</span> <span class="n">average</span>
...@@ -1386,12 +1434,12 @@ precision for each label, and finds their unweighted mean.</p> ...@@ -1386,12 +1434,12 @@ precision for each label, and finds their unweighted mean.</p>
<details class="quote"> <details class="quote">
<summary>Source code in <code>pytorch_widedeep/metrics.py</code></summary> <summary>Source code in <code>pytorch_widedeep/metrics.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">144</span> <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">143</span>
<span class="normal">144</span>
<span class="normal">145</span> <span class="normal">145</span>
<span class="normal">146</span> <span class="normal">146</span>
<span class="normal">147</span> <span class="normal">147</span>
<span class="normal">148</span> <span class="normal">148</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">reset</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="normal">149</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">reset</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span> <span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> resets counters to 0</span> <span class="sd"> resets counters to 0</span>
<span class="sd"> &quot;&quot;&quot;</span> <span class="sd"> &quot;&quot;&quot;</span>
...@@ -1461,14 +1509,14 @@ for each label, and finds their unweighted mean.</p> ...@@ -1461,14 +1509,14 @@ for each label, and finds their unweighted mean.</p>
<details class="quote"> <details class="quote">
<summary>Source code in <code>pytorch_widedeep/metrics.py</code></summary> <summary>Source code in <code>pytorch_widedeep/metrics.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">201</span> <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">200</span>
<span class="normal">201</span>
<span class="normal">202</span> <span class="normal">202</span>
<span class="normal">203</span> <span class="normal">203</span>
<span class="normal">204</span> <span class="normal">204</span>
<span class="normal">205</span> <span class="normal">205</span>
<span class="normal">206</span> <span class="normal">206</span>
<span class="normal">207</span> <span class="normal">207</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">average</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">):</span>
<span class="normal">208</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">average</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">):</span>
<span class="nb">super</span><span class="p">(</span><span class="n">Recall</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">()</span> <span class="nb">super</span><span class="p">(</span><span class="n">Recall</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">average</span> <span class="o">=</span> <span class="n">average</span> <span class="bp">self</span><span class="o">.</span><span class="n">average</span> <span class="o">=</span> <span class="n">average</span>
...@@ -1509,12 +1557,12 @@ for each label, and finds their unweighted mean.</p> ...@@ -1509,12 +1557,12 @@ for each label, and finds their unweighted mean.</p>
<details class="quote"> <details class="quote">
<summary>Source code in <code>pytorch_widedeep/metrics.py</code></summary> <summary>Source code in <code>pytorch_widedeep/metrics.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">210</span> <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">209</span>
<span class="normal">210</span>
<span class="normal">211</span> <span class="normal">211</span>
<span class="normal">212</span> <span class="normal">212</span>
<span class="normal">213</span> <span class="normal">213</span>
<span class="normal">214</span> <span class="normal">214</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">reset</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="normal">215</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">reset</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span> <span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> resets counters to 0</span> <span class="sd"> resets counters to 0</span>
<span class="sd"> &quot;&quot;&quot;</span> <span class="sd"> &quot;&quot;&quot;</span>
...@@ -1592,15 +1640,15 @@ for each label, and find their unweighted mean.</p> ...@@ -1592,15 +1640,15 @@ for each label, and find their unweighted mean.</p>
<details class="quote"> <details class="quote">
<summary>Source code in <code>pytorch_widedeep/metrics.py</code></summary> <summary>Source code in <code>pytorch_widedeep/metrics.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">273</span> <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">272</span>
<span class="normal">273</span>
<span class="normal">274</span> <span class="normal">274</span>
<span class="normal">275</span> <span class="normal">275</span>
<span class="normal">276</span> <span class="normal">276</span>
<span class="normal">277</span> <span class="normal">277</span>
<span class="normal">278</span> <span class="normal">278</span>
<span class="normal">279</span> <span class="normal">279</span>
<span class="normal">280</span> <span class="normal">280</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">beta</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="n">average</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">):</span>
<span class="normal">281</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">beta</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="n">average</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">):</span>
<span class="nb">super</span><span class="p">(</span><span class="n">FBetaScore</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">()</span> <span class="nb">super</span><span class="p">(</span><span class="n">FBetaScore</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">beta</span> <span class="o">=</span> <span class="n">beta</span> <span class="bp">self</span><span class="o">.</span><span class="n">beta</span> <span class="o">=</span> <span class="n">beta</span>
...@@ -1642,12 +1690,12 @@ for each label, and find their unweighted mean.</p> ...@@ -1642,12 +1690,12 @@ for each label, and find their unweighted mean.</p>
<details class="quote"> <details class="quote">
<summary>Source code in <code>pytorch_widedeep/metrics.py</code></summary> <summary>Source code in <code>pytorch_widedeep/metrics.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">283</span> <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">282</span>
<span class="normal">283</span>
<span class="normal">284</span> <span class="normal">284</span>
<span class="normal">285</span> <span class="normal">285</span>
<span class="normal">286</span> <span class="normal">286</span>
<span class="normal">287</span> <span class="normal">287</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">reset</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="normal">288</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">reset</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span> <span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> resets precision and recall</span> <span class="sd"> resets precision and recall</span>
<span class="sd"> &quot;&quot;&quot;</span> <span class="sd"> &quot;&quot;&quot;</span>
...@@ -1717,12 +1765,12 @@ each label, and find their unweighted mean.</p> ...@@ -1717,12 +1765,12 @@ each label, and find their unweighted mean.</p>
<details class="quote"> <details class="quote">
<summary>Source code in <code>pytorch_widedeep/metrics.py</code></summary> <summary>Source code in <code>pytorch_widedeep/metrics.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">332</span> <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">330</span>
<span class="normal">331</span>
<span class="normal">332</span>
<span class="normal">333</span> <span class="normal">333</span>
<span class="normal">334</span> <span class="normal">334</span>
<span class="normal">335</span> <span class="normal">335</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">average</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">):</span>
<span class="normal">336</span>
<span class="normal">337</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">average</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">):</span>
<span class="nb">super</span><span class="p">(</span><span class="n">F1Score</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">()</span> <span class="nb">super</span><span class="p">(</span><span class="n">F1Score</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">average</span> <span class="o">=</span> <span class="n">average</span> <span class="bp">self</span><span class="o">.</span><span class="n">average</span> <span class="o">=</span> <span class="n">average</span>
...@@ -1761,11 +1809,11 @@ each label, and find their unweighted mean.</p> ...@@ -1761,11 +1809,11 @@ each label, and find their unweighted mean.</p>
<details class="quote"> <details class="quote">
<summary>Source code in <code>pytorch_widedeep/metrics.py</code></summary> <summary>Source code in <code>pytorch_widedeep/metrics.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">339</span> <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">337</span>
<span class="normal">338</span>
<span class="normal">339</span>
<span class="normal">340</span> <span class="normal">340</span>
<span class="normal">341</span> <span class="normal">341</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">reset</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="normal">342</span>
<span class="normal">343</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">reset</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span> <span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> resets counters to 0</span> <span class="sd"> resets counters to 0</span>
<span class="sd"> &quot;&quot;&quot;</span> <span class="sd"> &quot;&quot;&quot;</span>
...@@ -1824,13 +1872,13 @@ R^2 = 1 - \frac{\sum_{j=1}^n(y_j - \hat{y_j})^2}{\sum_{j=1}^n(y_j - \bar{y})^2} ...@@ -1824,13 +1872,13 @@ R^2 = 1 - \frac{\sum_{j=1}^n(y_j - \hat{y_j})^2}{\sum_{j=1}^n(y_j - \bar{y})^2}
<details class="quote"> <details class="quote">
<summary>Source code in <code>pytorch_widedeep/metrics.py</code></summary> <summary>Source code in <code>pytorch_widedeep/metrics.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">374</span> <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">372</span>
<span class="normal">373</span>
<span class="normal">374</span>
<span class="normal">375</span> <span class="normal">375</span>
<span class="normal">376</span> <span class="normal">376</span>
<span class="normal">377</span> <span class="normal">377</span>
<span class="normal">378</span> <span class="normal">378</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="normal">379</span>
<span class="normal">380</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">numerator</span> <span class="o">=</span> <span class="mi">0</span> <span class="bp">self</span><span class="o">.</span><span class="n">numerator</span> <span class="o">=</span> <span class="mi">0</span>
<span class="bp">self</span><span class="o">.</span><span class="n">denominator</span> <span class="o">=</span> <span class="mi">0</span> <span class="bp">self</span><span class="o">.</span><span class="n">denominator</span> <span class="o">=</span> <span class="mi">0</span>
<span class="bp">self</span><span class="o">.</span><span class="n">num_examples</span> <span class="o">=</span> <span class="mi">0</span> <span class="bp">self</span><span class="o">.</span><span class="n">num_examples</span> <span class="o">=</span> <span class="mi">0</span>
...@@ -1870,14 +1918,14 @@ R^2 = 1 - \frac{\sum_{j=1}^n(y_j - \hat{y_j})^2}{\sum_{j=1}^n(y_j - \bar{y})^2} ...@@ -1870,14 +1918,14 @@ R^2 = 1 - \frac{\sum_{j=1}^n(y_j - \hat{y_j})^2}{\sum_{j=1}^n(y_j - \bar{y})^2}
<details class="quote"> <details class="quote">
<summary>Source code in <code>pytorch_widedeep/metrics.py</code></summary> <summary>Source code in <code>pytorch_widedeep/metrics.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">382</span> <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">380</span>
<span class="normal">381</span>
<span class="normal">382</span>
<span class="normal">383</span> <span class="normal">383</span>
<span class="normal">384</span> <span class="normal">384</span>
<span class="normal">385</span> <span class="normal">385</span>
<span class="normal">386</span> <span class="normal">386</span>
<span class="normal">387</span> <span class="normal">387</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">reset</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="normal">388</span>
<span class="normal">389</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">reset</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span> <span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> resets counters to 0</span> <span class="sd"> resets counters to 0</span>
<span class="sd"> &quot;&quot;&quot;</span> <span class="sd"> &quot;&quot;&quot;</span>
......
...@@ -112,6 +112,12 @@ self-supervised pre-training with tabular data. ...@@ -112,6 +112,12 @@ self-supervised pre-training with tabular data.
- "!^_" # exclude all members starting with _ - "!^_" # exclude all members starting with _
- "!^forward$" - "!^forward$"
::: pytorch_widedeep.models.text.basic_transformer.Transformer
selection:
filters:
- "!^_" # exclude all members starting with _
- "!^forward$"
::: pytorch_widedeep.models.image.vision.Vision ::: pytorch_widedeep.models.image.vision.Vision
selection: selection:
filters: filters:
......
...@@ -8,6 +8,8 @@ model component: ``wide``, ``deeptabular``, ``deepimage`` and ``deeptext``. ...@@ -8,6 +8,8 @@ model component: ``wide``, ``deeptabular``, ``deepimage`` and ``deeptext``.
::: pytorch_widedeep.preprocessing.tab_preprocessor.TabPreprocessor ::: pytorch_widedeep.preprocessing.tab_preprocessor.TabPreprocessor
::: pytorch_widedeep.preprocessing.tab_preprocessor.Quantizer
::: pytorch_widedeep.preprocessing.text_preprocessor.TextPreprocessor ::: pytorch_widedeep.preprocessing.text_preprocessor.TextPreprocessor
::: pytorch_widedeep.preprocessing.image_preprocessor.ImagePreprocessor ::: pytorch_widedeep.preprocessing.image_preprocessor.ImagePreprocessor
...@@ -798,6 +798,12 @@ ...@@ -798,6 +798,12 @@
...@@ -1071,6 +1077,48 @@ ...@@ -1071,6 +1077,48 @@
<li class="md-nav__item">
<a href="../examples/18_feature_importance_via_attention_weights.html" class="md-nav__link">
18_feature_importance_via_attention_weights
</a>
</li>
<li class="md-nav__item">
<a href="../examples/19_wide_and_deep_for_recsys_pt1.html" class="md-nav__link">
19_wide_and_deep_for_recsys_pt1
</a>
</li>
<li class="md-nav__item">
<a href="../examples/19_wide_and_deep_for_recsys_pt2.html" class="md-nav__link">
19_wide_and_deep_for_recsys_pt2
</a>
</li>
</ul> </ul>
</nav> </nav>
</li> </li>
...@@ -1620,7 +1668,8 @@ model's state dictionary</p> ...@@ -1620,7 +1668,8 @@ model's state dictionary</p>
<details class="quote"> <details class="quote">
<summary>Source code in <code>pytorch_widedeep/self_supervised_training/encoder_decoder_trainer.py</code></summary> <summary>Source code in <code>pytorch_widedeep/self_supervised_training/encoder_decoder_trainer.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">215</span> <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">214</span>
<span class="normal">215</span>
<span class="normal">216</span> <span class="normal">216</span>
<span class="normal">217</span> <span class="normal">217</span>
<span class="normal">218</span> <span class="normal">218</span>
...@@ -1657,8 +1706,7 @@ model's state dictionary</p> ...@@ -1657,8 +1706,7 @@ model's state dictionary</p>
<span class="normal">249</span> <span class="normal">249</span>
<span class="normal">250</span> <span class="normal">250</span>
<span class="normal">251</span> <span class="normal">251</span>
<span class="normal">252</span> <span class="normal">252</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">save</span><span class="p">(</span>
<span class="normal">253</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">save</span><span class="p">(</span>
<span class="bp">self</span><span class="p">,</span> <span class="bp">self</span><span class="p">,</span>
<span class="n">path</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">path</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
<span class="n">save_state_dict</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">save_state_dict</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
...@@ -2276,7 +2324,8 @@ model's state dictionary</p> ...@@ -2276,7 +2324,8 @@ model's state dictionary</p>
<details class="quote"> <details class="quote">
<summary>Source code in <code>pytorch_widedeep/self_supervised_training/contrastive_denoising_trainer.py</code></summary> <summary>Source code in <code>pytorch_widedeep/self_supervised_training/contrastive_denoising_trainer.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">263</span> <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">262</span>
<span class="normal">263</span>
<span class="normal">264</span> <span class="normal">264</span>
<span class="normal">265</span> <span class="normal">265</span>
<span class="normal">266</span> <span class="normal">266</span>
...@@ -2313,8 +2362,7 @@ model's state dictionary</p> ...@@ -2313,8 +2362,7 @@ model's state dictionary</p>
<span class="normal">297</span> <span class="normal">297</span>
<span class="normal">298</span> <span class="normal">298</span>
<span class="normal">299</span> <span class="normal">299</span>
<span class="normal">300</span> <span class="normal">300</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">save</span><span class="p">(</span>
<span class="normal">301</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">save</span><span class="p">(</span>
<span class="bp">self</span><span class="p">,</span> <span class="bp">self</span><span class="p">,</span>
<span class="n">path</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">path</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
<span class="n">save_state_dict</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">save_state_dict</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
......
...@@ -791,6 +791,12 @@ ...@@ -791,6 +791,12 @@
...@@ -1064,6 +1070,48 @@ ...@@ -1064,6 +1070,48 @@
<li class="md-nav__item">
<a href="../examples/18_feature_importance_via_attention_weights.html" class="md-nav__link">
18_feature_importance_via_attention_weights
</a>
</li>
<li class="md-nav__item">
<a href="../examples/19_wide_and_deep_for_recsys_pt1.html" class="md-nav__link">
19_wide_and_deep_for_recsys_pt1
</a>
</li>
<li class="md-nav__item">
<a href="../examples/19_wide_and_deep_for_recsys_pt2.html" class="md-nav__link">
19_wide_and_deep_for_recsys_pt2
</a>
</li>
</ul> </ul>
</nav> </nav>
</li> </li>
...@@ -1550,7 +1598,7 @@ same applies to dataframes in case we choose to set ...@@ -1550,7 +1598,7 @@ same applies to dataframes in case we choose to set
<span class="sd"> &quot;&quot;&quot;</span> <span class="sd"> &quot;&quot;&quot;</span>
<span class="n">X_tab</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">tab_preprocessor</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span><span class="n">df</span><span class="p">)</span> <span class="n">X_tab</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">tab_preprocessor</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span><span class="n">df</span><span class="p">)</span>
<span class="n">X</span> <span class="o">=</span> <span class="n">torch</span><span class="o">.</span><span class="n">from_numpy</span><span class="p">(</span><span class="n">X_tab</span><span class="p">)</span><span class="o">.</span><span class="n">to</span><span class="p">(</span><span class="n">device</span><span class="p">)</span> <span class="n">X</span> <span class="o">=</span> <span class="n">torch</span><span class="o">.</span><span class="n">from_numpy</span><span class="p">(</span><span class="n">X_tab</span><span class="o">.</span><span class="n">astype</span><span class="p">(</span><span class="s2">&quot;float&quot;</span><span class="p">))</span><span class="o">.</span><span class="n">to</span><span class="p">(</span><span class="n">device</span><span class="p">)</span>
<span class="k">with</span> <span class="n">torch</span><span class="o">.</span><span class="n">no_grad</span><span class="p">():</span> <span class="k">with</span> <span class="n">torch</span><span class="o">.</span><span class="n">no_grad</span><span class="p">():</span>
<span class="n">x_cat</span><span class="p">,</span> <span class="n">x_cont</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">vectorizer</span><span class="p">(</span><span class="n">X</span><span class="p">)</span> <span class="c1"># type: ignore[operator]</span> <span class="n">x_cat</span><span class="p">,</span> <span class="n">x_cont</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">vectorizer</span><span class="p">(</span><span class="n">X</span><span class="p">)</span> <span class="c1"># type: ignore[operator]</span>
......
...@@ -793,6 +793,12 @@ ...@@ -793,6 +793,12 @@
...@@ -1066,6 +1072,48 @@ ...@@ -1066,6 +1072,48 @@
<li class="md-nav__item">
<a href="../../examples/18_feature_importance_via_attention_weights.html" class="md-nav__link">
18_feature_importance_via_attention_weights
</a>
</li>
<li class="md-nav__item">
<a href="../../examples/19_wide_and_deep_for_recsys_pt1.html" class="md-nav__link">
19_wide_and_deep_for_recsys_pt1
</a>
</li>
<li class="md-nav__item">
<a href="../../examples/19_wide_and_deep_for_recsys_pt2.html" class="md-nav__link">
19_wide_and_deep_for_recsys_pt2
</a>
</li>
</ul> </ul>
</nav> </nav>
</li> </li>
......
...@@ -800,6 +800,12 @@ ...@@ -800,6 +800,12 @@
...@@ -1073,6 +1079,48 @@ ...@@ -1073,6 +1079,48 @@
<li class="md-nav__item">
<a href="../../examples/18_feature_importance_via_attention_weights.html" class="md-nav__link">
18_feature_importance_via_attention_weights
</a>
</li>
<li class="md-nav__item">
<a href="../../examples/19_wide_and_deep_for_recsys_pt1.html" class="md-nav__link">
19_wide_and_deep_for_recsys_pt1
</a>
</li>
<li class="md-nav__item">
<a href="../../examples/19_wide_and_deep_for_recsys_pt2.html" class="md-nav__link">
19_wide_and_deep_for_recsys_pt2
</a>
</li>
</ul> </ul>
</nav> </nav>
</li> </li>
...@@ -1478,9 +1526,9 @@ their corresponding index</p> ...@@ -1478,9 +1526,9 @@ their corresponding index</p>
<details class="quote"> <details class="quote">
<summary>Source code in <code>pytorch_widedeep/utils/fastai_transforms.py</code></summary> <summary>Source code in <code>pytorch_widedeep/utils/fastai_transforms.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">357</span> <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">358</span>
<span class="normal">358</span> <span class="normal">359</span>
<span class="normal">359</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">itos</span><span class="p">:</span> <span class="n">Collection</span><span class="p">[</span><span class="nb">str</span><span class="p">]):</span> <span class="normal">360</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">itos</span><span class="p">:</span> <span class="n">Collection</span><span class="p">[</span><span class="nb">str</span><span class="p">]):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">itos</span> <span class="o">=</span> <span class="n">itos</span> <span class="bp">self</span><span class="o">.</span><span class="n">itos</span> <span class="o">=</span> <span class="n">itos</span>
<span class="bp">self</span><span class="o">.</span><span class="n">stoi</span> <span class="o">=</span> <span class="n">defaultdict</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="p">{</span><span class="n">v</span><span class="p">:</span> <span class="n">k</span> <span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">itos</span><span class="p">)})</span> <span class="bp">self</span><span class="o">.</span><span class="n">stoi</span> <span class="o">=</span> <span class="n">defaultdict</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="p">{</span><span class="n">v</span><span class="p">:</span> <span class="n">k</span> <span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">itos</span><span class="p">)})</span>
</code></pre></div></td></tr></table></div> </code></pre></div></td></tr></table></div>
...@@ -1524,15 +1572,15 @@ their corresponding index</p> ...@@ -1524,15 +1572,15 @@ their corresponding index</p>
<details class="quote"> <details class="quote">
<summary>Source code in <code>pytorch_widedeep/utils/fastai_transforms.py</code></summary> <summary>Source code in <code>pytorch_widedeep/utils/fastai_transforms.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">361</span> <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">362</span>
<span class="normal">362</span>
<span class="normal">363</span> <span class="normal">363</span>
<span class="normal">364</span> <span class="normal">364</span>
<span class="normal">365</span> <span class="normal">365</span>
<span class="normal">366</span> <span class="normal">366</span>
<span class="normal">367</span> <span class="normal">367</span>
<span class="normal">368</span> <span class="normal">368</span>
<span class="normal">369</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">numericalize</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">t</span><span class="p">:</span> <span class="n">Collection</span><span class="p">[</span><span class="nb">str</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">]:</span> <span class="normal">369</span>
<span class="normal">370</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">numericalize</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">t</span><span class="p">:</span> <span class="n">Collection</span><span class="p">[</span><span class="nb">str</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">]:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Convert a list of tokens ``t`` to their ids.</span> <span class="w"> </span><span class="sd">&quot;&quot;&quot;Convert a list of tokens ``t`` to their ids.</span>
<span class="sd"> Returns</span> <span class="sd"> Returns</span>
...@@ -1573,15 +1621,15 @@ their corresponding index</p> ...@@ -1573,15 +1621,15 @@ their corresponding index</p>
<details class="quote"> <details class="quote">
<summary>Source code in <code>pytorch_widedeep/utils/fastai_transforms.py</code></summary> <summary>Source code in <code>pytorch_widedeep/utils/fastai_transforms.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">371</span> <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">372</span>
<span class="normal">372</span>
<span class="normal">373</span> <span class="normal">373</span>
<span class="normal">374</span> <span class="normal">374</span>
<span class="normal">375</span> <span class="normal">375</span>
<span class="normal">376</span> <span class="normal">376</span>
<span class="normal">377</span> <span class="normal">377</span>
<span class="normal">378</span> <span class="normal">378</span>
<span class="normal">379</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">textify</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nums</span><span class="p">:</span> <span class="n">Collection</span><span class="p">[</span><span class="nb">int</span><span class="p">],</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span> <span class="normal">379</span>
<span class="normal">380</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">textify</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nums</span><span class="p">:</span> <span class="n">Collection</span><span class="p">[</span><span class="nb">int</span><span class="p">],</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Convert a list of ``nums`` (or indexes) to their tokens.</span> <span class="w"> </span><span class="sd">&quot;&quot;&quot;Convert a list of ``nums`` (or indexes) to their tokens.</span>
<span class="sd"> Returns</span> <span class="sd"> Returns</span>
...@@ -1614,9 +1662,9 @@ their corresponding index</p> ...@@ -1614,9 +1662,9 @@ their corresponding index</p>
<details class="quote"> <details class="quote">
<summary>Source code in <code>pytorch_widedeep/utils/fastai_transforms.py</code></summary> <summary>Source code in <code>pytorch_widedeep/utils/fastai_transforms.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">388</span> <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">389</span>
<span class="normal">389</span> <span class="normal">390</span>
<span class="normal">390</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">save</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">path</span><span class="p">):</span> <span class="normal">391</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">save</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">path</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Save the attribute ``self.itos`` in ``path``&quot;&quot;&quot;</span> <span class="w"> </span><span class="sd">&quot;&quot;&quot;Save the attribute ``self.itos`` in ``path``&quot;&quot;&quot;</span>
<span class="n">pickle</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">itos</span><span class="p">,</span> <span class="nb">open</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="s2">&quot;wb&quot;</span><span class="p">))</span> <span class="n">pickle</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">itos</span><span class="p">,</span> <span class="nb">open</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="s2">&quot;wb&quot;</span><span class="p">))</span>
</code></pre></div></td></tr></table></div> </code></pre></div></td></tr></table></div>
...@@ -1638,7 +1686,7 @@ their corresponding index</p> ...@@ -1638,7 +1686,7 @@ their corresponding index</p>
</span> </span>
<a href="#pytorch_widedeep.utils.fastai_transforms.Vocab.create" class="headerlink" title="Permanent link">&para;</a></h3> <a href="#pytorch_widedeep.utils.fastai_transforms.Vocab.create" class="headerlink" title="Permanent link">&para;</a></h3>
<div class="highlight"><pre><span></span><code><span class="n">create</span><span class="p">(</span><span class="n">tokens</span><span class="p">,</span> <span class="n">max_vocab</span><span class="p">,</span> <span class="n">min_freq</span><span class="p">)</span> <div class="highlight"><pre><span></span><code><span class="n">create</span><span class="p">(</span><span class="n">tokens</span><span class="p">,</span> <span class="n">max_vocab</span><span class="p">,</span> <span class="n">min_freq</span><span class="p">,</span> <span class="n">pad_idx</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span>
</code></pre></div> </code></pre></div>
<div class="doc doc-contents "> <div class="doc doc-contents ">
...@@ -1660,10 +1708,11 @@ strings (e.g. list of tokenized sentences)</p> ...@@ -1660,10 +1708,11 @@ strings (e.g. list of tokenized sentences)</p>
<p>maximum vocabulary size</p> <p>maximum vocabulary size</p>
</li> </li>
<li class="field-body"> <li class="field-body">
<b>min_freq</b> <b>pad_idx</b>
(<code>int</code>) (<code><span title="pytorch_widedeep.wdtypes.Optional">Optional</span>[int]</code>)
<p>minimum frequency that a token has to appear to be part of the <p>padding index. If <code>None</code>, Fastai's Tokenizer leaves the 0 index
vocabulary</p> for the unknown token (<em>'xxunk'</em>) and defaults to 1 for the padding
token (<em>'xxpad'</em>).</p>
</li> </li>
</ul> </ul>
...@@ -1692,8 +1741,7 @@ classification/Regression tasks. Please see the <a href="https://docs.fast.ai/te ...@@ -1692,8 +1741,7 @@ classification/Regression tasks. Please see the <a href="https://docs.fast.ai/te
<details class="quote"> <details class="quote">
<summary>Source code in <code>pytorch_widedeep/utils/fastai_transforms.py</code></summary> <summary>Source code in <code>pytorch_widedeep/utils/fastai_transforms.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">392</span> <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">393</span>
<span class="normal">393</span>
<span class="normal">394</span> <span class="normal">394</span>
<span class="normal">395</span> <span class="normal">395</span>
<span class="normal">396</span> <span class="normal">396</span>
...@@ -1741,8 +1789,28 @@ classification/Regression tasks. Please see the <a href="https://docs.fast.ai/te ...@@ -1741,8 +1789,28 @@ classification/Regression tasks. Please see the <a href="https://docs.fast.ai/te
<span class="normal">438</span> <span class="normal">438</span>
<span class="normal">439</span> <span class="normal">439</span>
<span class="normal">440</span> <span class="normal">440</span>
<span class="normal">441</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="nd">@classmethod</span> <span class="normal">441</span>
<span class="k">def</span> <span class="nf">create</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">tokens</span><span class="p">:</span> <span class="n">Tokens</span><span class="p">,</span> <span class="n">max_vocab</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="n">min_freq</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="s2">&quot;Vocab&quot;</span><span class="p">:</span> <span class="normal">442</span>
<span class="normal">443</span>
<span class="normal">444</span>
<span class="normal">445</span>
<span class="normal">446</span>
<span class="normal">447</span>
<span class="normal">448</span>
<span class="normal">449</span>
<span class="normal">450</span>
<span class="normal">451</span>
<span class="normal">452</span>
<span class="normal">453</span>
<span class="normal">454</span>
<span class="normal">455</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="nd">@classmethod</span>
<span class="k">def</span> <span class="nf">create</span><span class="p">(</span>
<span class="bp">cls</span><span class="p">,</span>
<span class="n">tokens</span><span class="p">:</span> <span class="n">Tokens</span><span class="p">,</span>
<span class="n">max_vocab</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span>
<span class="n">min_freq</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span>
<span class="n">pad_idx</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">int</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
<span class="p">)</span> <span class="o">-&gt;</span> <span class="s2">&quot;Vocab&quot;</span><span class="p">:</span>
<span class="w"> </span><span class="sa">r</span><span class="sd">&quot;&quot;&quot;Create a vocabulary object from a set of tokens.</span> <span class="w"> </span><span class="sa">r</span><span class="sd">&quot;&quot;&quot;Create a vocabulary object from a set of tokens.</span>
<span class="sd"> Parameters</span> <span class="sd"> Parameters</span>
...@@ -1753,9 +1821,10 @@ classification/Regression tasks. Please see the <a href="https://docs.fast.ai/te ...@@ -1753,9 +1821,10 @@ classification/Regression tasks. Please see the <a href="https://docs.fast.ai/te
<span class="sd"> strings (e.g. list of tokenized sentences)</span> <span class="sd"> strings (e.g. list of tokenized sentences)</span>
<span class="sd"> max_vocab: int</span> <span class="sd"> max_vocab: int</span>
<span class="sd"> maximum vocabulary size</span> <span class="sd"> maximum vocabulary size</span>
<span class="sd"> min_freq: int</span> <span class="sd"> pad_idx: int, Optional, default = None</span>
<span class="sd"> minimum frequency that a token has to appear to be part of the</span> <span class="sd"> padding index. If `None`, Fastai&#39;s Tokenizer leaves the 0 index</span>
<span class="sd"> vocabulary</span> <span class="sd"> for the unknown token (_&#39;xxunk&#39;_) and defaults to 1 for the padding</span>
<span class="sd"> token (_&#39;xxpad&#39;_).</span>
<span class="sd"> Examples</span> <span class="sd"> Examples</span>
<span class="sd"> --------</span> <span class="sd"> --------</span>
...@@ -1778,12 +1847,18 @@ classification/Regression tasks. Please see the <a href="https://docs.fast.ai/te ...@@ -1778,12 +1847,18 @@ classification/Regression tasks. Please see the <a href="https://docs.fast.ai/te
<span class="sd"> Vocab</span> <span class="sd"> Vocab</span>
<span class="sd"> An instance of a `Vocab` object</span> <span class="sd"> An instance of a `Vocab` object</span>
<span class="sd"> &quot;&quot;&quot;</span> <span class="sd"> &quot;&quot;&quot;</span>
<span class="n">freq</span> <span class="o">=</span> <span class="n">Counter</span><span class="p">(</span><span class="n">p</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">tokens</span> <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">o</span><span class="p">)</span> <span class="n">freq</span> <span class="o">=</span> <span class="n">Counter</span><span class="p">(</span><span class="n">p</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">tokens</span> <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">o</span><span class="p">)</span>
<span class="n">itos</span> <span class="o">=</span> <span class="p">[</span><span class="n">o</span> <span class="k">for</span> <span class="n">o</span><span class="p">,</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">freq</span><span class="o">.</span><span class="n">most_common</span><span class="p">(</span><span class="n">max_vocab</span><span class="p">)</span> <span class="k">if</span> <span class="n">c</span> <span class="o">&gt;=</span> <span class="n">min_freq</span><span class="p">]</span> <span class="n">itos</span> <span class="o">=</span> <span class="p">[</span><span class="n">o</span> <span class="k">for</span> <span class="n">o</span><span class="p">,</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">freq</span><span class="o">.</span><span class="n">most_common</span><span class="p">(</span><span class="n">max_vocab</span><span class="p">)</span> <span class="k">if</span> <span class="n">c</span> <span class="o">&gt;=</span> <span class="n">min_freq</span><span class="p">]</span>
<span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="nb">reversed</span><span class="p">(</span><span class="n">defaults</span><span class="o">.</span><span class="n">text_spec_tok</span><span class="p">):</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="nb">reversed</span><span class="p">(</span><span class="n">defaults</span><span class="o">.</span><span class="n">text_spec_tok</span><span class="p">):</span>
<span class="k">if</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">itos</span><span class="p">:</span> <span class="k">if</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">itos</span><span class="p">:</span>
<span class="n">itos</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">o</span><span class="p">)</span> <span class="n">itos</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">o</span><span class="p">)</span>
<span class="n">itos</span><span class="o">.</span><span class="n">insert</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">o</span><span class="p">)</span> <span class="n">itos</span><span class="o">.</span><span class="n">insert</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">o</span><span class="p">)</span>
<span class="k">if</span> <span class="n">pad_idx</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">itos</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">PAD</span><span class="p">)</span>
<span class="n">itos</span><span class="o">.</span><span class="n">insert</span><span class="p">(</span><span class="n">pad_idx</span><span class="p">,</span> <span class="n">PAD</span><span class="p">)</span>
<span class="n">itos</span> <span class="o">=</span> <span class="n">itos</span><span class="p">[:</span><span class="n">max_vocab</span><span class="p">]</span> <span class="n">itos</span> <span class="o">=</span> <span class="n">itos</span><span class="p">[:</span><span class="n">max_vocab</span><span class="p">]</span>
<span class="k">if</span> <span class="p">(</span> <span class="k">if</span> <span class="p">(</span>
<span class="nb">len</span><span class="p">(</span><span class="n">itos</span><span class="p">)</span> <span class="o">&lt;</span> <span class="n">max_vocab</span> <span class="nb">len</span><span class="p">(</span><span class="n">itos</span><span class="p">)</span> <span class="o">&lt;</span> <span class="n">max_vocab</span>
...@@ -1819,11 +1894,11 @@ classification/Regression tasks. Please see the <a href="https://docs.fast.ai/te ...@@ -1819,11 +1894,11 @@ classification/Regression tasks. Please see the <a href="https://docs.fast.ai/te
<details class="quote"> <details class="quote">
<summary>Source code in <code>pytorch_widedeep/utils/fastai_transforms.py</code></summary> <summary>Source code in <code>pytorch_widedeep/utils/fastai_transforms.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">443</span> <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">457</span>
<span class="normal">444</span> <span class="normal">458</span>
<span class="normal">445</span> <span class="normal">459</span>
<span class="normal">446</span> <span class="normal">460</span>
<span class="normal">447</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="nd">@classmethod</span> <span class="normal">461</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="nd">@classmethod</span>
<span class="k">def</span> <span class="nf">load</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">path</span><span class="p">):</span> <span class="k">def</span> <span class="nf">load</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">path</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Load an intance of :obj:`Vocab` contained in ``path``&quot;&quot;&quot;</span> <span class="w"> </span><span class="sd">&quot;&quot;&quot;Load an intance of :obj:`Vocab` contained in ``path``&quot;&quot;&quot;</span>
<span class="n">itos</span> <span class="o">=</span> <span class="n">pickle</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="nb">open</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="s2">&quot;rb&quot;</span><span class="p">))</span> <span class="n">itos</span> <span class="o">=</span> <span class="n">pickle</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="nb">open</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="s2">&quot;rb&quot;</span><span class="p">))</span>
......
...@@ -800,6 +800,12 @@ ...@@ -800,6 +800,12 @@
...@@ -1073,6 +1079,48 @@ ...@@ -1073,6 +1079,48 @@
<li class="md-nav__item">
<a href="../../examples/18_feature_importance_via_attention_weights.html" class="md-nav__link">
18_feature_importance_via_attention_weights
</a>
</li>
<li class="md-nav__item">
<a href="../../examples/19_wide_and_deep_for_recsys_pt1.html" class="md-nav__link">
19_wide_and_deep_for_recsys_pt1
</a>
</li>
<li class="md-nav__item">
<a href="../../examples/19_wide_and_deep_for_recsys_pt2.html" class="md-nav__link">
19_wide_and_deep_for_recsys_pt2
</a>
</li>
</ul> </ul>
</nav> </nav>
</li> </li>
......
...@@ -752,6 +752,12 @@ ...@@ -752,6 +752,12 @@
...@@ -1025,6 +1031,48 @@ ...@@ -1025,6 +1031,48 @@
<li class="md-nav__item">
<a href="../../examples/18_feature_importance_via_attention_weights.html" class="md-nav__link">
18_feature_importance_via_attention_weights
</a>
</li>
<li class="md-nav__item">
<a href="../../examples/19_wide_and_deep_for_recsys_pt1.html" class="md-nav__link">
19_wide_and_deep_for_recsys_pt1
</a>
</li>
<li class="md-nav__item">
<a href="../../examples/19_wide_and_deep_for_recsys_pt2.html" class="md-nav__link">
19_wide_and_deep_for_recsys_pt2
</a>
</li>
</ul> </ul>
</nav> </nav>
</li> </li>
......
...@@ -758,6 +758,12 @@ ...@@ -758,6 +758,12 @@
...@@ -1031,6 +1037,48 @@ ...@@ -1031,6 +1037,48 @@
<li class="md-nav__item">
<a href="examples/18_feature_importance_via_attention_weights.html" class="md-nav__link">
18_feature_importance_via_attention_weights
</a>
</li>
<li class="md-nav__item">
<a href="examples/19_wide_and_deep_for_recsys_pt1.html" class="md-nav__link">
19_wide_and_deep_for_recsys_pt1
</a>
</li>
<li class="md-nav__item">
<a href="examples/19_wide_and_deep_for_recsys_pt2.html" class="md-nav__link">
19_wide_and_deep_for_recsys_pt2
</a>
</li>
</ul> </ul>
</nav> </nav>
</li> </li>
......
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册