poutyne-transformers
Train 🤗-transformers models with Poutyne.
Installation
pip install poutyne-transformers
Example
import torch
from transformers import AutoModelForSequenceClassification, AutoTokenizer
from datasets import load_dataset
from torch.utils.data import DataLoader
from torch import optim
from poutyne import Model, Accuracy
from poutyne_transformers import (
TransformerCollator,
model_loss,
ModelWrapper,
MetricWrapper,
)
print("Loading model & tokenizer.")
transformer = AutoModelForSequenceClassification.from_pretrained(
"distilbert-base-cased", num_labels=2, return_dict=True
)
tokenizer = AutoTokenizer.from_pretrained("distilbert-base-cased")
print("Loading & preparing dataset.")
dataset = load_dataset("imdb")
dataset = dataset.map(
lambda entry: tokenizer(
entry["text"], add_special_tokens=True, padding="max_length", truncation=True
),
batched=True,
)
dataset = dataset.remove_columns(["text"])
dataset = dataset.shuffle()
dataset.set_format("torch")
collate_fn = TransformerCollator(y_keys="labels")
train_dataloader = DataLoader(dataset["train"], batch_size=16, collate_fn=collate_fn)
test_dataloader = DataLoader(dataset["test"], batch_size=16, collate_fn=collate_fn)
print("Preparing training.")
wrapped_transformer = ModelWrapper(transformer)
optimizer = optim.AdamW(wrapped_transformer.parameters(), lr=5e-5)
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
accuracy = MetricWrapper(Accuracy(), pred_key="logits")
model = Model(
wrapped_transformer,
optimizer,
loss_function=model_loss,
batch_metrics=[accuracy],
device=device,
)
print("Starting training.")
model.fit_generator(train_dataloader, test_dataloader, epochs=1)
You can also create models with a custom architecture using torch.nn.Sequential class:
from torch import nn
from transformers import AutoModel
from poutyne import Lambda
from poutyne_transformers import ModelWrapper
...
transformer = AutoModel.from_pretrained(
"distilbert-base-cased", output_hidden_states=True
)
custom_model = nn.Sequential(
ModelWrapper(transformer),
# Use distilberts [CLS] token for classification.
Lambda(lambda outputs: outputs["last_hidden_state"][:, 0, :]),
nn.Linear(in_features=transformer.config.hidden_size, out_features=1),
Lambda(lambda out: out.reshape(-1)),
)
...
Metadata
Release files for poutyne-transformers 0.1.0.4.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| poutyne-transformers-0.1.0.4.1.tar.gz | 7.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| poutyne_transformers-0.1.0.4.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 16.1 kB
Release files / poutyne-transformers-0.1.0.4.1.tar.gz
| Download URL | poutyne-transformers-0.1.0.4.1.tar.gz |
|---|---|
| Size | 7.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
01c929c72d9952f74715bc3f48bd9393313821682ec9da31a60544c93fda042a
|
|
BLAKE2b-256 checksum How to use checksums |
9a7a59561c4a6c3c54841eafa6f61c06462c2b35674ba7c6fed7175d7dfa190f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/1.1.10 CPython/3.9.7 Darwin/20.6.0
|
Release files / poutyne_transformers-0.1.0.4.1-py3-none-any.whl
| Download URL | poutyne_transformers-0.1.0.4.1-py3-none-any.whl |
|---|---|
| Size | 8.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
758551dbedd454056054a7e6839e1154dd033ad539d9d06de8b8c90b7f4a0b81
|
|
BLAKE2b-256 checksum How to use checksums |
1b23834edbd39594594ce81153f2d47ee9a96fd379acb681446397ace00e19f6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/1.1.10 CPython/3.9.7 Darwin/20.6.0
|