Update train_model.py
Browse files- train_model.py +19 -16
train_model.py
CHANGED
|
@@ -1,6 +1,6 @@
|
|
| 1 |
import os
|
| 2 |
import pandas as pd
|
| 3 |
-
from huggingface_hub import login
|
| 4 |
from datasets import Dataset
|
| 5 |
|
| 6 |
from transformers import (
|
|
@@ -9,18 +9,21 @@ from transformers import (
|
|
| 9 |
DataCollatorForLanguageModeling
|
| 10 |
)
|
| 11 |
|
| 12 |
-
# β
1. Load Hugging Face token
|
| 13 |
hf_token = os.environ.get("data3")
|
| 14 |
if not hf_token:
|
| 15 |
-
raise ValueError("
|
| 16 |
|
| 17 |
-
# β
2.
|
| 18 |
login(token=hf_token)
|
| 19 |
|
| 20 |
-
# β
3.
|
|
|
|
|
|
|
|
|
|
| 21 |
df = pd.read_csv("custom_captions.csv")
|
| 22 |
|
| 23 |
-
# β
|
| 24 |
def to_prompt(row):
|
| 25 |
return f"""Photo: {row['photo']}
|
| 26 |
Scenery: {row['scenery']}
|
|
@@ -29,38 +32,38 @@ Vibe to convey: {row['desired_vibe']}
|
|
| 29 |
Captions user likes: "{row['liked_captions']}"
|
| 30 |
"""
|
| 31 |
|
| 32 |
-
# β
|
| 33 |
df["text"] = df.apply(lambda row: to_prompt(row) + row["caption"], axis=1)
|
| 34 |
|
| 35 |
-
# β
|
| 36 |
dataset = Dataset.from_pandas(df[["text"]])
|
| 37 |
|
| 38 |
-
# β
|
| 39 |
tokenizer = AutoTokenizer.from_pretrained("gpt2")
|
| 40 |
-
tokenizer.pad_token = tokenizer.eos_token #
|
| 41 |
model = AutoModelForCausalLM.from_pretrained("gpt2")
|
| 42 |
|
| 43 |
-
# β
|
| 44 |
def tokenize(example):
|
| 45 |
return tokenizer(example["text"], truncation=True, padding="max_length", max_length=64)
|
| 46 |
|
| 47 |
tokenized = dataset.map(tokenize, batched=True)
|
| 48 |
|
| 49 |
-
# β
|
| 50 |
data_collator = DataCollatorForLanguageModeling(tokenizer=tokenizer, mlm=False)
|
| 51 |
|
| 52 |
-
# β
|
| 53 |
training_args = TrainingArguments(
|
| 54 |
output_dir="./results",
|
| 55 |
per_device_train_batch_size=2,
|
| 56 |
num_train_epochs=1,
|
| 57 |
save_strategy="epoch",
|
| 58 |
push_to_hub=True,
|
| 59 |
-
hub_model_id="
|
| 60 |
hub_token=hf_token
|
| 61 |
)
|
| 62 |
|
| 63 |
-
# β
|
| 64 |
trainer = Trainer(
|
| 65 |
model=model,
|
| 66 |
args=training_args,
|
|
@@ -69,6 +72,6 @@ trainer = Trainer(
|
|
| 69 |
data_collator=data_collator
|
| 70 |
)
|
| 71 |
|
| 72 |
-
# β
|
| 73 |
trainer.train()
|
| 74 |
trainer.push_to_hub()
|
|
|
|
| 1 |
import os
|
| 2 |
import pandas as pd
|
| 3 |
+
from huggingface_hub import login, whoami
|
| 4 |
from datasets import Dataset
|
| 5 |
|
| 6 |
from transformers import (
|
|
|
|
| 9 |
DataCollatorForLanguageModeling
|
| 10 |
)
|
| 11 |
|
| 12 |
+
# β
1. Load Hugging Face token securely
|
| 13 |
hf_token = os.environ.get("data3")
|
| 14 |
if not hf_token:
|
| 15 |
+
raise ValueError("Missing HF token. Set 'data3' as a secret in your Space.")
|
| 16 |
|
| 17 |
+
# β
2. Log in to Hugging Face
|
| 18 |
login(token=hf_token)
|
| 19 |
|
| 20 |
+
# β
3. Get your username dynamically
|
| 21 |
+
username = whoami(token=hf_token)["name"]
|
| 22 |
+
|
| 23 |
+
# β
4. Load your caption data
|
| 24 |
df = pd.read_csv("custom_captions.csv")
|
| 25 |
|
| 26 |
+
# β
5. Format training prompt
|
| 27 |
def to_prompt(row):
|
| 28 |
return f"""Photo: {row['photo']}
|
| 29 |
Scenery: {row['scenery']}
|
|
|
|
| 32 |
Captions user likes: "{row['liked_captions']}"
|
| 33 |
"""
|
| 34 |
|
| 35 |
+
# β
6. Create training text
|
| 36 |
df["text"] = df.apply(lambda row: to_prompt(row) + row["caption"], axis=1)
|
| 37 |
|
| 38 |
+
# β
7. Convert to Hugging Face Dataset
|
| 39 |
dataset = Dataset.from_pandas(df[["text"]])
|
| 40 |
|
| 41 |
+
# β
8. Load tokenizer & model
|
| 42 |
tokenizer = AutoTokenizer.from_pretrained("gpt2")
|
| 43 |
+
tokenizer.pad_token = tokenizer.eos_token # Avoid padding issues
|
| 44 |
model = AutoModelForCausalLM.from_pretrained("gpt2")
|
| 45 |
|
| 46 |
+
# β
9. Tokenize
|
| 47 |
def tokenize(example):
|
| 48 |
return tokenizer(example["text"], truncation=True, padding="max_length", max_length=64)
|
| 49 |
|
| 50 |
tokenized = dataset.map(tokenize, batched=True)
|
| 51 |
|
| 52 |
+
# β
10. Prepare data collator
|
| 53 |
data_collator = DataCollatorForLanguageModeling(tokenizer=tokenizer, mlm=False)
|
| 54 |
|
| 55 |
+
# β
11. Set training arguments
|
| 56 |
training_args = TrainingArguments(
|
| 57 |
output_dir="./results",
|
| 58 |
per_device_train_batch_size=2,
|
| 59 |
num_train_epochs=1,
|
| 60 |
save_strategy="epoch",
|
| 61 |
push_to_hub=True,
|
| 62 |
+
hub_model_id=f"{username}/caption-crafter-model", # β
Dynamic and safe
|
| 63 |
hub_token=hf_token
|
| 64 |
)
|
| 65 |
|
| 66 |
+
# β
12. Trainer setup
|
| 67 |
trainer = Trainer(
|
| 68 |
model=model,
|
| 69 |
args=training_args,
|
|
|
|
| 72 |
data_collator=data_collator
|
| 73 |
)
|
| 74 |
|
| 75 |
+
# β
13. Train and upload to Hugging Face Hub
|
| 76 |
trainer.train()
|
| 77 |
trainer.push_to_hub()
|