Skip to content

Commit 87674fc

Browse files
committed
Add compact benchmark overview visuals for README and dashboard
1 parent c519b19 commit 87674fc

7 files changed

Lines changed: 412 additions & 35 deletions

File tree

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ for versioning even while in research-stage development.
5858
- ResNet benchmark defaults now enable adaptive sleep budget scaling by default while keeping reward-modulated learning disabled by default.
5959
- Updated circadian unit tests (NumPy + Torch) with coverage for reward scaling and adaptive budget behavior.
6060
- Updated README, model card, and core module docs to document new circadian controls.
61+
- Enhanced benchmark visuals with a compact combined overview figure (static + interactive) and linked it in README/dashboard for faster comparison.
6162
- Refreshed README benchmark section with a latest master verification run on 2026-02-28 and added raw output artifact under `docs/benchmarks/`.
6263
- Repositioned repository messaging to Circadian Predictive Coding as the primary focus.
6364
- Updated `README.md` with:

README.md

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -56,9 +56,7 @@ This lets model capacity adapt over time instead of staying fixed.
5656

5757
### Multi-seed CIFAR-100 Snapshot (3 seeds, subset benchmark)
5858

59-
![Accuracy Chart](docs/figures/benchmark_accuracy.png)
60-
![Training Speed Chart](docs/figures/benchmark_train_speed.png)
61-
![Inference Latency Chart](docs/figures/benchmark_inference_latency_p95.png)
59+
![Benchmark Overview (Compact)](docs/figures/benchmark_overview_compact.png)
6260

6361
Interactive dashboard:
6462

@@ -67,6 +65,7 @@ Interactive dashboard:
6765

6866
Interactive Plotly chart files:
6967

68+
- [Overview (interactive, compact)](https://optimumaf.github.io/Circadian-Predictive-Coding/figures/interactive_benchmark_overview.html)
7069
- [Accuracy (interactive)](https://optimumaf.github.io/Circadian-Predictive-Coding/figures/interactive_benchmark_accuracy.html)
7170
- [Training speed (interactive)](https://optimumaf.github.io/Circadian-Predictive-Coding/figures/interactive_benchmark_train_speed.html)
7271
- [Inference latency P95 (interactive)](https://optimumaf.github.io/Circadian-Predictive-Coding/figures/interactive_benchmark_inference_latency_p95.html)

docs/figures/README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,12 @@ This folder stores visual assets used by `README.md`.
44

55
## Generated Artifacts
66

7+
- `benchmark_overview_compact.png`
78
- `benchmark_accuracy.png`
89
- `benchmark_train_speed.png`
910
- `benchmark_inference_latency_p95.png`
1011
- `circadian_sleep_dynamics.gif`
12+
- `interactive_benchmark_overview.html`
1113
- `interactive_benchmark_accuracy.html`
1214
- `interactive_benchmark_train_speed.html`
1315
- `interactive_benchmark_inference_latency_p95.html`
40 KB
Loading
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
<!doctype html>
2+
<html lang="en">
3+
<head>
4+
<meta charset="utf-8" />
5+
<meta name="viewport" content="width=device-width, initial-scale=1" />
6+
<title>Benchmark Overview</title>
7+
<script src="https://cdn.plot.ly/plotly-2.35.2.min.js"></script>
8+
</head>
9+
<body style="font-family: Arial, sans-serif; margin: 0; background: #f7f9fc;">
10+
<div id="chart" style="width: 100%; max-width: 1200px; height: 900px; margin: 18px auto;"></div>
11+
<script>
12+
const payload = {"labels": ["Backprop", "Predictive", "Circadian"], "colors": ["#2e61ad", "#3d9d56", "#bd6624"], "metrics": [{"title": "Accuracy", "subtitle": "Mean test accuracy", "objective_note": "Higher is better", "y_label": "Accuracy", "values": [0.6900666666666666, 0.681, 0.6714666666666668], "formatted_values": ["0.690", "0.681", "0.671"], "range": [0.0, 1.0]}, {"title": "Training Throughput", "subtitle": "Mean samples / second", "objective_note": "Higher is better", "y_label": "Train SPS", "values": [1775.275277733633, 1732.0788999689255, 1643.5856944964762], "formatted_values": ["1775", "1732", "1644"], "range": [1630.4167361727605, 1788.4442360573487]}, {"title": "Inference Latency P95", "subtitle": "Mean latency (ms)", "objective_note": "Lower is better", "y_label": "P95 latency (ms)", "values": [17.338261666694166, 17.741378333375717, 18.710663333350414], "formatted_values": ["17.34", "17.74", "18.71"], "range": [17.173573466695416, 18.875351533349164]}, {"title": "Balanced Score", "subtitle": "Composite utility score", "objective_note": "Higher is better", "y_label": "Balanced score", "values": [1.0, 0.5864393641855423, 0.0], "formatted_values": ["1.000", "0.586", "0.000"], "range": [0.0, 1.0]}]};
13+
const traces = [];
14+
const annotations = [];
15+
payload.metrics.forEach((metric, idx) => {
16+
const axisIndex = idx + 1;
17+
const xRef = axisIndex === 1 ? "x" : "x" + axisIndex;
18+
const yRef = axisIndex === 1 ? "y" : "y" + axisIndex;
19+
traces.push({
20+
type: "bar",
21+
x: payload.labels,
22+
y: metric.values,
23+
marker: { color: payload.colors },
24+
text: metric.formatted_values,
25+
textposition: "outside",
26+
cliponaxis: false,
27+
xaxis: xRef,
28+
yaxis: yRef,
29+
showlegend: false
30+
});
31+
32+
const col = idx % 2;
33+
const row = Math.floor(idx / 2);
34+
const xCenter = col === 0 ? 0.225 : 0.775;
35+
const yTop = row === 0 ? 1.12 : 0.56;
36+
annotations.push({
37+
xref: "paper",
38+
yref: "paper",
39+
x: xCenter,
40+
y: yTop,
41+
text: "<b>" + metric.title + "</b><br><span style='color:#5e6672'>" + metric.objective_note + "</span>",
42+
showarrow: false,
43+
align: "center",
44+
font: {size: 12, color: "#1e2430"}
45+
});
46+
});
47+
48+
const layout = {
49+
title: {
50+
text: "Benchmark Overview (Compact)<br><sup>Multi-seed CIFAR-100 summary</sup>"
51+
},
52+
grid: { rows: 2, columns: 2, pattern: "independent" },
53+
paper_bgcolor: "#f7f9fc",
54+
plot_bgcolor: "#ffffff",
55+
margin: { l: 70, r: 35, t: 120, b: 70 },
56+
annotations: annotations
57+
};
58+
59+
payload.metrics.forEach((metric, idx) => {
60+
const axisIndex = idx + 1;
61+
const xAxisName = axisIndex === 1 ? "xaxis" : "xaxis" + axisIndex;
62+
const yAxisName = axisIndex === 1 ? "yaxis" : "yaxis" + axisIndex;
63+
layout[xAxisName] = { title: "Model" };
64+
layout[yAxisName] = { title: metric.y_label, range: metric.range };
65+
});
66+
67+
Plotly.newPlot("chart", traces, layout, {responsive: true});
68+
</script>
69+
</body>
70+
</html>

docs/index.html

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@
126126
<div class="wrap">
127127
<section class="hero">
128128
<h1>Circadian Predictive Coding Benchmark Dashboard</h1>
129-
<p>Interactive benchmark views for accuracy, training throughput, and inference latency across backprop, predictive coding, and circadian predictive coding.</p>
129+
<p>Interactive benchmark views with a compact overview plus detailed drill-down charts across backprop, predictive coding, and circadian predictive coding.</p>
130130
<p class="note">
131131
Source artifacts are generated by
132132
<span class="accent">scripts/generate_readme_figures.py</span>
@@ -150,17 +150,22 @@ <h1>Circadian Predictive Coding Benchmark Dashboard</h1>
150150
</section>
151151

152152
<section class="section">
153-
<h2>Accuracy (Interactive)</h2>
153+
<h2>Compact Overview (Interactive)</h2>
154+
<iframe src="figures/interactive_benchmark_overview.html" title="Interactive compact benchmark overview"></iframe>
155+
</section>
156+
157+
<section class="section">
158+
<h2>Detailed Accuracy (Interactive)</h2>
154159
<iframe src="figures/interactive_benchmark_accuracy.html" title="Interactive accuracy chart"></iframe>
155160
</section>
156161

157162
<section class="section">
158-
<h2>Training Throughput (Interactive)</h2>
163+
<h2>Detailed Training Throughput (Interactive)</h2>
159164
<iframe src="figures/interactive_benchmark_train_speed.html" title="Interactive training throughput chart"></iframe>
160165
</section>
161166

162167
<section class="section">
163-
<h2>Inference Latency P95 (Interactive)</h2>
168+
<h2>Detailed Inference Latency P95 (Interactive)</h2>
164169
<iframe src="figures/interactive_benchmark_inference_latency_p95.html" title="Interactive inference latency chart"></iframe>
165170
</section>
166171

0 commit comments

Comments
 (0)