YUVALON commited on
Commit
85bcd80
Β·
verified Β·
1 Parent(s): eaed319

Update train_model.py

Browse files
Files changed (1) hide show
  1. 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 from secret
13
  hf_token = os.environ.get("data3")
14
  if not hf_token:
15
- raise ValueError("Hugging Face token not found. Make sure 'data3' is set in your Space secrets.")
16
 
17
- # βœ… 2. Authenticate
18
  login(token=hf_token)
19
 
20
- # βœ… 3. Load structured caption dataset
 
 
 
21
  df = pd.read_csv("custom_captions.csv")
22
 
23
- # βœ… 4. Build training prompt
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
- # βœ… 5. Combine prompt + final caption
33
  df["text"] = df.apply(lambda row: to_prompt(row) + row["caption"], axis=1)
34
 
35
- # βœ… 6. Convert to Hugging Face Dataset
36
  dataset = Dataset.from_pandas(df[["text"]])
37
 
38
- # βœ… 7. Load tokenizer and base model
39
  tokenizer = AutoTokenizer.from_pretrained("gpt2")
40
- tokenizer.pad_token = tokenizer.eos_token # Avoids padding issues
41
  model = AutoModelForCausalLM.from_pretrained("gpt2")
42
 
43
- # βœ… 8. Tokenize training text
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
- # βœ… 9. Data collator (for causal LM)
50
  data_collator = DataCollatorForLanguageModeling(tokenizer=tokenizer, mlm=False)
51
 
52
- # βœ… 10. Training configuration β€” using your model repo
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="yuvalon/caption-crafter-model", # βœ… Match the repo you created manually
60
  hub_token=hf_token
61
  )
62
 
63
- # βœ… 11. Trainer setup
64
  trainer = Trainer(
65
  model=model,
66
  args=training_args,
@@ -69,6 +72,6 @@ trainer = Trainer(
69
  data_collator=data_collator
70
  )
71
 
72
- # βœ… 12. Train and upload to Hugging Face
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()