Coder Social home page Coder Social logo

revert's People

Contributors

adrienhannon avatar b-brebion avatar guillaumebressan avatar m-m-placek avatar opeltre avatar

Stargazers

 avatar  avatar

Watchers

 avatar  avatar

Forkers

m-m-placek

revert's Issues

Conditional GANs for pulse generation

Implement a section of a BarlowTwins/VICReg pretrained encoder by a conditional GAN.

x     : pulse ------fibration------------> E(x) : code
G(y') : pulse <-------section--------------- y' : code

In order to beat the discriminator D(x, y), the couple G(y), y must be consistent with the encoder fibration E, i.e. y =~ E(G(y)) while G(y) should also belong to the true data distribution of x.

N.B. when E : x -> y is constant this is like training a simple GAN.

VICReg implementation

Define a parent class Twins for siamese networks,
subclass it for BarlowTwins and VICReg overriding loss functions

Module.save

Comportement actuel

Pour l'instant ConvNet définit une méthode .save() qui aggrège le model.state_dict() avec les paramètres de construction du réseau dans un dictionnaire ad hoc...

Apparemment torch.load permet de charger directement le modèle e.g. model = torch.load("convnet-xxx.pt") qui aurait été sauvegardé via torch.save(model, "convnet-xxx.pt") pourvu que la classe ConvNet ait été importée dans le scope local

Todo

Ecrire les méthodes .load et .save dans models/module.py pour ne plus reposer sur ce comportement ad hoc, tester et supprimer ensuite celles de ConvNet

map PCMRI files to tensor/json files

Write a script reading all PCMRI files, performs a few checks, and saves data either as a large (N_pat, N_channels, Npts) tensor
or as a directory of JSON files

Right now, loading a file requires to read the text file exported by the Amiens software

Extracting timestamps from intervals or events

I'm now looking carefully at the code for extracting intervals or events. I can see that it is done via dataset.filters() method, which ignores entire sources of intervals or events (e.g. "aux/ICM+/icmevents") when there is something 'non-standard' in any entry in the source. For example, you assume that there should always be StartTime and EndTime attributes present. This assumption causes troubles because no all events are expected to have EndTime. Below, there is a case where CSF Infusion event fulfills your assumption, but the other event doesn't have EndTime attribute, which throws an exception and makes that nothing from "aux/ICM+/icmevents" is saved to the resulting json file. We will need to fix this.

Yet another potential source of infusion events that is not covered in the code, I think, is "/annotations/notes". If, after fixing the code, there are still many files that didn't have infusion events elsewhere, it will be a good idea to explore this source.

EndTime attrib missing - unwanted exception

Can't pickle local object with Pipe and ConvNet

Erreur

Erreur lorsque l'on cherche à sauvegarder le modèle Pipe(base, head) avec model.save()

Traceback (most recent call last):
  File "/home/adrien/Documents/Stage/revert/revert/experiments/unshift_flows.py", line 61, in <module>
    main()
  File "/home/adrien/Documents/Stage/revert/revert/experiments/unshift_flows.py", line 51, in main
    convnet.save(args.output)
  File "/usr/local/lib/python3.9/site-packages/revert/models/module.py", line 86, in save
    torch.save(self, path)
  File "/usr/local/lib64/python3.9/site-packages/torch/serialization.py", line 380, in save
    _save(obj, opened_zipfile, pickle_module, pickle_protocol)
  File "/usr/local/lib64/python3.9/site-packages/torch/serialization.py", line 589, in _save
    pickler.dump(obj)
AttributeError: Can't pickle local object 'getModel.<locals>.<lambda>'

Résolutions possibles

  • Utiliser la librairie dill (https://pypi.org/project/dill/) permettant de pickle des types supplémentaires
  • Changer la façon dont est attribuée model.loss (s'inspirer de twins ?)

PCMR flows - unshift/unshuffle tasks

En suivant grossièrement le modèle de experiments/twins.py, écrire un script d'entraînement sur les tâches de recalage temporel / réidentification des canaux.

Usage

Regarder en particulier l. 45--62 et utiliser la même convention de nommage pour l'option --writer et l'endroit ou sauvegarder l'état final du modèle (éventuellement générer automatiquement l'argument en question). L'argument --state servirait quant à lui à charger l'état initial du modèle qui viendrait d'un réseau préentraîné (par exemple sur la tâche unshuffle)

$ python unshift_flows.py -w "convnet-xxx"      # avec 'xxx' = 'apr19-1', 'apr19-2' ... par défaut 
$ python unshift_flows.py   
# => création de 2 fichiers:
#      - "runs/convnet-xxx"         pour tensorboard
#      - "models/convnet-xxx.pt"    pour l'état final du modèle 
$ python unshift_flows.py -s "convnet-xxx" -w "convnet-yyy"
# => chargement du modèle existant convnet-xxx

Définition des tâches

Dans un deuxième temps, lla fonction main() pourra prendre en argument l'enchaînement des tâches prétextes et leurs paramètres (arguments stdev pour les shifts, learning rates et decay rates, nombre d'époques, etc.), en s'inspirant de la fonction episodes() l.76

On pourra ensuite lire ces arguments depuis un json ou autre format, pour en exécuter à la suite, et surtout sauvegarder ce fichier json dans tensorboard ou à côté afin de pouvoir retrouver les hyperparamètres associés à chaque run.

Architecture du modèle

Un des principes de l'apprentissage auto-supervisé est d'entraîner des réseaux de la forme f = h . g de la forme

          g            h
f :  X  ----->   Y  ------> Z
#  entrée  >  représ°  >  sortie

où la représentation interne y in Y est conservée au cours du temps tandis que la sortie z in Z est adaptée à chaque tâche prétexte. Plus la représentation est meilleure, plus il est facile de prédire la sortie à partir d'une architecture simple de la "tête" du réseau h : Y -> Z. Ainsi chaque tâche prétexte force le réseau à améliorer l'expressivité de sa représentation interne, et la diversité des tâches contribuera à la qualité du préentraînement.

Il est important d'avoir une invariance par translations globales de la représentation du réseau. Cela forcerait le convnet g : X -> Y à avoir une couche de sortie de la forme (Nc, Npts) = (Nc, 1), i.e. de provenir d'un argument layers de la forme:

layers = [[Npts, 6, w_in],   # Npts = 32 ou 64
          ...
          [1, dim_out, 1]]    

model = ConvNet(layers, ...)

Il faut ensuite le composer avec un autre modèle, par exemple de la forme:

head = ConvNet([[1, dim_out, 1], [1, dim_task, 1]]) 

qui se comporte comme une couche dense de taille (dim_out, dim_task).

En plus de stocker l'état de g dans "models/convnet-xxx.pt" on pourra aussi stocker celui de h dans un fichier
"models/head-xxx.pt" voire prompter l'utilisateur pour lui demander lesquels stocker.

filter streaks

See this file: 'inf_20140721123111_INF2'
The filtering leaves streaks

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.