annotate data_generation/transformations/DistorsionGauss.py @ 613:5e481b224117

fix the reading of PNIST dataset following Dumi compression of the data.
author Frederic Bastien <nouiz@nouiz.org>
date Thu, 06 Jan 2011 13:57:05 -0500
parents 1f5937e9e530
children
rev   line source
47
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
1 #!/usr/bin/python
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
2 # coding: utf-8
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
3
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
4 '''
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
5 Ajout d'une composante aleatoire dans chaque pixel de l'image.
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
6 C'est une distorsion gaussienne de moyenne 0 et d'écart type complexity/10
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
7
90
e352a98fcc0a Il y a maintenant une proba de 0.3 d'effectuer le bruitage. De plus, comme cette nouvelle fonctionnalite demande un parametre non-deterministe, les deux fonctions 'determined_by_complexity' ont ete enlevees. Le module se comporte comme un module conventionnel
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 77
diff changeset
8 Il y a 30% d'effectuer le bruitage
e352a98fcc0a Il y a maintenant une proba de 0.3 d'effectuer le bruitage. De plus, comme cette nouvelle fonctionnalite demande un parametre non-deterministe, les deux fonctions 'determined_by_complexity' ont ete enlevees. Le module se comporte comme un module conventionnel
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 77
diff changeset
9
47
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
10 Sylvain Pannetier Lebeuf dans le cadre de IFT6266, hiver 2010
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
11
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
12 '''
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
13
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
14 import numpy
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
15 import random
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
16
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
17 class DistorsionGauss():
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
18
150
8008f4d31869 Rajout d'un seed random et d'une fonction get_seed
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 117
diff changeset
19 def __init__(self,seed=3459):
47
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
20 self.ecart_type=0.1 #L'ecart type de la gaussienne
90
e352a98fcc0a Il y a maintenant une proba de 0.3 d'effectuer le bruitage. De plus, comme cette nouvelle fonctionnalite demande un parametre non-deterministe, les deux fonctions 'determined_by_complexity' ont ete enlevees. Le module se comporte comme un module conventionnel
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 77
diff changeset
21 self.effectuer=1 #1=on effectue et 0=rien faire
150
8008f4d31869 Rajout d'un seed random et d'une fonction get_seed
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 117
diff changeset
22 self.seed=seed
8008f4d31869 Rajout d'un seed random et d'une fonction get_seed
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 117
diff changeset
23
8008f4d31869 Rajout d'un seed random et d'une fonction get_seed
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 117
diff changeset
24 #Les deux generateurs sont de types differents, avoir la meme seed n'a pas d'influence
155
7640cb31cf1f Enlevé les re-seed constants, interfère avec les autres modules
boulanni <nicolas_boulanger@hotmail.com>
parents: 150
diff changeset
25 #numpy.random.seed(self.seed)
7640cb31cf1f Enlevé les re-seed constants, interfère avec les autres modules
boulanni <nicolas_boulanger@hotmail.com>
parents: 150
diff changeset
26 #random.seed(self.seed)
47
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
27
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
28 def get_settings_names(self):
105
901ab3329064 Parametre deterministe retourne dans les fonctions '_determined_by_complexity' et le parametre stochastique retourne dans les fonctions conventionnelles
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 90
diff changeset
29 return ['effectuer']
77
aee278ebc827 Mise a niveau specifications parametres deterministes et nouvelle normalisation des images
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 47
diff changeset
30
150
8008f4d31869 Rajout d'un seed random et d'une fonction get_seed
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 117
diff changeset
31 def get_seed(self):
8008f4d31869 Rajout d'un seed random et d'une fonction get_seed
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 117
diff changeset
32 return self.seed
8008f4d31869 Rajout d'un seed random et d'une fonction get_seed
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 117
diff changeset
33
105
901ab3329064 Parametre deterministe retourne dans les fonctions '_determined_by_complexity' et le parametre stochastique retourne dans les fonctions conventionnelles
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 90
diff changeset
34 def get_settings_names_determined_by_complexity(self,complexity):
901ab3329064 Parametre deterministe retourne dans les fonctions '_determined_by_complexity' et le parametre stochastique retourne dans les fonctions conventionnelles
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 90
diff changeset
35 return ['ecart_type']
47
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
36
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
37 def regenerate_parameters(self, complexity):
117
c9d680d9a908 changed again the variance scaling for Distorsion Gauss, come back to the original
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 112
diff changeset
38 self.ecart_type=float(complexity)/10
90
e352a98fcc0a Il y a maintenant une proba de 0.3 d'effectuer le bruitage. De plus, comme cette nouvelle fonctionnalite demande un parametre non-deterministe, les deux fonctions 'determined_by_complexity' ont ete enlevees. Le module se comporte comme un module conventionnel
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 77
diff changeset
39 self.effectuer =numpy.random.binomial(1,0.3) ##### On a 30% de faire un bruit #####
47
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
40 return self._get_current_parameters()
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
41
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
42 def _get_current_parameters(self):
105
901ab3329064 Parametre deterministe retourne dans les fonctions '_determined_by_complexity' et le parametre stochastique retourne dans les fonctions conventionnelles
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 90
diff changeset
43 return [self.effectuer]
47
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
44
105
901ab3329064 Parametre deterministe retourne dans les fonctions '_determined_by_complexity' et le parametre stochastique retourne dans les fonctions conventionnelles
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 90
diff changeset
45 def get_parameters_determined_by_complexity(self,complexity):
901ab3329064 Parametre deterministe retourne dans les fonctions '_determined_by_complexity' et le parametre stochastique retourne dans les fonctions conventionnelles
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 90
diff changeset
46 return [float(complexity)/10]
47
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
47
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
48 def transform_image(self, image):
90
e352a98fcc0a Il y a maintenant une proba de 0.3 d'effectuer le bruitage. De plus, comme cette nouvelle fonctionnalite demande un parametre non-deterministe, les deux fonctions 'determined_by_complexity' ont ete enlevees. Le module se comporte comme un module conventionnel
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 77
diff changeset
49 if self.effectuer == 0:
e352a98fcc0a Il y a maintenant une proba de 0.3 d'effectuer le bruitage. De plus, comme cette nouvelle fonctionnalite demande un parametre non-deterministe, les deux fonctions 'determined_by_complexity' ont ete enlevees. Le module se comporte comme un module conventionnel
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 77
diff changeset
50 return image
e352a98fcc0a Il y a maintenant une proba de 0.3 d'effectuer le bruitage. De plus, comme cette nouvelle fonctionnalite demande un parametre non-deterministe, les deux fonctions 'determined_by_complexity' ont ete enlevees. Le module se comporte comme un module conventionnel
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 77
diff changeset
51
47
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
52 image=image.reshape(1024,1)
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
53 aleatoire=numpy.zeros((1024,1)).astype('float32')
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
54 for i in xrange(0,1024):
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
55 aleatoire[i]=float(random.gauss(0,self.ecart_type))
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
56 image=image+aleatoire
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
57
77
aee278ebc827 Mise a niveau specifications parametres deterministes et nouvelle normalisation des images
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 47
diff changeset
58
aee278ebc827 Mise a niveau specifications parametres deterministes et nouvelle normalisation des images
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 47
diff changeset
59 #Ramener tout entre 0 et 1. Ancienne facon de normaliser.
aee278ebc827 Mise a niveau specifications parametres deterministes et nouvelle normalisation des images
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 47
diff changeset
60 #Resultats moins interessant je trouve.
aee278ebc827 Mise a niveau specifications parametres deterministes et nouvelle normalisation des images
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 47
diff changeset
61 ## if numpy.min(image) < 0:
aee278ebc827 Mise a niveau specifications parametres deterministes et nouvelle normalisation des images
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 47
diff changeset
62 ## image-=numpy.min(image)
aee278ebc827 Mise a niveau specifications parametres deterministes et nouvelle normalisation des images
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 47
diff changeset
63 ## if numpy.max(image) > 1:
aee278ebc827 Mise a niveau specifications parametres deterministes et nouvelle normalisation des images
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 47
diff changeset
64 ## image/=numpy.max(image)
aee278ebc827 Mise a niveau specifications parametres deterministes et nouvelle normalisation des images
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 47
diff changeset
65
aee278ebc827 Mise a niveau specifications parametres deterministes et nouvelle normalisation des images
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 47
diff changeset
66 for i in xrange(0,1024):
aee278ebc827 Mise a niveau specifications parametres deterministes et nouvelle normalisation des images
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 47
diff changeset
67 image[i]=min(1,max(0,image[i]))
47
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
68
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
69 return image.reshape(32,32)
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
70
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
71
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
72 #---TESTS---
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
73
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
74 def _load_image():
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
75 f = open('/home/sylvain/Dropbox/Msc/IFT6266/donnees/lower_test_data.ft') #Le jeu de donnees est en local.
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
76 d = ft.read(f)
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
77 w=numpy.asarray(d[random.randint(0,100)])
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
78 return (w/255.0).astype('float')
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
79
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
80 def _test(complexite):
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
81 img=_load_image()
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
82 transfo = DistorsionGauss()
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
83 pylab.imshow(img.reshape((32,32)))
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
84 pylab.show()
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
85 print transfo.get_settings_names()
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
86 print transfo.regenerate_parameters(complexite)
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
87
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
88 img_trans=transfo.transform_image(img)
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
89
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
90 pylab.imshow(img_trans.reshape((32,32)))
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
91 pylab.show()
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
92
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
93
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
94 if __name__ == '__main__':
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
95 from pylearn.io import filetensor as ft
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
96 import pylab
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
97 for i in xrange(0,5):
77
aee278ebc827 Mise a niveau specifications parametres deterministes et nouvelle normalisation des images
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 47
diff changeset
98 _test(0.5)
47
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
99
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
100