def test_kalman_vf(self):
        te = dbfn.TaskEntry(2424, dbname='testing')
        dec_record = te.decoder_record
        dec = dec_record.load()
      
        training_block = dbfn.TaskEntry(dec_record.entry_id, dbname='testing')
        files = training_block.datafiles
        print(files)
      
        from riglib.bmi import extractor
        extractor_cls = extractor.BinnedSpikeCountsExtractor
        extractor_kwargs = dict()
        extractor_kwargs['n_subbins'] = dec.n_subbins 

        dec_new = train.train_KFDecoder(files, extractor_cls, extractor_kwargs, train.get_plant_pos_vel, dec.ssm, dec.units, update_rate=dec.binlen, kin_source='task', pos_key='cursor', vel_key=None, tslice=dec.tslice)
        for attr in dec.filt.model_attrs:
            old_attr = getattr(dec.filt, attr)
            new_attr = getattr(dec_new.filt, attr)
            self.assertTrue(np.all((old_attr - new_attr) < 1e-10))

        self.assertTrue(np.all(np.abs(dec_new.mFR - dec.mFR) < 1e-10))
        self.assertTrue(np.all(np.abs(dec_new.sdFR - dec.sdFR) < 1e-10))

        self.assertTrue(np.array_equal(dec_new.units, dec.units))
        self.assertTrue(np.array_equal(dec_new.bounding_box[0], dec.bounding_box[0]))
        self.assertTrue(np.array_equal(dec_new.bounding_box[1], dec.bounding_box[1]))
        self.assertTrue(dec_new.states == dec.states)
        self.assertTrue(dec_new.states_to_bound == dec.states_to_bound)
        self.assertTrue(np.array_equal(dec_new.drives_neurons, dec.drives_neurons))
Esempio n. 2
0
    def load_decoder(self):
        '''
        Instantiate the neural encoder and "train" the decoder
        '''
        try:
            self.encoder = pickle.load(
                open(
                    os.path.expandvars(
                        '/storage/task_data/JoystickDrivenCursorOPS/encoder1.pkl'
                    )))
            self.decoder = pickle.load(
                open(
                    os.path.expandvars(
                        '/storage/task_data/JoystickDrivenCursorOPS/decoder1.pkl'
                    )))
        except:
            print "recreating encoder/decoder"
            from riglib.bmi import sim_neurons
            from riglib.bmi import train
            n_units = 5
            encoder = sim_neurons.CosEnc(n_neurons=n_units,
                                         baselines=2,
                                         mod_depth=3)

            n_samples = 10000
            vel = np.random.normal(size=(n_samples, 2)) * 4
            spike_counts = np.zeros([n_units, n_samples])
            for k in range(n_samples):
                spike_counts[:, k] = encoder(vel[k])

            ssm = train.endpt_2D_state_space
            kin = np.zeros([6, n_samples])
            kin[ssm.train_inds, :] = vel.T

            units = np.vstack([np.arange(n_units), np.ones(n_units)]).T
            self.decoder = train.train_KFDecoder(ssm, kin, spike_counts, units)
            self.encoder = encoder

            pickle.dump(
                self.encoder,
                open(
                    os.path.expandvars(
                        '/storage/task_data/JoystickDrivenCursorOPS/encoder1.pkl'
                    ), 'w'))
            pickle.dump(
                self.decoder,
                open(
                    os.path.expandvars(
                        '/storage/task_data/JoystickDrivenCursorOPS/decoder1.pkl'
                    ), 'w'))
Esempio n. 3
0
    extractor_cls = extractor.LFPButterBPFPowerExtractor
    extractor_kwargs = dict()
    extractor_kwargs['channels'] = channels

# list of DataFile objects
datafiles = models.DataFile.objects.filter(entry_id=entry)

# key: a string representing a system name (e.g., 'plexon', 'blackrock', 'task', 'hdf')
# value: a single filename, or a list of filenames if there are more than one for that system
files = dict()
system_names = set(d.system.name for d in datafiles)
for system_name in system_names:
    filenames = [
        d.get_path() for d in datafiles if d.system.name == system_name
    ]
    if system_name == 'blackrock':
        files[system_name] = filenames  # list of (one or more) files
    else:
        assert (len(filenames) == 1)
        files[system_name] = filenames[0]  # just one file

dec = train.train_KFDecoder(files,
                            extractor_cls,
                            extractor_kwargs,
                            train.get_plant_pos_vel,
                            ssm,
                            units,
                            update_rate=binlen,
                            tslice=tslice,
                            pos_key=pos_key)
if TRAIN_SPIKE:
    channels = range(1, 7)
    units = np.hstack([np.array(channels).reshape(-1,1), np.ones((len(channels),1), dtype=np.int)])
    extractor_cls = extractor.BinnedSpikeCountsExtractor
    extractor_kwargs = dict()
    extractor_kwargs['units'] = units
    extractor_kwargs['n_subbins'] = 1
else:  # train an LFP decoder
    channels = np.array(range(1, 9))
    units = np.hstack([channels.reshape(-1, 1), np.zeros(channels.reshape(-1, 1).shape, dtype=np.int32)])
    extractor_cls = extractor.LFPButterBPFPowerExtractor
    extractor_kwargs = dict()
    extractor_kwargs['channels'] = channels

# list of DataFile objects
datafiles = models.DataFile.objects.filter(entry_id=entry)

# key: a string representing a system name (e.g., 'plexon', 'blackrock', 'task', 'hdf')
# value: a single filename, or a list of filenames if there are more than one for that system
files = dict()
system_names = set(d.system.name for d in datafiles)
for system_name in system_names:
    filenames = [d.get_path() for d in datafiles if d.system.name == system_name]
    if system_name == 'blackrock':
        files[system_name] = filenames  # list of (one or more) files
    else:
        assert(len(filenames) == 1)
        files[system_name] = filenames[0]  # just one file

dec = train.train_KFDecoder(files, extractor_cls, extractor_kwargs, train.get_plant_pos_vel, ssm, units, update_rate=binlen, tslice=tslice, pos_key=pos_key)
Esempio n. 5
0
import pickle
from riglib.bmi import train
pkl = pickle.load(open('/home/tecnalia/code/bmi3d/tests/ibmi/dec_br.p'))
from ismore.ismore_bmi_lib import StateSpaceArmAssist
import namelist
kin_ext = namelist.kin_extractors[pkl['kin_extractor']]


files = pkl['files']
extractor_cls = pkl['extractor_cls']
extractor_kwargs = pkl['extractor_kwargs']
kin_extractor = kin_ext
ssm = pkl['ssm']
units = pkl['units']
update_rate=0.1
tslice=None
kin_source='task'
pos_key='plant_pos'
vel_key=None

dec = train.train_KFDecoder(pkl['files'], 
					pkl['extractor_cls'], 
					pkl['extractor_kwargs'], 
					kin_ext, 
					StateSpaceArmAssist(),
					pkl['units'],
					update_rate=0.1, 
					tslice=None, 
					kin_source='task', 
					pos_key='plant_pos', 
					vel_key=None)