Mercurial > ift6266
annotate deep/stacked_dae/sgd_optimization.py @ 204:e1f5f66dd7dd
Changé le coût de reconstruction pour stabilité numérique, en ajoutant une petite constante dans le log.
author | fsavard |
---|---|
date | Thu, 04 Mar 2010 08:18:42 -0500 |
parents | e656edaedb48 |
children | acb942530923 |
rev | line source |
---|---|
131
5c79a2557f2f
Un peu de ménage dans code pour stacked DAE, splitté en fichiers dans un nouveau sous-répertoire.
savardf
parents:
diff
changeset
|
1 #!/usr/bin/python |
5c79a2557f2f
Un peu de ménage dans code pour stacked DAE, splitté en fichiers dans un nouveau sous-répertoire.
savardf
parents:
diff
changeset
|
2 # coding: utf-8 |
5c79a2557f2f
Un peu de ménage dans code pour stacked DAE, splitté en fichiers dans un nouveau sous-répertoire.
savardf
parents:
diff
changeset
|
3 |
139
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
4 # Generic SdA optimization loop, adapted from the deeplearning.net tutorial |
131
5c79a2557f2f
Un peu de ménage dans code pour stacked DAE, splitté en fichiers dans un nouveau sous-répertoire.
savardf
parents:
diff
changeset
|
5 |
5c79a2557f2f
Un peu de ménage dans code pour stacked DAE, splitté en fichiers dans un nouveau sous-répertoire.
savardf
parents:
diff
changeset
|
6 import numpy |
5c79a2557f2f
Un peu de ménage dans code pour stacked DAE, splitté en fichiers dans un nouveau sous-répertoire.
savardf
parents:
diff
changeset
|
7 import theano |
5c79a2557f2f
Un peu de ménage dans code pour stacked DAE, splitté en fichiers dans un nouveau sous-répertoire.
savardf
parents:
diff
changeset
|
8 import time |
191
3632e6258642
Ajouts mineurs à stacked_dae, juste printé l'heure je crois.
fsavard
parents:
186
diff
changeset
|
9 import datetime |
131
5c79a2557f2f
Un peu de ménage dans code pour stacked DAE, splitté en fichiers dans un nouveau sous-répertoire.
savardf
parents:
diff
changeset
|
10 import theano.tensor as T |
139
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
11 import sys |
131
5c79a2557f2f
Un peu de ménage dans code pour stacked DAE, splitté en fichiers dans un nouveau sous-répertoire.
savardf
parents:
diff
changeset
|
12 |
5c79a2557f2f
Un peu de ménage dans code pour stacked DAE, splitté en fichiers dans un nouveau sous-répertoire.
savardf
parents:
diff
changeset
|
13 from jobman import DD |
139
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
14 import jobman, jobman.sql |
131
5c79a2557f2f
Un peu de ménage dans code pour stacked DAE, splitté en fichiers dans un nouveau sous-répertoire.
savardf
parents:
diff
changeset
|
15 |
5c79a2557f2f
Un peu de ménage dans code pour stacked DAE, splitté en fichiers dans un nouveau sous-répertoire.
savardf
parents:
diff
changeset
|
16 from stacked_dae import SdA |
5c79a2557f2f
Un peu de ménage dans code pour stacked DAE, splitté en fichiers dans un nouveau sous-répertoire.
savardf
parents:
diff
changeset
|
17 |
139
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
18 def shared_dataset(data_xy): |
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
19 data_x, data_y = data_xy |
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
20 #shared_x = theano.shared(numpy.asarray(data_x, dtype=theano.config.floatX)) |
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
21 #shared_y = theano.shared(numpy.asarray(data_y, dtype=theano.config.floatX)) |
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
22 #shared_y = T.cast(shared_y, 'int32') |
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
23 shared_x = theano.shared(data_x) |
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
24 shared_y = theano.shared(data_y) |
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
25 return shared_x, shared_y |
131
5c79a2557f2f
Un peu de ménage dans code pour stacked DAE, splitté en fichiers dans un nouveau sous-répertoire.
savardf
parents:
diff
changeset
|
26 |
185
b9ea8e2d071a
Enlevé ce qui concernait la réutilisation de résultats de préentraînement (trop compliqué pour peu de bénéfice: c'est le finetuning qui est vraiment long
fsavard
parents:
167
diff
changeset
|
27 class DummyMux(): |
b9ea8e2d071a
Enlevé ce qui concernait la réutilisation de résultats de préentraînement (trop compliqué pour peu de bénéfice: c'est le finetuning qui est vraiment long
fsavard
parents:
167
diff
changeset
|
28 def append(self, param1, param2): |
b9ea8e2d071a
Enlevé ce qui concernait la réutilisation de résultats de préentraînement (trop compliqué pour peu de bénéfice: c'est le finetuning qui est vraiment long
fsavard
parents:
167
diff
changeset
|
29 pass |
b9ea8e2d071a
Enlevé ce qui concernait la réutilisation de résultats de préentraînement (trop compliqué pour peu de bénéfice: c'est le finetuning qui est vraiment long
fsavard
parents:
167
diff
changeset
|
30 |
139
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
31 class SdaSgdOptimizer: |
185
b9ea8e2d071a
Enlevé ce qui concernait la réutilisation de résultats de préentraînement (trop compliqué pour peu de bénéfice: c'est le finetuning qui est vraiment long
fsavard
parents:
167
diff
changeset
|
32 def __init__(self, dataset, hyperparameters, n_ins, n_outs, input_divider=1.0, series_mux=None): |
139
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
33 self.dataset = dataset |
185
b9ea8e2d071a
Enlevé ce qui concernait la réutilisation de résultats de préentraînement (trop compliqué pour peu de bénéfice: c'est le finetuning qui est vraiment long
fsavard
parents:
167
diff
changeset
|
34 self.hp = hyperparameters |
139
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
35 self.n_ins = n_ins |
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
36 self.n_outs = n_outs |
186
d364a130b221
Ajout du code de base pour scalar_series. Modifications à stacked_dae: réglé un problème avec les input_divider (empêchait une optimisation), et ajouté utilisation des séries. Si j'avais pas déjà commité, aussi, j'ai enlevé l'histoire de réutilisation du pretraining: c'était compliqué (error prone) et ça créait des jobs beaucoup trop longues.
fsavard
parents:
185
diff
changeset
|
37 self.input_divider = input_divider |
185
b9ea8e2d071a
Enlevé ce qui concernait la réutilisation de résultats de préentraînement (trop compliqué pour peu de bénéfice: c'est le finetuning qui est vraiment long
fsavard
parents:
167
diff
changeset
|
38 |
b9ea8e2d071a
Enlevé ce qui concernait la réutilisation de résultats de préentraînement (trop compliqué pour peu de bénéfice: c'est le finetuning qui est vraiment long
fsavard
parents:
167
diff
changeset
|
39 if not series_mux: |
b9ea8e2d071a
Enlevé ce qui concernait la réutilisation de résultats de préentraînement (trop compliqué pour peu de bénéfice: c'est le finetuning qui est vraiment long
fsavard
parents:
167
diff
changeset
|
40 series_mux = DummyMux() |
b9ea8e2d071a
Enlevé ce qui concernait la réutilisation de résultats de préentraînement (trop compliqué pour peu de bénéfice: c'est le finetuning qui est vraiment long
fsavard
parents:
167
diff
changeset
|
41 print "No series multiplexer set" |
b9ea8e2d071a
Enlevé ce qui concernait la réutilisation de résultats de préentraînement (trop compliqué pour peu de bénéfice: c'est le finetuning qui est vraiment long
fsavard
parents:
167
diff
changeset
|
42 self.series_mux = series_mux |
131
5c79a2557f2f
Un peu de ménage dans code pour stacked DAE, splitté en fichiers dans un nouveau sous-répertoire.
savardf
parents:
diff
changeset
|
43 |
139
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
44 self.rng = numpy.random.RandomState(1234) |
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
45 |
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
46 self.init_datasets() |
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
47 self.init_classifier() |
185
b9ea8e2d071a
Enlevé ce qui concernait la réutilisation de résultats de préentraînement (trop compliqué pour peu de bénéfice: c'est le finetuning qui est vraiment long
fsavard
parents:
167
diff
changeset
|
48 |
b9ea8e2d071a
Enlevé ce qui concernait la réutilisation de résultats de préentraînement (trop compliqué pour peu de bénéfice: c'est le finetuning qui est vraiment long
fsavard
parents:
167
diff
changeset
|
49 sys.stdout.flush() |
139
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
50 |
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
51 def init_datasets(self): |
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
52 print "init_datasets" |
185
b9ea8e2d071a
Enlevé ce qui concernait la réutilisation de résultats de préentraînement (trop compliqué pour peu de bénéfice: c'est le finetuning qui est vraiment long
fsavard
parents:
167
diff
changeset
|
53 sys.stdout.flush() |
b9ea8e2d071a
Enlevé ce qui concernait la réutilisation de résultats de préentraînement (trop compliqué pour peu de bénéfice: c'est le finetuning qui est vraiment long
fsavard
parents:
167
diff
changeset
|
54 |
139
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
55 train_set, valid_set, test_set = self.dataset |
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
56 self.test_set_x, self.test_set_y = shared_dataset(test_set) |
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
57 self.valid_set_x, self.valid_set_y = shared_dataset(valid_set) |
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
58 self.train_set_x, self.train_set_y = shared_dataset(train_set) |
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
59 |
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
60 # compute number of minibatches for training, validation and testing |
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
61 self.n_train_batches = self.train_set_x.value.shape[0] / self.hp.minibatch_size |
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
62 self.n_valid_batches = self.valid_set_x.value.shape[0] / self.hp.minibatch_size |
192
e656edaedb48
Commented a few things, renamed the produit_croise_jobs function, replaced the cost function (NOT TESTED YET).
fsavard
parents:
191
diff
changeset
|
63 # remove last batch in case it's incomplete |
e656edaedb48
Commented a few things, renamed the produit_croise_jobs function, replaced the cost function (NOT TESTED YET).
fsavard
parents:
191
diff
changeset
|
64 self.n_test_batches = (self.test_set_x.value.shape[0] / self.hp.minibatch_size) - 1 |
131
5c79a2557f2f
Un peu de ménage dans code pour stacked DAE, splitté en fichiers dans un nouveau sous-répertoire.
savardf
parents:
diff
changeset
|
65 |
139
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
66 def init_classifier(self): |
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
67 print "Constructing classifier" |
185
b9ea8e2d071a
Enlevé ce qui concernait la réutilisation de résultats de préentraînement (trop compliqué pour peu de bénéfice: c'est le finetuning qui est vraiment long
fsavard
parents:
167
diff
changeset
|
68 |
192
e656edaedb48
Commented a few things, renamed the produit_croise_jobs function, replaced the cost function (NOT TESTED YET).
fsavard
parents:
191
diff
changeset
|
69 # we don't want to save arrays in DD objects, so |
e656edaedb48
Commented a few things, renamed the produit_croise_jobs function, replaced the cost function (NOT TESTED YET).
fsavard
parents:
191
diff
changeset
|
70 # we recreate those arrays here |
e656edaedb48
Commented a few things, renamed the produit_croise_jobs function, replaced the cost function (NOT TESTED YET).
fsavard
parents:
191
diff
changeset
|
71 nhl = self.hp.num_hidden_layers |
e656edaedb48
Commented a few things, renamed the produit_croise_jobs function, replaced the cost function (NOT TESTED YET).
fsavard
parents:
191
diff
changeset
|
72 layers_sizes = [self.hp.hidden_layers_sizes] * nhl |
e656edaedb48
Commented a few things, renamed the produit_croise_jobs function, replaced the cost function (NOT TESTED YET).
fsavard
parents:
191
diff
changeset
|
73 corruption_levels = [self.hp.corruption_levels] * nhl |
e656edaedb48
Commented a few things, renamed the produit_croise_jobs function, replaced the cost function (NOT TESTED YET).
fsavard
parents:
191
diff
changeset
|
74 |
139
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
75 # construct the stacked denoising autoencoder class |
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
76 self.classifier = SdA( \ |
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
77 train_set_x= self.train_set_x, \ |
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
78 train_set_y = self.train_set_y,\ |
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
79 batch_size = self.hp.minibatch_size, \ |
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
80 n_ins= self.n_ins, \ |
192
e656edaedb48
Commented a few things, renamed the produit_croise_jobs function, replaced the cost function (NOT TESTED YET).
fsavard
parents:
191
diff
changeset
|
81 hidden_layers_sizes = layers_sizes, \ |
139
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
82 n_outs = self.n_outs, \ |
192
e656edaedb48
Commented a few things, renamed the produit_croise_jobs function, replaced the cost function (NOT TESTED YET).
fsavard
parents:
191
diff
changeset
|
83 corruption_levels = corruption_levels,\ |
139
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
84 rng = self.rng,\ |
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
85 pretrain_lr = self.hp.pretraining_lr, \ |
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
86 finetune_lr = self.hp.finetuning_lr,\ |
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
87 input_divider = self.input_divider ) |
131
5c79a2557f2f
Un peu de ménage dans code pour stacked DAE, splitté en fichiers dans un nouveau sous-répertoire.
savardf
parents:
diff
changeset
|
88 |
185
b9ea8e2d071a
Enlevé ce qui concernait la réutilisation de résultats de préentraînement (trop compliqué pour peu de bénéfice: c'est le finetuning qui est vraiment long
fsavard
parents:
167
diff
changeset
|
89 sys.stdout.flush() |
b9ea8e2d071a
Enlevé ce qui concernait la réutilisation de résultats de préentraînement (trop compliqué pour peu de bénéfice: c'est le finetuning qui est vraiment long
fsavard
parents:
167
diff
changeset
|
90 |
139
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
91 def train(self): |
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
92 self.pretrain() |
185
b9ea8e2d071a
Enlevé ce qui concernait la réutilisation de résultats de préentraînement (trop compliqué pour peu de bénéfice: c'est le finetuning qui est vraiment long
fsavard
parents:
167
diff
changeset
|
93 self.finetune() |
139
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
94 |
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
95 def pretrain(self): |
191
3632e6258642
Ajouts mineurs à stacked_dae, juste printé l'heure je crois.
fsavard
parents:
186
diff
changeset
|
96 print "STARTING PRETRAINING, time = ", datetime.datetime.now() |
185
b9ea8e2d071a
Enlevé ce qui concernait la réutilisation de résultats de préentraînement (trop compliqué pour peu de bénéfice: c'est le finetuning qui est vraiment long
fsavard
parents:
167
diff
changeset
|
97 sys.stdout.flush() |
139
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
98 |
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
99 start_time = time.clock() |
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
100 ## Pre-train layer-wise |
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
101 for i in xrange(self.classifier.n_layers): |
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
102 # go through pretraining epochs |
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
103 for epoch in xrange(self.hp.pretraining_epochs_per_layer): |
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
104 # go through the training set |
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
105 for batch_index in xrange(self.n_train_batches): |
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
106 c = self.classifier.pretrain_functions[i](batch_index) |
131
5c79a2557f2f
Un peu de ménage dans code pour stacked DAE, splitté en fichiers dans un nouveau sous-répertoire.
savardf
parents:
diff
changeset
|
107 |
185
b9ea8e2d071a
Enlevé ce qui concernait la réutilisation de résultats de préentraînement (trop compliqué pour peu de bénéfice: c'est le finetuning qui est vraiment long
fsavard
parents:
167
diff
changeset
|
108 self.series_mux.append("reconstruction_error", c) |
139
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
109 |
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
110 print 'Pre-training layer %i, epoch %d, cost '%(i,epoch),c |
185
b9ea8e2d071a
Enlevé ce qui concernait la réutilisation de résultats de préentraînement (trop compliqué pour peu de bénéfice: c'est le finetuning qui est vraiment long
fsavard
parents:
167
diff
changeset
|
111 sys.stdout.flush() |
191
3632e6258642
Ajouts mineurs à stacked_dae, juste printé l'heure je crois.
fsavard
parents:
186
diff
changeset
|
112 |
3632e6258642
Ajouts mineurs à stacked_dae, juste printé l'heure je crois.
fsavard
parents:
186
diff
changeset
|
113 self.series_mux.append("params", self.classifier.all_params) |
139
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
114 |
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
115 end_time = time.clock() |
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
116 |
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
117 print ('Pretraining took %f minutes' %((end_time-start_time)/60.)) |
185
b9ea8e2d071a
Enlevé ce qui concernait la réutilisation de résultats de préentraînement (trop compliqué pour peu de bénéfice: c'est le finetuning qui est vraiment long
fsavard
parents:
167
diff
changeset
|
118 self.hp.update({'pretraining_time': end_time-start_time}) |
131
5c79a2557f2f
Un peu de ménage dans code pour stacked DAE, splitté en fichiers dans un nouveau sous-répertoire.
savardf
parents:
diff
changeset
|
119 |
185
b9ea8e2d071a
Enlevé ce qui concernait la réutilisation de résultats de préentraînement (trop compliqué pour peu de bénéfice: c'est le finetuning qui est vraiment long
fsavard
parents:
167
diff
changeset
|
120 sys.stdout.flush() |
139
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
121 |
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
122 def finetune(self): |
191
3632e6258642
Ajouts mineurs à stacked_dae, juste printé l'heure je crois.
fsavard
parents:
186
diff
changeset
|
123 print "STARTING FINETUNING, time = ", datetime.datetime.now() |
131
5c79a2557f2f
Un peu de ménage dans code pour stacked DAE, splitté en fichiers dans un nouveau sous-répertoire.
savardf
parents:
diff
changeset
|
124 |
139
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
125 index = T.lscalar() # index to a [mini]batch |
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
126 minibatch_size = self.hp.minibatch_size |
131
5c79a2557f2f
Un peu de ménage dans code pour stacked DAE, splitté en fichiers dans un nouveau sous-répertoire.
savardf
parents:
diff
changeset
|
127 |
139
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
128 # create a function to compute the mistakes that are made by the model |
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
129 # on the validation set, or testing set |
186
d364a130b221
Ajout du code de base pour scalar_series. Modifications à stacked_dae: réglé un problème avec les input_divider (empêchait une optimisation), et ajouté utilisation des séries. Si j'avais pas déjà commité, aussi, j'ai enlevé l'histoire de réutilisation du pretraining: c'était compliqué (error prone) et ça créait des jobs beaucoup trop longues.
fsavard
parents:
185
diff
changeset
|
130 shared_divider = theano.shared(numpy.asarray(self.input_divider, dtype=theano.config.floatX)) |
139
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
131 test_model = theano.function([index], self.classifier.errors, |
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
132 givens = { |
186
d364a130b221
Ajout du code de base pour scalar_series. Modifications à stacked_dae: réglé un problème avec les input_divider (empêchait une optimisation), et ajouté utilisation des séries. Si j'avais pas déjà commité, aussi, j'ai enlevé l'histoire de réutilisation du pretraining: c'était compliqué (error prone) et ça créait des jobs beaucoup trop longues.
fsavard
parents:
185
diff
changeset
|
133 self.classifier.x: self.test_set_x[index*minibatch_size:(index+1)*minibatch_size] / shared_divider, |
139
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
134 self.classifier.y: self.test_set_y[index*minibatch_size:(index+1)*minibatch_size]}) |
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
135 |
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
136 validate_model = theano.function([index], self.classifier.errors, |
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
137 givens = { |
186
d364a130b221
Ajout du code de base pour scalar_series. Modifications à stacked_dae: réglé un problème avec les input_divider (empêchait une optimisation), et ajouté utilisation des séries. Si j'avais pas déjà commité, aussi, j'ai enlevé l'histoire de réutilisation du pretraining: c'était compliqué (error prone) et ça créait des jobs beaucoup trop longues.
fsavard
parents:
185
diff
changeset
|
138 self.classifier.x: self.valid_set_x[index*minibatch_size:(index+1)*minibatch_size] / shared_divider, |
139
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
139 self.classifier.y: self.valid_set_y[index*minibatch_size:(index+1)*minibatch_size]}) |
131
5c79a2557f2f
Un peu de ménage dans code pour stacked DAE, splitté en fichiers dans un nouveau sous-répertoire.
savardf
parents:
diff
changeset
|
140 |
5c79a2557f2f
Un peu de ménage dans code pour stacked DAE, splitté en fichiers dans un nouveau sous-répertoire.
savardf
parents:
diff
changeset
|
141 |
139
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
142 # early-stopping parameters |
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
143 patience = 10000 # look as this many examples regardless |
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
144 patience_increase = 2. # wait this much longer when a new best is |
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
145 # found |
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
146 improvement_threshold = 0.995 # a relative improvement of this much is |
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
147 # considered significant |
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
148 validation_frequency = min(self.n_train_batches, patience/2) |
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
149 # go through this many |
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
150 # minibatche before checking the network |
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
151 # on the validation set; in this case we |
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
152 # check every epoch |
131
5c79a2557f2f
Un peu de ménage dans code pour stacked DAE, splitté en fichiers dans un nouveau sous-répertoire.
savardf
parents:
diff
changeset
|
153 |
139
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
154 best_params = None |
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
155 best_validation_loss = float('inf') |
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
156 test_score = 0. |
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
157 start_time = time.clock() |
131
5c79a2557f2f
Un peu de ménage dans code pour stacked DAE, splitté en fichiers dans un nouveau sous-répertoire.
savardf
parents:
diff
changeset
|
158 |
139
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
159 done_looping = False |
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
160 epoch = 0 |
131
5c79a2557f2f
Un peu de ménage dans code pour stacked DAE, splitté en fichiers dans un nouveau sous-répertoire.
savardf
parents:
diff
changeset
|
161 |
139
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
162 while (epoch < self.hp.max_finetuning_epochs) and (not done_looping): |
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
163 epoch = epoch + 1 |
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
164 for minibatch_index in xrange(self.n_train_batches): |
131
5c79a2557f2f
Un peu de ménage dans code pour stacked DAE, splitté en fichiers dans un nouveau sous-répertoire.
savardf
parents:
diff
changeset
|
165 |
139
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
166 cost_ij = self.classifier.finetune(minibatch_index) |
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
167 iter = epoch * self.n_train_batches + minibatch_index |
131
5c79a2557f2f
Un peu de ménage dans code pour stacked DAE, splitté en fichiers dans un nouveau sous-répertoire.
savardf
parents:
diff
changeset
|
168 |
185
b9ea8e2d071a
Enlevé ce qui concernait la réutilisation de résultats de préentraînement (trop compliqué pour peu de bénéfice: c'est le finetuning qui est vraiment long
fsavard
parents:
167
diff
changeset
|
169 self.series_mux.append("training_error", cost_ij) |
131
5c79a2557f2f
Un peu de ménage dans code pour stacked DAE, splitté en fichiers dans un nouveau sous-répertoire.
savardf
parents:
diff
changeset
|
170 |
139
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
171 if (iter+1) % validation_frequency == 0: |
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
172 |
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
173 validation_losses = [validate_model(i) for i in xrange(self.n_valid_batches)] |
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
174 this_validation_loss = numpy.mean(validation_losses) |
186
d364a130b221
Ajout du code de base pour scalar_series. Modifications à stacked_dae: réglé un problème avec les input_divider (empêchait une optimisation), et ajouté utilisation des séries. Si j'avais pas déjà commité, aussi, j'ai enlevé l'histoire de réutilisation du pretraining: c'était compliqué (error prone) et ça créait des jobs beaucoup trop longues.
fsavard
parents:
185
diff
changeset
|
175 self.series_mux.append("validation_error", this_validation_loss) |
139
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
176 print('epoch %i, minibatch %i/%i, validation error %f %%' % \ |
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
177 (epoch, minibatch_index+1, self.n_train_batches, \ |
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
178 this_validation_loss*100.)) |
131
5c79a2557f2f
Un peu de ménage dans code pour stacked DAE, splitté en fichiers dans un nouveau sous-répertoire.
savardf
parents:
diff
changeset
|
179 |
5c79a2557f2f
Un peu de ménage dans code pour stacked DAE, splitté en fichiers dans un nouveau sous-répertoire.
savardf
parents:
diff
changeset
|
180 |
139
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
181 # if we got the best validation score until now |
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
182 if this_validation_loss < best_validation_loss: |
131
5c79a2557f2f
Un peu de ménage dans code pour stacked DAE, splitté en fichiers dans un nouveau sous-répertoire.
savardf
parents:
diff
changeset
|
183 |
139
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
184 #improve patience if loss improvement is good enough |
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
185 if this_validation_loss < best_validation_loss * \ |
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
186 improvement_threshold : |
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
187 patience = max(patience, iter * patience_increase) |
131
5c79a2557f2f
Un peu de ménage dans code pour stacked DAE, splitté en fichiers dans un nouveau sous-répertoire.
savardf
parents:
diff
changeset
|
188 |
139
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
189 # save best validation score and iteration number |
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
190 best_validation_loss = this_validation_loss |
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
191 best_iter = iter |
131
5c79a2557f2f
Un peu de ménage dans code pour stacked DAE, splitté en fichiers dans un nouveau sous-répertoire.
savardf
parents:
diff
changeset
|
192 |
139
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
193 # test it on the test set |
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
194 test_losses = [test_model(i) for i in xrange(self.n_test_batches)] |
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
195 test_score = numpy.mean(test_losses) |
186
d364a130b221
Ajout du code de base pour scalar_series. Modifications à stacked_dae: réglé un problème avec les input_divider (empêchait une optimisation), et ajouté utilisation des séries. Si j'avais pas déjà commité, aussi, j'ai enlevé l'histoire de réutilisation du pretraining: c'était compliqué (error prone) et ça créait des jobs beaucoup trop longues.
fsavard
parents:
185
diff
changeset
|
196 self.series_mux.append("test_error", test_score) |
139
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
197 print((' epoch %i, minibatch %i/%i, test error of best ' |
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
198 'model %f %%') % |
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
199 (epoch, minibatch_index+1, self.n_train_batches, |
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
200 test_score*100.)) |
131
5c79a2557f2f
Un peu de ménage dans code pour stacked DAE, splitté en fichiers dans un nouveau sous-répertoire.
savardf
parents:
diff
changeset
|
201 |
185
b9ea8e2d071a
Enlevé ce qui concernait la réutilisation de résultats de préentraînement (trop compliqué pour peu de bénéfice: c'est le finetuning qui est vraiment long
fsavard
parents:
167
diff
changeset
|
202 sys.stdout.flush() |
b9ea8e2d071a
Enlevé ce qui concernait la réutilisation de résultats de préentraînement (trop compliqué pour peu de bénéfice: c'est le finetuning qui est vraiment long
fsavard
parents:
167
diff
changeset
|
203 |
186
d364a130b221
Ajout du code de base pour scalar_series. Modifications à stacked_dae: réglé un problème avec les input_divider (empêchait une optimisation), et ajouté utilisation des séries. Si j'avais pas déjà commité, aussi, j'ai enlevé l'histoire de réutilisation du pretraining: c'était compliqué (error prone) et ça créait des jobs beaucoup trop longues.
fsavard
parents:
185
diff
changeset
|
204 self.series_mux.append("params", self.classifier.all_params) |
131
5c79a2557f2f
Un peu de ménage dans code pour stacked DAE, splitté en fichiers dans un nouveau sous-répertoire.
savardf
parents:
diff
changeset
|
205 |
139
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
206 if patience <= iter : |
131
5c79a2557f2f
Un peu de ménage dans code pour stacked DAE, splitté en fichiers dans un nouveau sous-répertoire.
savardf
parents:
diff
changeset
|
207 done_looping = True |
5c79a2557f2f
Un peu de ménage dans code pour stacked DAE, splitté en fichiers dans un nouveau sous-répertoire.
savardf
parents:
diff
changeset
|
208 break |
5c79a2557f2f
Un peu de ménage dans code pour stacked DAE, splitté en fichiers dans un nouveau sous-répertoire.
savardf
parents:
diff
changeset
|
209 |
139
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
210 end_time = time.clock() |
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
211 self.hp.update({'finetuning_time':end_time-start_time,\ |
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
212 'best_validation_error':best_validation_loss,\ |
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
213 'test_score':test_score, |
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
214 'num_finetuning_epochs':epoch}) |
185
b9ea8e2d071a
Enlevé ce qui concernait la réutilisation de résultats de préentraînement (trop compliqué pour peu de bénéfice: c'est le finetuning qui est vraiment long
fsavard
parents:
167
diff
changeset
|
215 |
139
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
216 print(('Optimization complete with best validation score of %f %%,' |
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
217 'with test performance %f %%') % |
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
218 (best_validation_loss * 100., test_score*100.)) |
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
219 print ('The finetuning ran for %f minutes' % ((end_time-start_time)/60.)) |
131
5c79a2557f2f
Un peu de ménage dans code pour stacked DAE, splitté en fichiers dans un nouveau sous-répertoire.
savardf
parents:
diff
changeset
|
220 |
5c79a2557f2f
Un peu de ménage dans code pour stacked DAE, splitté en fichiers dans un nouveau sous-répertoire.
savardf
parents:
diff
changeset
|
221 |
139
7d8366fb90bf
Ajouté des __init__.py dans l'arborescence pour que les scripts puissent être utilisés avec des paths pour jobman, et fait pas mal de modifs dans stacked_dae pour pouvoir réutiliser le travail fait pour des tests où le pretraining est le même.
fsavard
parents:
131
diff
changeset
|
222 |