shadow-docket / plot_results.py
Disha-Singh-Singraur's picture
Upload folder using huggingface_hub
defa0da verified
Raw
History Blame Contribute Delete
2.86 kB
import json
import matplotlib.pyplot as plt
from pathlib import Path
def plot_training_results(model_dir="./rulebreaker_model"):
"""
Reads the trainer_state.json saved by Hugging Face TRL
and plots the reward curve.
"""
state_path = Path(model_dir) / "trainer_state.json"
if not state_path.exists():
print(f"Could not find {state_path}.")
print("Make sure the training has finished and saved the model!")
return
# Load the training logs
with open(state_path, "r") as f:
state = json.load(f)
log_history = state.get("log_history", [])
steps = []
rewards = []
# Extract step and reward from the logs
for log in log_history:
if "reward" in log and "step" in log:
steps.append(log["step"])
rewards.append(log["reward"])
if not steps:
print("No reward data found in the logs.")
return
# Try to load baselines from training_logs/baselines.json
random_baseline = None
greedy_baseline = None
baselines_path = Path("./training_logs/baselines.json")
if baselines_path.exists():
try:
with open(baselines_path, "r") as f:
baselines = json.load(f)
random_baseline = baselines.get("random", {}).get("avg_lawyer_reward")
greedy_baseline = baselines.get("greedy", {}).get("avg_lawyer_reward")
print(f"Loaded baselines from {baselines_path}")
except (json.JSONDecodeError, KeyError) as e:
print(f"Warning: Could not load baselines: {e}")
# Create a beautiful plot
plt.figure(figsize=(10, 6))
plt.plot(steps, rewards, marker='o', linestyle='-', color='#1f77b4', linewidth=2, markersize=6)
# Add titles and labels
plt.title('RL Training Progress: Lawyer Agent Reward', fontsize=16, fontweight='bold', pad=20)
plt.xlabel('Training Steps', fontsize=12)
plt.ylabel('Average Reward', fontsize=12)
# Add baseline references (from file or hardcoded fallback)
rand_val = random_baseline if random_baseline is not None else 0.037
greed_val = greedy_baseline if greedy_baseline is not None else 0.996
plt.axhline(y=rand_val, color='red', linestyle='--', alpha=0.5, label=f'Random Baseline (~{rand_val:.2f})')
plt.axhline(y=greed_val, color='green', linestyle='--', alpha=0.5, label=f'Greedy Baseline (~{greed_val:.2f})')
plt.grid(True, linestyle='--', alpha=0.7)
plt.legend(loc='lower right', fontsize=10)
# Save the plot
output_file = "reward_curve.png"
plt.savefig(output_file, dpi=300, bbox_inches='tight')
print(f"✅ Successfully created graph: {output_file}")
try:
plt.show() # Will display inline if run in Colab
except Exception:
pass
if __name__ == "__main__":
plot_training_results()