opeltre / revert Goto Github PK
View Code? Open in Web Editor NEWRevert
License: MIT License
Revert
License: MIT License
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.
Define a parent class Twins
for siamese networks,
subclass it for BarlowTwins
and VICReg
overriding loss functions
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
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
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
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.
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>'
dill
(https://pypi.org/project/dill/) permettant de pickle
des types supplémentairesmodel.loss
(s'inspirer de twins
?)revert/revert/infusion/dataset.py
Line 79 in 368e8a7
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.
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
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.
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).
nn.Sequential
: https://pytorch.org/docs/stable/generated/torch.nn.Sequential.htmlEn 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.
See this file: 'inf_20140721123111_INF2'
The filtering leaves streaks
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.