| # plot_convergence.py β Analysis and Visualisation Script | |
| This document provides a comprehensive technical reference for plot_convergence.py. This script serves as the primary analytics engine, transforming JSON telemetry logs produced by your execution runner (run_mvp.py) into publication-quality research figures. | |
| Reads accuracy_log.json produced by run_mvp.py and generates three publication-quality figures: | |
| Figure 1 β convergence_plot.png (2 panels) | |
| Panel 1: Global accuracy over rounds β haflq vs baseline | |
| Panel 2: Aggregated weight delta Frobenius norm (β£β£ΞWβ£β£Fβ) β haflq vs baseline | |
| Figure 2 β extended_metrics_plot.png (4 panels) | |
| Panel 1: Per-round communication cost β haflq vs baseline | |
| Panel 2: Cumulative communication cost β with bandwidth-saved fill | |
| Panel 3: Parameters discarded per round due to edge transport limits | |
| Panel 4: Accuracy per MB of communication (efficiency ratio) | |
| Figure 3 β loss_throughput_metrics.png (3 panels) | |
| Panel 1: Global convergence losses β Training vs. Validation curves | |
| Panel 2: Per-client loss variance β Visualizing non-IID data distribution trends | |
| Panel 3: On-device token throughput β Hardware processing speed (tokens/sec) | |
| Every number in every panel comes directly from accuracy_log.json. Nothing is fabricated or randomly generated at the visualization layer. | |
| ## Usage | |
| Bash | |
| python plot_convergence.py | |
| python plot_convergence.py --input path/to/accuracy_log.json | |
| python plot_convergence.py --input path/to/log.json --outdir results/plots | |
| ## Dependencies | |
| Bash | |
| pip install matplotlib numpy | |
| ## Architectural Overview | |
| The script abstracts the visualization layer from the training loop. It parses empirical telemetry data, applies multi-version schema normalization, isolates system metrics, and generates high-density figures matching academic publication standards. | |
| Plaintext | |
| ββββββββββββββββββββββ | |
| β run_mvp.py β | |
| βββββββββββ¬βββββββββββ | |
| β | |
| βΌ | |
| ββββββββββββββββββββββββββββ | |
| β accuracy_log.json β | |
| ββββββββββββββ¬ββββββββββββββ | |
| β | |
| βΌ | |
| ββββββββββββββββββββββββββββ | |
| β plot_convergence.py β | |
| βββββ¬βββββββββββ¬βββββββββββ¬β | |
| β β β | |
| Generates Fig 1 β β β Generates Fig 3 | |
| βΌ β βΌ | |
| βββββββββββββββββββββββ β ββββββββββββββββββββββββββββββββββ | |
| βconvergence_plot.png β β β loss_throughput_metrics.png β | |
| βββββββββββββββββββββββ β ββββββββββββββββββββββββββββββββββ | |
| β 2-Panel Diagnostic β β β 3-Panel Compute & Loss Matrix β | |
| βββββββββββββββββββββββ β ββββββββββββββββββββββββββββββββββ | |
| βΌ Generates Fig 2 | |
| βββββββββββββββββββββββββββββββββββββ | |
| β extended_metrics_plot.png β | |
| βββββββββββββββββββββββββββββββββββββ | |
| β 4-Panel Network Efficiency Matrix β | |
| βββββββββββββββββββββββββββββββββββββ | |
| Core Design Goals | |
| Mathematical Invariance: No synthetic, fabricated, or smoothed values are introduced at the plotting layer. Every pixel mapped corresponds strictly to logged telemetry. | |
| Schema Decoupling: Includes structural fallback handlers capable of digesting multi-method cross-comparisons or legacy, single-history array structures without throwing errors. | |
| Production-Grade Aesthetics: Uses a unified hex-color spectrum, proportional axis text offsets, automated tick-overcrowding decimation, and text annotations aligned directly to critical data elements. | |
| ## Telemetry Schema Specifications | |
| The script expects a structured JSON telemetry payload. It dynamically supports both the production multi-experiment layout and the legacy single-method format. | |
| Target Multi-Experiment Schema (Preferred) | |
| This structure maps cross-comparative studies simultaneously (e.g., evaluating your proposed haflq framework directly against standard baseline parameters). | |
| JSON | |
| { | |
| "timestamp": "2026-06-23T13:00:00Z", | |
| "dataset": "Banking77", | |
| "num_rounds": 20, | |
| "num_clients": 10, | |
| "experiments": { | |
| "haflq": [ | |
| { | |
| "round": 1, | |
| "global_accuracy": 0.4521, | |
| "total_comm_mb": 8.42, | |
| "cumulative_comm_mb": 8.42, | |
| "total_discarded_mb": 0.02, | |
| "avg_client_accuracy": 0.4110, | |
| "update_norm": 4.1251, | |
| "train_loss": 2.2145, | |
| "val_loss": 2.5102, | |
| "token_throughput": 1441.2, | |
| "client_1_loss": 2.2510, | |
| "client_2_loss": 2.2104, | |
| "client_3_loss": 2.1215 | |
| }, | |
| { | |
| "round": 2, | |
| "global_accuracy": 0.6285, | |
| "total_comm_mb": 6.11, | |
| "cumulative_comm_mb": 14.53, | |
| "total_discarded_mb": 0.01, | |
| "avg_client_accuracy": 0.5942, | |
| "update_norm": 4.0912, | |
| "train_loss": 1.8841, | |
| "val_loss": 2.1154, | |
| "token_throughput": 1445.6, | |
| "client_1_loss": 1.9214, | |
| "client_2_loss": 1.8541, | |
| "client_3_loss": 1.8102 | |
| } | |
| ], | |
| "baseline": [ | |
| { | |
| "round": 1, | |
| "global_accuracy": 0.4102, | |
| "total_comm_mb": 12.50, | |
| "cumulative_comm_mb": 12.50, | |
| "total_discarded_mb": 2.15, | |
| "avg_client_accuracy": 0.3854, | |
| "update_norm": 4.1520, | |
| "train_loss": 2.3841, | |
| "val_loss": 2.6145, | |
| "token_throughput": 1515.4, | |
| "client_1_loss": 2.4412, | |
| "client_2_loss": 2.3514, | |
| "client_3_loss": 2.3145 | |
| } | |
| ] | |
| } | |
| } | |
| ## Legacy Single-Method Schema Support | |
| If the core executor dumps a flat history list representing a single execution pass, the script detects it, logs a structural notice, and auto-wraps the telemetry payload into the standard namespace as haflq. | |
| JSON | |
| { | |
| "num_rounds": 20, | |
| "history": [ | |
| { | |
| "round": 1, | |
| "global_accuracy": 0.4521, | |
| "total_comm_mb": 8.42 | |
| } | |
| ] | |
| } | |
| ## Visualization Architecture | |
| Figure 1: Convergence Diagnostics (convergence_plot.png) | |
| Dimensions: 14Γ5.5 inches (Dual-Panel Landscape arrangement). | |
| Target Domain: Standard machine learning training dynamics and model state stabilization metrics. | |
| Panel Metric Rendered Input JSON Keys Analytical Value | |
| Panel 1 Global Test Accuracy Convergence global_accuracy Multi-line progression plotting validation accuracy across training iterations. Includes a static horizontal baseline target at 89.13%, serving as a benchmark against top-tier academic reference parameters. | |
| Panel 2 Aggregated Weight Delta Norm update_norm Tracks the geometric Frobenius Norm $ | |
| Figure 2: Extended Communication Matrix (extended_metrics_plot.png) | |
| Dimensions: 15Γ11 inches (2Γ2 Grid Quad-Panel matrix layout). | |
| Target Domain: Systems-level networking efficiency and network-constrained edge resource profiling. | |
| Plaintext | |
| βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| β [0,0] Per-Round Communication β [0,1] Cumulative Communication β | |
| β β β | |
| β β’ Tracks individual round costs β β’ Plots total network transfer β | |
| β β’ Monitors adaptive compression β β’ Shards network bandwidth saved β | |
| βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| β [1,0] Parameter Discard Profile β [1,1] Efficiency Ratio Matrix β | |
| β β β | |
| β β’ Measures drops due to limits β β’ Evaluates Accuracy gained per MB β | |
| β β’ Proves edge budget compliance β β’ The primary optimization target β | |
| βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| Panel [0,0] β Per-Round Communication Cost: Plots discrete byte volumes uploaded per epoch. It charts how parameter freezing and quantization steps lower infrastructure costs as training stabilizes. | |
| Panel [0,1] β Cumulative Communication Cost: A continuous step aggregation of overall edge data transfer. If both haflq and baseline modes are present, it renders an alpha-blended teal filling block (#43a2ca) across the curves, computing a vector offset to place an automated arrow annotation detailing the exact volume of Megabytes saved. | |
| Panel [1,0] β Parameters Discarded per Round: Implements an interlaced bar graph matrix visualizing the volume of model layers dropped due to hardware bandwidth limits. Low values in this panel validate the model's adaptive budget alignment. | |
| Panel [1,1] β Communication Efficiency Ratio: Tracks the system's ability to achieve high model utility with a minimal network payload, evaluated via vector conditional logic: | |
| Efficiency=Current Round Transport Burden (MB)Global Accuracy Componentβ | |
| Figure 3: Compute & Loss Telemetry Matrix (loss_throughput_metrics.png) | |
| Dimensions: 18Γ5.5 inches (1Γ3 Panel Landscape arrangement). | |
| Target Domain: Hardware runtime compute speed and cross-entropy error boundary optimization. | |
| Panel Metric Rendered Input JSON Keys Analytical Value | |
| Panel 1 Global Convergence Loss train_loss, val_loss Juxtaposes global training loss against central evaluation validation loss. Used to monitor training convergence speed and detect overfitting thresholds. | |
| Panel 2 Per-Client Loss Variance client_x_loss Overlays explicit loss trajectories of isolated edge nodes. Highlights system robustness under complex, highly non-IID data distributions. | |
| Panel 3 On-Device Token Throughput token_throughput Evaluates hardware compute efficiency measured in tokens/sec. Proves that advanced quantization layers do not degrade processing speed. | |
| Production Layout Engine & Stylesheet | |
| The script overrides Matplotlib defaults to enforce professional typographical hierarchies and clean geometric layouts: | |
| Python | |
| # Color Palette Token Definitions | |
| COLOR = { | |
| "haflq": "#0f62fe", # Deep Carbon Blue (Primary Target Model) | |
| "baseline": "#ff1744", # Vivid Crimson (Baseline Benchmarks) | |
| "fill": "#43a2ca", # Teal Fill (Shaded Efficiency Spaces) | |
| "grid": "#e0e0e0", # Light Grey (Axis Subdivisions) | |
| "mean": "#d73027", # Soft Red (Horizontal Reference Marks) | |
| } | |
| ## Automation Subsystems | |
| Overcrowding Decimation: Axis ticks scale dynamically using a MultipleLocator step calculation: max(1, len(rounds) // 10). This guarantees crisp, uncrowded horizontal label readouts whether running short 10-round validation sweeps or full-scale 200-round operations. | |
| Safe Floating-Point Division: To prevent mathematical evaluation faults during early rounds where data transport counters are absolute zero, division logic is safely isolated using vector conditional logic: | |
| Python | |
| with np.errstate(divide="ignore", invalid="ignore"): | |
| efficiency = np.where(total_comm_mb > 0, global_accuracy / total_comm_mb, 0.0) | |
| ## Execution Guide & Command Line Interface | |
| The script uses an independent parser loop, allowing execution from varying workspace directories without risking file-path breaks. | |
| Command Line Arguments | |
| Plaintext | |
| options: | |
| -h, --help show this help message and exit | |
| --input INPUT Path to accuracy_log.json source file | |
| (Default: experiments/results/accuracy_log.json) | |
| --outdir OUTDIR Directory target path for generated image files | |
| (Default: experiments/results) | |
| Execution Recipes | |
| 1. Standard Run (Default Workspace Organization) | |
| Bash | |
| python plot_convergence.py | |
| 2. Evaluating Custom Stored Metrics | |
| Bash | |
| python plot_convergence.py --input storage/logs/banking77_run.json | |
| 3. Custom Output Directory Targeting (For Presentation Assets) | |
| Bash | |
| python plot_convergence.py \ | |
| --input experiments/results/accuracy_log.json \ | |
| --outdir assets/presentation_deck/ | |
| Clean System Outputs | |
| Upon validation and parsing, the engine outputs explicit generation notifications to stdout: | |
| Plaintext | |
| Loaded log: 2 method(s), 20 rounds each. | |
| Generating Figure 1 β convergence plot... | |
| Saved: experiments/results/convergence_plot.png | |
| Generating Figure 2 β extended metrics plot... | |
| Saved: experiments/results/extended_metrics_plot.png | |
| Generating Figure 3 β loss throughput metrics plot... | |
| Saved: experiments/results/loss_throughput_metrics.png | |
| All plots saved successfully. | |
| experiments/results/convergence_plot.png | |
| experiments/results/extended_metrics_plot.png | |
| experiments/results/loss_throughput_metrics.png |