In [1]:
%load_ext autoreload
%autoreload 2

In [2]:
import sys
sys.path.append("../../")

In [3]:
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function

import os
import glob
import tabulate
import pprint
import click
import numpy as np
import pandas as pd
from ray.tune.commands import *
from nupic.research.frameworks.dynamic_sparse.common.browser import *

In [20]:
base = 'run_stochastic_synapses_gscvalidate'
exps = [
    base
]
    
paths = [os.path.expanduser("~/nta/results/{}".format(e)) for e in exps]
for p in paths:
    print(os.path.exists(p), p)
has_nz = lambda k: "nz" in k
has_sp = lambda k: "sparsity" in k
df = load_many(paths, raw_metrics=[has_nz, has_sp])


True /Users/mcaporale/nta/results/run_stochastic_synapses_gscvalidate

In [21]:
df


Out[21]:
Experiment Name train_acc_max train_acc_max_epoch train_acc_min train_acc_min_epoch train_acc_median train_acc_last val_acc_max val_acc_max_epoch val_acc_min ... learning_rate lr_gamma lr_scheduler lr_step_size model name network optim_alg test_noise use_tqdm
0 0_model=StochasticSynapsesModel,network=gsc_bi... 0.970364 98 0.335465 0 0.950786 0.969534 0.969126 89 0.631516 ... 0.01 0.9825 StepLR 1 StochasticSynapsesModel run_stochastic_synapses_gscvalidate gsc_binary_cnn Adam False True
1 1_model=StochasticSynapsesModel,network=gsc_ha... 0.960600 93 0.441021 0 0.944610 0.960453 0.969928 85 0.720930 ... 0.01 0.9825 StepLR 1 StochasticSynapsesModel run_stochastic_synapses_gscvalidate gsc_hard_concrete_cnn Adam False True
2 2_model=StochasticSynapsesModel,network=gsc_bi... 0.968607 97 0.334635 0 0.949907 0.965677 0.965116 82 0.497594 ... 0.01 0.9825 StepLR 1 StochasticSynapsesModel run_stochastic_synapses_gscvalidate gsc_binary_cnn Adam False True
3 3_model=StochasticSynapsesModel,network=gsc_ha... 0.960111 97 0.395713 0 0.941192 0.959037 0.969126 78 0.551724 ... 0.01 0.9825 StepLR 1 StochasticSynapsesModel run_stochastic_synapses_gscvalidate gsc_hard_concrete_cnn Adam False True
4 4_model=StochasticSynapsesModel,network=gsc_bi... 0.969241 97 0.324773 0 0.951323 0.964310 0.966319 78 0.611468 ... 0.01 0.9825 StepLR 1 StochasticSynapsesModel run_stochastic_synapses_gscvalidate gsc_binary_cnn Adam False True
5 5_model=StochasticSynapsesModel,network=gsc_ha... 0.960795 93 0.430183 0 0.944781 0.958940 0.971532 96 0.622294 ... 0.01 0.9825 StepLR 1 StochasticSynapsesModel run_stochastic_synapses_gscvalidate gsc_hard_concrete_cnn Adam False True
6 6_model=StochasticSynapsesModel,network=gsc_bi... 0.966849 90 0.348111 0 0.950713 0.965775 0.967121 84 0.619487 ... 0.01 0.9825 StepLR 1 StochasticSynapsesModel run_stochastic_synapses_gscvalidate gsc_binary_cnn Adam False True
7 7_model=StochasticSynapsesModel,network=gsc_ha... 0.959916 98 0.428669 0 0.943243 0.958402 0.969126 96 0.626704 ... 0.01 0.9825 StepLR 1 StochasticSynapsesModel run_stochastic_synapses_gscvalidate gsc_hard_concrete_cnn Adam False True
8 8_model=StochasticSynapsesModel,network=gsc_bi... 0.968362 96 0.347036 0 0.948858 0.964945 0.965918 82 0.538492 ... 0.01 0.9825 StepLR 1 StochasticSynapsesModel run_stochastic_synapses_gscvalidate gsc_binary_cnn Adam False True
9 9_model=StochasticSynapsesModel,network=gsc_ha... 0.960111 97 0.416268 0 0.943267 0.958451 0.968725 71 0.705293 ... 0.01 0.9825 StepLR 1 StochasticSynapsesModel run_stochastic_synapses_gscvalidate gsc_hard_concrete_cnn Adam False True

10 rows × 54 columns


In [22]:
df.columns


Out[22]:
Index(['Experiment Name', 'train_acc_max', 'train_acc_max_epoch',
       'train_acc_min', 'train_acc_min_epoch', 'train_acc_median',
       'train_acc_last', 'val_acc_max', 'val_acc_max_epoch', 'val_acc_min',
       'val_acc_min_epoch', 'val_acc_median', 'val_acc_last', 'val_acc_all',
       'cnn1/hist_expected_nz_by_unit', 'cnn1/expected_nz',
       'cnn1/hist_inference_nz_by_unit', 'cnn1/inference_nz',
       'cnn2/hist_expected_nz_by_unit', 'cnn2/expected_nz',
       'cnn2/hist_inference_nz_by_unit', 'cnn2/inference_nz',
       'fc1/hist_expected_nz_by_unit', 'fc1/expected_nz',
       'fc1/hist_inference_nz_by_unit', 'fc1/inference_nz',
       'fc2/hist_expected_nz_by_unit', 'fc2/expected_nz',
       'fc2/hist_inference_nz_by_unit', 'fc2/inference_nz', 'epochs',
       'experiment_file_name', 'trial_time', 'mean_epoch_time',
       'batch_size_test', 'batch_size_train', 'checkpoint_dir', 'data_dir',
       'dataset_name', 'debug_sparse', 'debug_weights', 'device',
       'droprate_init', 'l0_strength', 'learning_rate', 'lr_gamma',
       'lr_scheduler', 'lr_step_size', 'model', 'name', 'network', 'optim_alg',
       'test_noise', 'use_tqdm'],
      dtype='object')

In [16]:
# helper functions
def mean_and_std(s):
    return "{:.3f} ± {:.3f}".format(s.mean(), s.std())

def round_mean(s):
    return "{:.0f}".format(round(s.mean()))

stats = ['min', 'max', 'mean', 'std']

def agg(columns, filter=None, round=3):
    if filter is None:
        return (df.groupby(columns)
             .agg({'val_acc_max_epoch': round_mean,
                   'val_acc_max': stats,                
                   'model': ['count']})).round(round)
    else:
        return (df[filter].groupby(columns)
             .agg({'val_acc_max_epoch': round_mean,
                   'val_acc_max': stats,                
                   'model': ['count']})).round(round)

In [51]:
df['cnn1/expected_nz'].apply(lambda s: print(len(s)))


100
100
100
100
100
100
100
100
100
100
Out[51]:
0    None
1    None
2    None
3    None
4    None
5    None
6    None
7    None
8    None
9    None
Name: cnn1/expected_nz, dtype: object

In [59]:
df['cnn1/final_expected_nz'] = df['cnn1/expected_nz'].apply(lambda s: s.iloc[0])
df['cnn1/final_inference_nz'] = df['cnn1/inference_nz'].apply(lambda s: s.iloc[0])
df['cnn2/final_expected_nz'] = df['cnn2/expected_nz'].apply(lambda s: s.iloc[0])
df['cnn2/final_inference_nz'] = df['cnn2/inference_nz'].apply(lambda s: s.iloc[0])
df['fc1/final_expected_nz'] = df['fc1/expected_nz'].apply(lambda s: s.iloc[0])
df['fc1/final_inference_nz'] = df['fc1/inference_nz'].apply(lambda s: s.iloc[0])
df['fc2/final_expected_nz'] = df['fc2/expected_nz'].apply(lambda s: s.iloc[0])
df['fc2/final_inference_nz'] = df['fc2/inference_nz'].apply(lambda s: s.iloc[0])

In [68]:
df.groupby(["network"]).agg({
    "val_acc_max": ["mean", "std"],
})


Out[68]:
val_acc_max
mean std
network
gsc_binary_cnn 0.966720 0.001527
gsc_hard_concrete_cnn 0.969687 0.001120

In [69]:
df.groupby(["network"]).agg({
    'cnn1/final_expected_nz': "mean",
    'cnn2/final_expected_nz': "mean",
    'fc1/final_expected_nz': "mean",
    'fc2/final_expected_nz': "mean",
})


Out[69]:
cnn1/final_expected_nz cnn2/final_expected_nz fc1/final_expected_nz fc2/final_expected_nz
network
gsc_binary_cnn 1565.860693 99951.171875 1567201.325 10607.786133
gsc_hard_concrete_cnn 1497.316968 95709.403125 1504765.425 10139.535156

In [70]:
df.groupby(["network"]).agg({
    'cnn1/final_inference_nz': "mean",
    'cnn2/final_inference_nz': "mean",
    'fc1/final_inference_nz': "mean",
    'fc2/final_inference_nz': "mean",
})


Out[70]:
cnn1/final_inference_nz cnn2/final_inference_nz fc1/final_inference_nz fc2/final_inference_nz
network
gsc_binary_cnn 1599.8 102399.8 1599983.6 11731.6
gsc_hard_concrete_cnn 1600.0 102399.8 1600000.0 11231.2