-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathplot.py
87 lines (70 loc) · 3 KB
/
plot.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from pathlib import Path
from tensorboard.backend.event_processing.event_accumulator import EventAccumulator
import os
# Read the CSV file
csv_path = 'results.csv'
df = pd.read_csv(csv_path)
print(df.head())
def plot_scenario(data, title, xlabel, ylabel, ax, scenario):
ax.plot(data[:, 0], data[:, 1], label=scenario)
ax.set_title(title)
ax.set_xlabel(xlabel)
ax.set_ylabel(ylabel)
ax.legend()
# Convert the 'scenario' column to a categorical column
df['scenario'] = pd.Categorical(df['scenario'])
# Iterate through the rows of the DataFrame, grouped by scenario
for scenario, scenario_group in df.groupby('scenario'):
# Create a folder for each scenario
scenario_folder = f'./plots/{scenario}'
os.makedirs(scenario_folder, exist_ok=True)
# Create separate figures for each scalar
fig_train_loss, ax_train_loss = plt.subplots()
fig_train_lr, ax_train_lr = plt.subplots()
fig_val_loss, ax_val_loss = plt.subplots()
fig_val_nmse, ax_val_nmse = plt.subplots()
for _, row in scenario_group.iterrows():
version = row['version']
expansion = row['expansion']
reduction = row['reduction']
log_dir = f'./runs/{version}'
# Load the TensorBoard log
event_acc = EventAccumulator(log_dir)
event_acc.Reload()
# Get the scalar data
train_loss = event_acc.Scalars('Train/Loss')
train_lr = event_acc.Scalars('Train/LR')
val_loss = event_acc.Scalars('Validation/Loss')
val_nmse = event_acc.Scalars('Validation/NMSE')
# Convert scalar data to arrays
train_loss_data = np.array([[e.step, e.value] for e in train_loss])
train_lr_data = np.array([[e.step, e.value] for e in train_lr])
val_loss_data = np.array([[e.step, e.value] for e in val_loss])
val_nmse_data = np.array([[e.step, e.value] for e in val_nmse])
# Create a label for each version using expansion and reduction values
label = fr'$\times {expansion}, \eta = {reduction}$'
# Plot each version in separate figures
plot_scenario(train_loss_data, 'Train Loss', 'Step', 'Loss', ax_train_loss, label)
plot_scenario(train_lr_data, 'Train Learning Rate', 'Step', 'Learning Rate', ax_train_lr, label)
plot_scenario(val_loss_data, 'Validation Loss', 'Step', 'Loss', ax_val_loss, label)
plot_scenario(val_nmse_data, 'NMSE', 'Step', 'NMSE', ax_val_nmse, label)
# Save the separate plots
plt.figure(fig_train_loss.number)
plt.tight_layout()
plt.savefig(f'{scenario_folder}/train_loss.png')
plt.close()
plt.figure(fig_train_lr.number)
plt.tight_layout()
plt.savefig(f'{scenario_folder}/train_lr.png')
plt.close()
plt.figure(fig_val_loss.number)
plt.tight_layout()
plt.savefig(f'{scenario_folder}/val_loss.png')
plt.close()
plt.figure(fig_val_nmse.number)
plt.tight_layout()
plt.savefig(f'{scenario_folder}/val_nmse.png')
plt.close()