132 lines
4.9 KiB
Python
132 lines
4.9 KiB
Python
import glob
|
|
import numpy as np
|
|
import matplotlib.pyplot as plt
|
|
from thunderhopper.modeltools import load_data
|
|
from thunderhopper.filtertools import find_kern_specs
|
|
from misc_functions import unsort_unique
|
|
from color_functions import sample_cmap
|
|
from IPython import embed
|
|
|
|
# Settings:
|
|
target = 'Omocestus_rufipes'
|
|
data_path = glob.glob(f'../data/inv/full/{target}*.npz')[0]
|
|
stages = ['conv', 'feat']
|
|
load_kwargs = dict(
|
|
files=stages,
|
|
keywords=['scales', 'measure']
|
|
)
|
|
|
|
# Subset settings:
|
|
all_types = np.array([1, -1, 2, -2, 3, -3, 4, -4, 5, -5,
|
|
6, -6, 7, -7, 8, -8, 9, -9, 10, -10]).astype(float)
|
|
all_sigmas = np.array([0.001, 0.002, 0.004, 0.008, 0.016, 0.032])
|
|
kerns = None
|
|
types = np.array([1, -1, 2, -2, 3, -3, 4, -4, 5, -5,
|
|
6, -6, 7, -7, 8, -8, 9, -9, 10, -10])
|
|
sigmas = np.array([0.008, 0.016])
|
|
|
|
# Plot settings:
|
|
line_kwargs = dict(
|
|
linewidth=2,
|
|
)
|
|
median_kwargs = dict(
|
|
linewidth=4,
|
|
c='k',
|
|
linestyle='--'
|
|
)
|
|
|
|
# Load invariance data:
|
|
data, config = load_data(data_path, **load_kwargs)
|
|
scales = data['scales']
|
|
|
|
# Reduce to kernel subset:
|
|
if any(var is not None for var in [kerns, types, sigmas]):
|
|
subset_inds = find_kern_specs(config['k_specs'], kerns, types, sigmas)
|
|
data['measure_conv'] = data['measure_conv'][:, subset_inds]
|
|
data['measure_feat'] = data['measure_feat'][:, subset_inds]
|
|
config['kernels'] = config['kernels'][:, subset_inds]
|
|
config['k_specs'] = config['k_specs'][subset_inds, :]
|
|
kern_types = unsort_unique(config['k_specs'][:, 0])
|
|
kern_sigmas = unsort_unique(config['k_specs'][:, 1])
|
|
|
|
# Prepare colors:
|
|
type_colors = {t: c for t, c in zip(all_types, sample_cmap('turbo', all_types.size))}
|
|
sigma_colors = {s: c for s, c in zip(all_sigmas, sample_cmap('turbo', all_sigmas.size))}
|
|
|
|
# Prepare graph:
|
|
fig, axes = plt.subplots(2, 4, figsize=(16, 16), layout='constrained', sharex=True)
|
|
axes[0, 0].set_xlim(scales[0], scales[-1])
|
|
axes[0, 0].set_xscale('log')
|
|
axes[0, 0].set_ylabel('conv')
|
|
axes[1, 0].set_ylabel('feat')
|
|
|
|
# Condense across kernels:
|
|
median_conv = np.median(data['measure_conv'], axis=1)
|
|
median_feat = np.median(data['measure_feat'], axis=1)
|
|
|
|
# Coded by type:
|
|
leg_handles = []
|
|
for kern_type in kern_types:
|
|
color = type_colors[kern_type]
|
|
inds = find_kern_specs(config['k_specs'], types=kern_type)
|
|
leg_handles.append(axes[0, 0].plot(scales, data['measure_conv'][:, inds],
|
|
c=color, label=f'{kern_type}', **line_kwargs)[0])
|
|
axes[0, 0].plot(scales, median_conv, **median_kwargs)
|
|
axes[1, 0].plot(scales, data['measure_feat'][:, inds], c=color, **line_kwargs)
|
|
axes[1, 0].plot(scales, median_feat, **median_kwargs)
|
|
axes[0, 0].legend(handles=leg_handles, loc='upper left')
|
|
axes[0, 0].set_title('Coded by type')
|
|
|
|
# Coded by sigma:
|
|
leg_handles = []
|
|
for kern_sigma in kern_sigmas:
|
|
color = sigma_colors[kern_sigma]
|
|
inds = find_kern_specs(config['k_specs'], sigmas=kern_sigma)
|
|
leg_handles.append(axes[0, 1].plot(scales, data['measure_conv'][:, inds],
|
|
c=color, label=f'{kern_sigma}', **line_kwargs)[0])
|
|
axes[0, 1].plot(scales, median_conv, **median_kwargs)
|
|
axes[1, 1].plot(scales, data['measure_feat'][:, inds], c=color, **line_kwargs)
|
|
axes[1, 1].plot(scales, median_feat, **median_kwargs)
|
|
axes[0, 1].legend(handles=leg_handles, loc='upper left')
|
|
axes[0, 1].set_title('Coded by sigma')
|
|
|
|
# Normalize measures:
|
|
data['measure_conv'] -= data['measure_conv'].min(axis=0)
|
|
data['measure_conv'] /= data['measure_conv'].max(axis=0)
|
|
data['measure_feat'] -= data['measure_feat'].min(axis=0)
|
|
data['measure_feat'] /= data['measure_feat'].max(axis=0)
|
|
|
|
# Condense across kernels:
|
|
median_conv = np.median(data['measure_conv'], axis=1)
|
|
median_feat = np.median(data['measure_feat'], axis=1)
|
|
|
|
# Coded by type:
|
|
leg_handles = []
|
|
for kern_type in kern_types:
|
|
color = type_colors[kern_type]
|
|
inds = find_kern_specs(config['k_specs'], types=kern_type)
|
|
leg_handles.append(axes[0, 2].plot(scales, data['measure_conv'][:, inds],
|
|
c=color, label=f'{kern_type}', **line_kwargs)[0])
|
|
axes[0, 2].plot(scales, median_conv, **median_kwargs)
|
|
axes[1, 2].plot(scales, data['measure_feat'][:, inds], c=color, **line_kwargs)
|
|
axes[1, 2].plot(scales, median_feat, **median_kwargs)
|
|
axes[0, 2].legend(handles=leg_handles, loc='upper left')
|
|
axes[0, 2].set_title('Coded by type')
|
|
|
|
|
|
# Coded by sigma:
|
|
leg_handles = []
|
|
for kern_sigma in kern_sigmas:
|
|
color = sigma_colors[kern_sigma]
|
|
inds = find_kern_specs(config['k_specs'], sigmas=kern_sigma)
|
|
leg_handles.append(axes[0, 3].plot(scales, data['measure_conv'][:, inds],
|
|
c=color, label=f'{kern_sigma}', **line_kwargs)[0])
|
|
axes[0, 3].plot(scales, median_conv, **median_kwargs)
|
|
axes[1, 3].plot(scales, data['measure_feat'][:, inds], c=color, **line_kwargs)
|
|
axes[1, 3].plot(scales, median_feat, **median_kwargs)
|
|
axes[0, 3].legend(handles=leg_handles, loc='upper left')
|
|
axes[0, 3].set_title('Coded by sigma')
|
|
|
|
plt.show()
|
|
embed()
|