In [ ]:
import sys
sys.path.insert(0, '..')

In [ ]:
import os
import matplotlib.pyplot as plt
%matplotlib inline
import seaborn as sns
import numpy as np
from run_nengo import error_lims

sns.set_style('white')

In [ ]:
def print_results():
    for ct_start, ct_ends, errors in results_cifar:
        print(ct_start, errors.min())
        ct_end = 0.06
        print(ct_start, ct_end, errors[np.argmin(np.abs(ct_ends - ct_end))])
        print(ct_start, ct_ends[-1], errors[-1])

In [ ]:
if 0:
    loadpath = '../checkpoints/cifar10-lif-1628-80ms_pt-0ms_alpha.npz'
    dstart = 0.01
    dend = 0.002
elif 0:
    loadpath = '../checkpoints/cifar10-lif-1628-200ms_pt.npz'
    dstart = 0.02
    dend = 0.005
else:
    loadpath = '../checkpoints/cifar10-lifalpharc-1556-150ms_pt-3ms_alpha.npz'
    dstart = 0.02
    dend = 0.005
    
loadname = os.path.splitext(os.path.split(loadpath)[1])[0]
objs = np.load(loadpath)
dt, pt, labels, t, y = [objs[k] for k in ['dt', 'pt', 'labels', 't', 'y']]
ct_starts = dstart * np.arange(int(pt / dstart))[:6]

In [ ]:
results_cifar = []
for ct_start in ct_starts:
    ct_ends = dend * np.arange(ct_start / dend + 1, pt / dend + 1)
    errors = np.zeros(len(ct_ends))
    for i, ct_end in enumerate(ct_ends):
        e, _, _ = error_lims(
            dt, pt, labels, t, y, ct_start=ct_start/pt, ct_end=ct_end/pt)
        errors[i] = e.mean()
    results_cifar.append((ct_start, ct_ends, errors))

In [ ]:
plt.figure(figsize=(5,4))
ax = plt.gca()
for ct_start, ct_ends, errors in results_cifar:
    plt.semilogy(ct_ends * 1000, errors * 100, label='%d' % (ct_start*1000,))

error_min = min(*[np.min(errors) for _, _, errors in results_cifar])
plt.xlim([0., pt*1000])
plt.ylim([80*error_min, 100])

yticks = [10, 20, 50, 100]
ax.set_yticks(yticks)
ax.set_yticklabels([str(tick) for tick in yticks])

plt.xlabel('classification time [ms]')
plt.ylabel('error [%]')
plt.legend(loc=3, title='start time [ms]')

sns.set(context='paper', style='ticks', palette='dark')
sns.despine()

plt.savefig(loadname + '-classplot.pdf')

In [ ]:
for ct_start, ct_ends, errors in results_cifar:
    print(ct_start, errors.min())
    ct_end = 0.06
    print(ct_start, ct_end, errors[np.argmin(np.abs(ct_ends - ct_end))])
    print(ct_start, ct_ends[-1], errors[-1])

In [ ]:
#loadpath = '../checkpoints/mnist-lif-0097-200ms_pt-5ms_alpha.npz'
loadpath = '../checkpoints/mnist-lif-0097-100ms_pt-2ms_alpha.npz'
#loadpath = '../checkpoints/mnist-lif-0097-60ms_pt-0ms_alpha.npz'
loadname = os.path.splitext(os.path.split(loadpath)[1])[0]
objs = np.load(loadpath)
dt, pt, labels, t, y = [objs[k] for k in ['dt', 'pt', 'labels', 't', 'y']]

In [ ]:
# dstart = 0.005
dstart = 0.01
#dstart = 0.02
dend = 0.002
# ct_starts = dstart * np.arange(int(pt / dstart))
# ct_starts = dstart * np.arange(int(0.8 * pt / dstart))
ct_starts = dstart * np.arange(int(pt / dstart))[:7]

results_mnist = []
for ct_start in ct_starts:
    ct_ends = dend * np.arange(ct_start / dend + 1, pt / dend + 1)
    errors = np.zeros(len(ct_ends))
    for i, ct_end in enumerate(ct_ends):
        e, _, _ = error_lims(
            dt, pt, labels, t, y, ct_start=ct_start/pt, ct_end=ct_end/pt)
        errors[i] = e.mean()
    results_mnist.append((ct_start, ct_ends, errors))

In [ ]:
plt.figure(figsize=(5,4))
ax = plt.gca()
for ct_start, ct_ends, errors in results_mnist:
    plt.semilogy(ct_ends * 1000, errors * 100, label='%d' % (ct_start*1000,))

error_min = min(*[np.min(errors) for _, _, errors in results_mnist])
plt.xlim([0., pt*1000])
plt.ylim([80*error_min, 100])

yticks = [1, 2, 5, 10, 20, 50, 100]
ax.set_yticks(yticks)
ax.set_yticklabels([str(tick) for tick in yticks])

plt.xlabel('classification time [ms]')
plt.ylabel('error [%]')
plt.legend(loc=3, title='start time [ms]')

sns.set(context='paper', style='ticks', palette='dark')
sns.despine()

plt.savefig(loadname + '-classplot.pdf')

In [ ]:
for ct_start, ct_ends, errors in results_mnist:
    print(ct_start, errors.min())
    ct_end = 0.06
    print(ct_start, ct_end, errors[np.argmin(np.abs(ct_ends - ct_end))])
    print(ct_start, ct_ends[-1], errors[-1])

In [ ]:
if 1:
    loadpath = '../checkpoints/ilsvrc2012-lif-48-80ms_pt-0ms_alpha.npz'
    dstart = 0.01
    dend = 0.002
    ct_starts = dstart * np.arange(int(pt / dstart))[:7]
else:
    loadpath = '../checkpoints/ilsvrc2012-lif-48-200ms_pt-3ms_alpha.npz'
    dstart = 0.02
    dend = 0.005
    ct_starts = dstart * np.arange(int(pt / dstart))
    
loadname = os.path.splitext(os.path.split(loadpath)[1])[0]
objs = np.load(loadpath)
dt, pt, labels, t, y = [objs[k] for k in ['dt', 'pt', 'labels', 't', 'y']]

In [ ]:
results_imagenet = []
for ct_start in ct_starts:
    ct_ends = dend * np.arange(ct_start / dend + 1, pt / dend + 1)
    errors1 = np.zeros(len(ct_ends))
    errors5 = np.zeros(len(ct_ends))
    for i, ct_end in enumerate(ct_ends):
        e1, e5, _ = error_lims(
            dt, pt, labels, t, y, ct_start=ct_start/pt, ct_end=ct_end/pt)
        errors1[i] = e1.mean()
        errors5[i] = e5.mean()
    results_imagenet.append((ct_start, ct_ends, errors1, errors5))

In [ ]:
plt.figure(figsize=(5,4))
ax = plt.gca()
for ct_start, ct_ends, _, errors in results_imagenet:
    plt.semilogy(ct_ends * 1000, errors * 100, label='%d' % (ct_start*1000,))

error_min = min(*[np.min(errors) for _, _, _, errors in results_imagenet])
plt.xlim([0., pt*1000])
plt.ylim([80*error_min, 100])

yticks = [20, 50, 100]
ax.set_yticks(yticks)
ax.set_yticklabels([str(tick) for tick in yticks])

plt.xlabel('classification time [ms]')
plt.ylabel('error [%]')
plt.legend(loc=3, title='start time [ms]')

sns.set(context='paper', style='ticks', palette='dark')
sns.despine()

plt.savefig(loadname + '-classplot.pdf')

In [ ]:
for ct_start, ct_ends, _, errors in results_imagenet:
    print(ct_start, errors.min())
    ct_end = 0.06
    print(ct_start, ct_end, errors[np.argmin(np.abs(ct_ends - ct_end))])
    print(ct_start, ct_ends[-1], errors[-1])

In [ ]: