import datetime
import os
import pickle
import numpy as np
import pandas as pd
import torch
[docs]class Storing:
[docs] def __init__(self, args):
self.args = args
self.loss = []
self.val_loss = []
self.acc_y = []
self.val_acc_y = []
self.acc_d = []
self.val_acc_d = []
self.r_scores_tr = []
self.r_scores_te = []
self.experiment_name = str(datetime.datetime.now()) + "_" + str(args.task) + "_" + str(args.model)
self.experiment_name = self.experiment_name.replace(" ", "_")
self.last_epoch = args.epos
self.ex_path = os.path.join("./notebooks", self.experiment_name)
if not os.path.exists(os.path.join("./notebooks", self.experiment_name)):
print("______Created directory to save result_________")
os.mkdir(self.ex_path)
df = pd.DataFrame(
columns=["epoch", "loss", "accuracy_y", "accuracy_d", "val_loss", "val_accuracy_y", "val_accuracy_d"]
)
df.to_csv(os.path.join(self.ex_path, "losses_accuracies.csv"), index=False)
[docs] def storing(self, epoch, acc_tr_y, acc_tr_d, loss_tr, acc_val_y, acc_val_d, loss_val, r_score_tr, r_score_te):
self.loss.append(loss_tr)
self.val_loss.append(loss_val)
self.acc_y.append(acc_tr_y)
self.val_acc_y.append(acc_val_y)
self.acc_d.append(acc_tr_d)
self.val_acc_d.append(acc_val_d)
self.r_scores_tr.append(r_score_tr)
self.r_scores_te.append(r_score_te)
df = pd.read_csv(os.path.join(self.ex_path, "losses_accuracies.csv"))
saving_dir = os.path.join("./notebooks", self.experiment_name)
loss_acc_df = pd.DataFrame(
{
"epoch": epoch,
"loss": loss_tr,
"accuracy_y": acc_tr_y,
"accuracy_d": acc_tr_d,
"val_loss": loss_val.item(),
"val_accuracy_y": acc_val_y,
"val_accuracy_d": acc_val_d,
},
index=[epoch],
)
df = pd.concat([df, loss_acc_df], join="inner", ignore_index=False)
df.to_csv(os.path.join(self.ex_path, "losses_accuracies.csv"), index=False)
pickle.dump(self.args, open(os.path.join(saving_dir, "commandline_arguments.p"), "wb"))
[docs] def saving_model(self, model):
# path_dict =os.path.join("./notebooks", self.experiment_name)
torch.save(model.encoder.state_dict(), os.path.join(self.ex_path, "encoder.pt"))
torch.save(model.decoder.state_dict(), os.path.join(self.ex_path, "decoder.pt"))
[docs] def storing_z_space(self, Z, predictions, vec_y_labels, vec_d_labels, image_id_labels):
# exp_path =os.path.join("./notebooks",self.experiment_name)
np.save(os.path.join(self.ex_path, "Z_space.npy"), Z)
pickle.dump(Z, open(os.path.join(self.ex_path, "Z_space_picle.p"), "wb"))
df = pd.DataFrame(columns=["vec_y_labels", "vec_d_labels", "predictions", "image_id_labels"])
df["vec_y_labels"] = vec_y_labels
df["vec_d_labels"] = vec_d_labels
df["predictions"] = predictions
df["image_id_labels"] = image_id_labels
df.to_csv(os.path.join(self.ex_path, "clustering_results.csv"), index=False)
[docs] def csv_dump(self, epoch):
if os.path.exists(os.path.join(self.args.path_to_results, "results.csv")):
results_df = pd.read_csv(os.path.join(self.args.path_to_results, "results.csv"))
else:
results_df = pd.DataFrame(
columns=[
"dataset",
"model",
"seed",
"bs",
"zd_dim",
"lr",
"train_acc_y",
"test_acc_y",
"train_acc_d",
"test_acc_d",
"R with scores train",
"R with scores test",
"train_loss",
"test_loss",
"directory",
]
)
results_df.to_csv(os.path.join(self.args.path_to_results, "results.csv"), index=False)
if self.args.inject_var:
model_name = "cd" + self.args.model
else:
model_name = self.args.model
if self.last_epoch == epoch:
row = [
{
"dataset": self.args.task,
"model": model_name,
"seed": self.args.seed,
"bs": self.args.bs,
"zd_dim": self.args.zd_dim,
"lr": self.args.lr,
"train_acc_y": self.acc_y[-1],
"test_acc_y": self.val_acc_y[-1],
"train_acc_d": self.acc_d[-1],
"test_acc_d": self.val_acc_d[-1],
"R with scores train": self.r_scores_tr[-1],
"R with scores test": self.r_scores_te[-1],
"train_loss": self.loss[-1],
"test_loss": self.val_loss[-1].item(),
"directory": self.experiment_name,
}
]
results_df = results_df.append(row, ignore_index=True)
results_df.to_csv(os.path.join(self.args.path_to_results, "results.csv"), index=False)