Skip to content
Snippets Groups Projects
Commit 6668744f authored by valentin.emiya's avatar valentin.emiya
Browse files

add variance exp

parent 4e9b4a81
No related branches found
No related tags found
No related merge requests found
Pipeline #6011 failed
...@@ -802,10 +802,12 @@ class Solver: ...@@ -802,10 +802,12 @@ class Solver:
:py:meth:`~tffpy.tf_fading.GabMulTff.compute_decomposition`. :py:meth:`~tffpy.tf_fading.GabMulTff.compute_decomposition`.
""" """
def __init__(self, tol_subregions, tolerance_arrf, proba_arrf): def __init__(self, tol_subregions, tolerance_arrf, proba_arrf,
rand_state=0):
self.tol_subregions = tol_subregions self.tol_subregions = tol_subregions
self.tolerance_arrf = tolerance_arrf self.tolerance_arrf = tolerance_arrf
self.proba_arrf = proba_arrf self.proba_arrf = proba_arrf
self.rand_state = rand_state
def __call__(self, x_mix, mask, dgt_params, signal_params): def __call__(self, x_mix, mask, dgt_params, signal_params):
""" """
...@@ -853,7 +855,8 @@ class Solver: ...@@ -853,7 +855,8 @@ class Solver:
signal_params=signal_params, signal_params=signal_params,
tol_subregions=self.tol_subregions) tol_subregions=self.tol_subregions)
gmtff.compute_decomposition(tolerance_arrf=self.tolerance_arrf, gmtff.compute_decomposition(tolerance_arrf=self.tolerance_arrf,
proba_arrf=self.proba_arrf) proba_arrf=self.proba_arrf,
rand_state=self.rand_state)
# Estimate energy and lambda # Estimate energy and lambda
lambda_tff, t_lambda_tff = gmtff.compute_lambda(x_mix=x_mix) lambda_tff, t_lambda_tff = gmtff.compute_lambda(x_mix=x_mix)
......
# -*- coding: utf-8 -*-
"""
.. moduleauthor:: Valentin Emiya
"""
import numpy as np
from yafe import Experiment
from tffpy.datasets import get_mix, get_dataset
from tffpy.experiments.exp_solve_tff import SolveTffExperiment
class VarianceExperiment(SolveTffExperiment):
def __init__(self, force_reset=False, suffix=''):
SolveTffExperiment.__init__(self,
force_reset=force_reset,
suffix='Variance' + suffix)
@staticmethod
def get_experiment(setting='full', force_reset=False):
assert setting in ('full', 'light')
dataset = get_dataset()
# Set task parameters
data_params = dict(loc_source='bird',
wideband_src='car')
problem_params = dict(win_choice='gauss 256',
# win_choice=['gauss 256', 'hann 512'],
wb_to_loc_ratio_db=8,
n_iter_closing=3, n_iter_opening=3,
closing_first=True,
delta_mix_db=0,
delta_loc_db=40,
or_mask=True,
crop=None,
fig_dir=None)
solver_params = dict(tol_subregions=None,
tolerance_arrf=1e-3,
proba_arrf=1 - 1e-4,
rand_state=np.arange(100))
if setting == 'light':
problem_params['win_choice'] = 'gauss 64',
problem_params['crop'] = 4096
problem_params['delta_loc_db'] = 20
problem_params['wb_to_loc_ratio_db'] = 16
solver_params['tolerance_arrf'] = 1e-2
solver_params['proba_arrf'] = 1 - 1e-2
solver_params['rand_state'] = np.arange(3)
# Create Experiment
suffix = '' if setting == 'full' else '_Light'
exp = VarianceExperiment(force_reset=force_reset,
suffix=suffix)
exp.add_tasks(data_params=data_params,
problem_params=problem_params,
solver_params=solver_params)
exp.generate_tasks()
return exp
def create_and_run_light_experiment():
"""
Create a light experiment and run it
"""
exp = VarianceExperiment.get_experiment(setting='light', force_reset=True)
print('*' * 80)
print('Created experiment')
print(exp)
print(exp.display_status())
print('*' * 80)
print('Run task 0')
task_data = exp.get_task_data_by_id(idt=0)
print(task_data.keys())
print(task_data['task_params']['data_params'])
problem = exp.get_problem(
**task_data['task_params']['problem_params'])
print(problem)
print('*' * 80)
print('Run all')
exp.launch_experiment()
print('*' * 80)
print('Collect and plot results')
exp.collect_results()
# -*- coding: utf-8 -*-
# ######### COPYRIGHT #########
# Credits
# #######
#
# Copyright(c) 2020-2020
# ----------------------
#
# * Laboratoire d'Informatique et Systèmes <http://www.lis-lab.fr/>
# * Université d'Aix-Marseille <http://www.univ-amu.fr/>
# * Centre National de la Recherche Scientifique <http://www.cnrs.fr/>
# * Université de Toulon <http://www.univ-tln.fr/>
#
# Contributors
# ------------
#
# * `Valentin Emiya <mailto:valentin.emiya@lis-lab.fr>`_
# * `Ama Marina Krémé <mailto:ama-marina.kreme@lis-lab.fr>`_
#
# This package has been created thanks to the joint work with Florent Jaillet
# and Ronan Hamon on other packages.
#
# Description
# -----------
#
# Time frequency fading using Gabor multipliers
#
# Version
# -------
#
# * tffpy version = 0.1.3
#
# Licence
# -------
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
# ######### COPYRIGHT #########
"""
Run this script to handle the main experiment :class:`SolveTffExperiment`.
.. moduleauthor:: Valentin Emiya
"""
from yafe.utils import generate_oar_script
import matplotlib.pyplot as plt
from tffpy.experiments.exp_variance import \
VarianceExperiment, create_and_run_light_experiment
try:
experiment = VarianceExperiment.get_experiment(setting='full',
force_reset=False)
except RuntimeError:
experiment = None
except FileNotFoundError:
experiment = None
if __name__ == '__main__':
answer = 1
while answer > 0:
input_msg = '\n'.join(['1 - Create and run light experiment',
'2 - Display results of light experiment',
'3 - Full experiment: create full experiment',
'4 - Generate OAR script',
'5 - Full experiment: collect results',
'6 - Full experiment: download results',
'7 - Full experiment: display results',
'0 - Exit',
])
answer = int(input(input_msg))
if answer == 0:
break
elif answer == 1:
create_and_run_light_experiment()
elif answer == 2:
light_exp = VarianceExperiment.get_experiment(
setting='light', force_reset=False)
for idt in range(light_exp.n_tasks):
light_exp.plot_task(idt=idt, fontsize=16)
plt.close('all')
light_exp.plot_results()
elif answer == 3:
experiment = VarianceExperiment.get_experiment(
setting='full', force_reset=True)
experiment.display_status()
elif answer == 4:
experiment.display_status()
batch_size = int(input('Batch size (#tasks per job)?'))
generate_oar_script(script_file_path=__file__,
xp_var_name='experiment',
batch_size=batch_size,
oar_walltime='01:00:00',
activate_env_command='source activate py36',
use_gpu=False)
elif answer == 5:
experiment.collect_results()
experiment.display_status()
elif answer == 6:
to_dir = str(experiment.xp_path)
from_dir = \
'/data1/home/valentin.emiya/data_exp/SolveTffExperiment/'
print('Run:')
print(' '.join(['rsync', '-rv',
'valentin.emiya@sms-ext.lis-lab.fr:'
+ from_dir,
to_dir]))
print('Or (less files):')
print(' '.join(['rsync', '-rv',
'valentin.emiya@sms-ext.lis-lab.fr:'
+ from_dir
+ '*.*',
to_dir]))
elif answer == 7:
experiment.plot_results()
experiment.display_status()
else:
print('Unknown answer: ' + str(answer))
...@@ -138,7 +138,7 @@ class GabMulTff: ...@@ -138,7 +138,7 @@ class GabMulTff:
""" """
return len(self.u_mat_list) return len(self.u_mat_list)
def compute_decomposition(self, tolerance_arrf, proba_arrf): def compute_decomposition(self, tolerance_arrf, proba_arrf, rand_state=0):
""" """
Decompose each Gabor multiplier using a random EVD Decompose each Gabor multiplier using a random EVD
...@@ -160,8 +160,16 @@ class GabMulTff: ...@@ -160,8 +160,16 @@ class GabMulTff:
proba_arrf : float proba_arrf : float
Probability of error for Probability of error for
:py:func:`~skpomade.range_approximation.adaptive_randomized_range_finder` :py:func:`~skpomade.range_approximation.adaptive_randomized_range_finder`
rand_state : RandomState, int or None
If RandomState, random generator.
If int or None, random seed used to initialize the pseudo-random
number generator.
""" """
if rand_state is None:
rand_state = np.random.RandomState(None)
if np.issubdtype(type(rand_state), np.dtype(int).type):
rand_state = np.random.RandomState(rand_state)
for i in range(self.n_areas): for i in range(self.n_areas):
print('Random EVD of Gabor multiplier #{}'.format(i)) print('Random EVD of Gabor multiplier #{}'.format(i))
print('#coefs in mask: {} ({:.1%} missing)' print('#coefs in mask: {} ({:.1%} missing)'
...@@ -172,7 +180,8 @@ class GabMulTff: ...@@ -172,7 +180,8 @@ class GabMulTff:
q_mat = adaptive_randomized_range_finder(a=self.gabmul_list[i], q_mat = adaptive_randomized_range_finder(a=self.gabmul_list[i],
tolerance=tolerance_arrf, tolerance=tolerance_arrf,
proba=proba_arrf, r=None, proba=proba_arrf, r=None,
rand_state=0, n_cols_Q=32) rand_state=rand_state,
n_cols_Q=32)
self.t_arrf[i] = perf_counter() - t0 self.t_arrf[i] = perf_counter() - t0
print('Q shape:', q_mat.shape) print('Q shape:', q_mat.shape)
t0 = perf_counter() t0 = perf_counter()
...@@ -188,7 +197,7 @@ class GabMulTff: ...@@ -188,7 +197,7 @@ class GabMulTff:
self.uh_x_list[i] = self.u_mat_list[i].T.conj() @ self.x_mix self.uh_x_list[i] = self.u_mat_list[i].T.conj() @ self.x_mix
self.t_uh_x[i] = perf_counter() - t0 self.t_uh_x[i] = perf_counter() - t0
def compute_decomposition_fixed_rank(self, rank): def compute_decomposition_fixed_rank(self, rank, rand_state=0):
""" """
Decompose each Gabor multiplier using a random EVD with given rank Decompose each Gabor multiplier using a random EVD with given rank
...@@ -201,7 +210,16 @@ class GabMulTff: ...@@ -201,7 +210,16 @@ class GabMulTff:
---------- ----------
rank : int rank : int
Rank of the decompostion Rank of the decompostion
rand_state : RandomState, int or None
If RandomState, random generator.
If int or None, random seed used to initialize the pseudo-random
number generator.
""" """
if rand_state is None:
rand_state = np.random.RandomState(None)
if np.issubdtype(type(rand_state), np.dtype(int).type):
rand_state = np.random.RandomState(rand_state)
t_rrf = [None for i in range(self.n_areas)] t_rrf = [None for i in range(self.n_areas)]
t_evdn = [None for i in range(self.n_areas)] t_evdn = [None for i in range(self.n_areas)]
t_uh_x = [None for i in range(self.n_areas)] t_uh_x = [None for i in range(self.n_areas)]
...@@ -214,7 +232,7 @@ class GabMulTff: ...@@ -214,7 +232,7 @@ class GabMulTff:
t0 = perf_counter() t0 = perf_counter()
q_mat = randomized_range_finder(a=self.gabmul_list[i], q_mat = randomized_range_finder(a=self.gabmul_list[i],
n_l=rank, n_l=rank,
rand_state=0) rand_state=rand_state)
t_rrf[i] = perf_counter() - t0 t_rrf[i] = perf_counter() - t0
print('Q shape:', q_mat.shape) print('Q shape:', q_mat.shape)
t0 = perf_counter() t0 = perf_counter()
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment