annotate deep/stacked_dae/v_sylvain/sgd_optimization.py @ 252:7dd43ef66d15

ajout de fonctionnalite pour different finetune dataset
author SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
date Tue, 16 Mar 2010 21:24:41 -0400
parents 9fc641d7adda
children a0264184684e
rev   line source
230
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
1 #!/usr/bin/python
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
2 # coding: utf-8
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
3
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
4 # Generic SdA optimization loop, adapted from the deeplearning.net tutorial
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
5
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
6 import numpy
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
7 import theano
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
8 import time
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
9 import datetime
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
10 import theano.tensor as T
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
11 import sys
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
12
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
13 from jobman import DD
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
14 import jobman, jobman.sql
252
7dd43ef66d15 ajout de fonctionnalite pour different finetune dataset
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 238
diff changeset
15 from copy import copy
230
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
16
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
17 from stacked_dae import SdA
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
18
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
19 from ift6266.utils.seriestables import *
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
20
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
21 default_series = { \
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
22 'reconstruction_error' : DummySeries(),
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
23 'training_error' : DummySeries(),
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
24 'validation_error' : DummySeries(),
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
25 'test_error' : DummySeries(),
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
26 'params' : DummySeries()
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
27 }
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
28
252
7dd43ef66d15 ajout de fonctionnalite pour different finetune dataset
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 238
diff changeset
29 def itermax(iter, max):
7dd43ef66d15 ajout de fonctionnalite pour different finetune dataset
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 238
diff changeset
30 for i,it in enumerate(iter):
7dd43ef66d15 ajout de fonctionnalite pour different finetune dataset
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 238
diff changeset
31 if i >= max:
7dd43ef66d15 ajout de fonctionnalite pour different finetune dataset
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 238
diff changeset
32 break
7dd43ef66d15 ajout de fonctionnalite pour different finetune dataset
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 238
diff changeset
33 yield it
7dd43ef66d15 ajout de fonctionnalite pour different finetune dataset
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 238
diff changeset
34
230
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
35 class SdaSgdOptimizer:
252
7dd43ef66d15 ajout de fonctionnalite pour different finetune dataset
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 238
diff changeset
36 def __init__(self, dataset, hyperparameters, n_ins, n_outs,
7dd43ef66d15 ajout de fonctionnalite pour different finetune dataset
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 238
diff changeset
37 examples_per_epoch, series=default_series, max_minibatches=None):
230
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
38 self.dataset = dataset
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
39 self.hp = hyperparameters
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
40 self.n_ins = n_ins
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
41 self.n_outs = n_outs
252
7dd43ef66d15 ajout de fonctionnalite pour different finetune dataset
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 238
diff changeset
42 self.parameters_pre=[]
230
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
43
252
7dd43ef66d15 ajout de fonctionnalite pour different finetune dataset
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 238
diff changeset
44 self.max_minibatches = max_minibatches
7dd43ef66d15 ajout de fonctionnalite pour different finetune dataset
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 238
diff changeset
45 print "SdaSgdOptimizer, max_minibatches =", max_minibatches
7dd43ef66d15 ajout de fonctionnalite pour different finetune dataset
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 238
diff changeset
46
7dd43ef66d15 ajout de fonctionnalite pour different finetune dataset
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 238
diff changeset
47 self.ex_per_epoch = examples_per_epoch
7dd43ef66d15 ajout de fonctionnalite pour different finetune dataset
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 238
diff changeset
48 self.mb_per_epoch = examples_per_epoch / self.hp.minibatch_size
7dd43ef66d15 ajout de fonctionnalite pour different finetune dataset
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 238
diff changeset
49
230
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
50 self.series = series
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
51
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
52 self.rng = numpy.random.RandomState(1234)
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
53
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
54 self.init_classifier()
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
55
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
56 sys.stdout.flush()
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
57
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
58 def init_classifier(self):
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
59 print "Constructing classifier"
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
60
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
61 # we don't want to save arrays in DD objects, so
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
62 # we recreate those arrays here
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
63 nhl = self.hp.num_hidden_layers
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
64 layers_sizes = [self.hp.hidden_layers_sizes] * nhl
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
65 corruption_levels = [self.hp.corruption_levels] * nhl
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
66
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
67 # construct the stacked denoising autoencoder class
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
68 self.classifier = SdA( \
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
69 batch_size = self.hp.minibatch_size, \
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
70 n_ins= self.n_ins, \
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
71 hidden_layers_sizes = layers_sizes, \
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
72 n_outs = self.n_outs, \
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
73 corruption_levels = corruption_levels,\
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
74 rng = self.rng,\
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
75 pretrain_lr = self.hp.pretraining_lr, \
252
7dd43ef66d15 ajout de fonctionnalite pour different finetune dataset
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 238
diff changeset
76 finetune_lr = self.hp.finetuning_lr)
230
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
77
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
78 #theano.printing.pydotprint(self.classifier.pretrain_functions[0], "function.graph")
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
79
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
80 sys.stdout.flush()
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
81
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
82 def train(self):
233
02ed13244133 version pour utilisation du module dataset
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 230
diff changeset
83 self.pretrain(self.dataset)
02ed13244133 version pour utilisation du module dataset
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 230
diff changeset
84 self.finetune(self.dataset)
230
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
85
252
7dd43ef66d15 ajout de fonctionnalite pour different finetune dataset
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 238
diff changeset
86 def pretrain(self,dataset):
230
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
87 print "STARTING PRETRAINING, time = ", datetime.datetime.now()
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
88 sys.stdout.flush()
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
89
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
90 start_time = time.clock()
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
91 ## Pre-train layer-wise
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
92 for i in xrange(self.classifier.n_layers):
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
93 # go through pretraining epochs
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
94 for epoch in xrange(self.hp.pretraining_epochs_per_layer):
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
95 # go through the training set
252
7dd43ef66d15 ajout de fonctionnalite pour different finetune dataset
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 238
diff changeset
96 batch_index=0
233
02ed13244133 version pour utilisation du module dataset
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 230
diff changeset
97 for x,y in dataset.train(self.hp.minibatch_size):
02ed13244133 version pour utilisation du module dataset
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 230
diff changeset
98 c = self.classifier.pretrain_functions[i](x)
238
9fc641d7adda Possibilite de restreindre la taille des ensemble d'entrainement, valid et test afin de pouvoir tester le code rapidement
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 235
diff changeset
99
230
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
100 self.series["reconstruction_error"].append((epoch, batch_index), c)
252
7dd43ef66d15 ajout de fonctionnalite pour different finetune dataset
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 238
diff changeset
101 batch_index+=1
7dd43ef66d15 ajout de fonctionnalite pour different finetune dataset
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 238
diff changeset
102
7dd43ef66d15 ajout de fonctionnalite pour different finetune dataset
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 238
diff changeset
103 #if batch_index % 100 == 0:
7dd43ef66d15 ajout de fonctionnalite pour different finetune dataset
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 238
diff changeset
104 # print "100 batches"
7dd43ef66d15 ajout de fonctionnalite pour different finetune dataset
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 238
diff changeset
105
7dd43ef66d15 ajout de fonctionnalite pour different finetune dataset
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 238
diff changeset
106 # useful when doing tests
7dd43ef66d15 ajout de fonctionnalite pour different finetune dataset
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 238
diff changeset
107 if self.max_minibatches and batch_index >= self.max_minibatches:
7dd43ef66d15 ajout de fonctionnalite pour different finetune dataset
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 238
diff changeset
108 break
230
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
109
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
110 print 'Pre-training layer %i, epoch %d, cost '%(i,epoch),c
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
111 sys.stdout.flush()
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
112
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
113 self.series['params'].append((epoch,), self.classifier.all_params)
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
114
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
115 end_time = time.clock()
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
116
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
117 print ('Pretraining took %f minutes' %((end_time-start_time)/60.))
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
118 self.hp.update({'pretraining_time': end_time-start_time})
252
7dd43ef66d15 ajout de fonctionnalite pour different finetune dataset
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 238
diff changeset
119
230
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
120 sys.stdout.flush()
252
7dd43ef66d15 ajout de fonctionnalite pour different finetune dataset
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 238
diff changeset
121
7dd43ef66d15 ajout de fonctionnalite pour different finetune dataset
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 238
diff changeset
122 #To be able to load them later for tests on finetune
7dd43ef66d15 ajout de fonctionnalite pour different finetune dataset
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 238
diff changeset
123 self.parameters_pre=[copy(x.value) for x in self.classifier.params]
230
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
124
252
7dd43ef66d15 ajout de fonctionnalite pour different finetune dataset
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 238
diff changeset
125
7dd43ef66d15 ajout de fonctionnalite pour different finetune dataset
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 238
diff changeset
126 def finetune(self,dataset,num_finetune):
230
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
127 print "STARTING FINETUNING, time = ", datetime.datetime.now()
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
128
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
129 minibatch_size = self.hp.minibatch_size
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
130
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
131 # create a function to compute the mistakes that are made by the model
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
132 # on the validation set, or testing set
252
7dd43ef66d15 ajout de fonctionnalite pour different finetune dataset
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 238
diff changeset
133 test_model = \
7dd43ef66d15 ajout de fonctionnalite pour different finetune dataset
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 238
diff changeset
134 theano.function(
7dd43ef66d15 ajout de fonctionnalite pour different finetune dataset
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 238
diff changeset
135 [self.classifier.x,self.classifier.y], self.classifier.errors)
7dd43ef66d15 ajout de fonctionnalite pour different finetune dataset
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 238
diff changeset
136 # givens = {
7dd43ef66d15 ajout de fonctionnalite pour different finetune dataset
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 238
diff changeset
137 # self.classifier.x: ensemble_x,
7dd43ef66d15 ajout de fonctionnalite pour different finetune dataset
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 238
diff changeset
138 # self.classifier.y: ensemble_y]})
230
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
139
252
7dd43ef66d15 ajout de fonctionnalite pour different finetune dataset
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 238
diff changeset
140 validate_model = \
7dd43ef66d15 ajout de fonctionnalite pour different finetune dataset
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 238
diff changeset
141 theano.function(
7dd43ef66d15 ajout de fonctionnalite pour different finetune dataset
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 238
diff changeset
142 [self.classifier.x,self.classifier.y], self.classifier.errors)
7dd43ef66d15 ajout de fonctionnalite pour different finetune dataset
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 238
diff changeset
143 # givens = {
7dd43ef66d15 ajout de fonctionnalite pour different finetune dataset
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 238
diff changeset
144 # self.classifier.x: ,
7dd43ef66d15 ajout de fonctionnalite pour different finetune dataset
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 238
diff changeset
145 # self.classifier.y: ]})
230
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
146
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
147
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
148 # early-stopping parameters
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
149 patience = 10000 # look as this many examples regardless
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
150 patience_increase = 2. # wait this much longer when a new best is
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
151 # found
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
152 improvement_threshold = 0.995 # a relative improvement of this much is
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
153 # considered significant
252
7dd43ef66d15 ajout de fonctionnalite pour different finetune dataset
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 238
diff changeset
154 validation_frequency = min(self.mb_per_epoch, patience/2)
230
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
155 # go through this many
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
156 # minibatche before checking the network
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
157 # on the validation set; in this case we
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
158 # check every epoch
252
7dd43ef66d15 ajout de fonctionnalite pour different finetune dataset
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 238
diff changeset
159 if self.max_minibatches and validation_frequency > self.max_minibatches:
7dd43ef66d15 ajout de fonctionnalite pour different finetune dataset
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 238
diff changeset
160 validation_frequency = self.max_minibatches / 2
230
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
161
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
162 best_params = None
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
163 best_validation_loss = float('inf')
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
164 test_score = 0.
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
165 start_time = time.clock()
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
166
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
167 done_looping = False
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
168 epoch = 0
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
169
252
7dd43ef66d15 ajout de fonctionnalite pour different finetune dataset
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 238
diff changeset
170 total_mb_index = 0
7dd43ef66d15 ajout de fonctionnalite pour different finetune dataset
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 238
diff changeset
171
7dd43ef66d15 ajout de fonctionnalite pour different finetune dataset
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 238
diff changeset
172 while (epoch < num_finetune) and (not done_looping):
230
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
173 epoch = epoch + 1
252
7dd43ef66d15 ajout de fonctionnalite pour different finetune dataset
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 238
diff changeset
174 minibatch_index = -1
233
02ed13244133 version pour utilisation du module dataset
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 230
diff changeset
175 for x,y in dataset.train(minibatch_size):
252
7dd43ef66d15 ajout de fonctionnalite pour different finetune dataset
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 238
diff changeset
176 minibatch_index += 1
233
02ed13244133 version pour utilisation du module dataset
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 230
diff changeset
177 cost_ij = self.classifier.finetune(x,y)
252
7dd43ef66d15 ajout de fonctionnalite pour different finetune dataset
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 238
diff changeset
178 total_mb_index += 1
230
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
179
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
180 self.series["training_error"].append((epoch, minibatch_index), cost_ij)
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
181
252
7dd43ef66d15 ajout de fonctionnalite pour different finetune dataset
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 238
diff changeset
182 if (total_mb_index+1) % validation_frequency == 0:
230
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
183
252
7dd43ef66d15 ajout de fonctionnalite pour different finetune dataset
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 238
diff changeset
184 iter = dataset.valid(minibatch_size)
7dd43ef66d15 ajout de fonctionnalite pour different finetune dataset
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 238
diff changeset
185 if self.max_minibatches:
7dd43ef66d15 ajout de fonctionnalite pour different finetune dataset
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 238
diff changeset
186 iter = itermax(iter, self.max_minibatches)
7dd43ef66d15 ajout de fonctionnalite pour different finetune dataset
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 238
diff changeset
187 validation_losses = [validate_model(x,y) for x,y in iter]
230
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
188 this_validation_loss = numpy.mean(validation_losses)
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
189
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
190 self.series["validation_error"].\
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
191 append((epoch, minibatch_index), this_validation_loss*100.)
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
192
238
9fc641d7adda Possibilite de restreindre la taille des ensemble d'entrainement, valid et test afin de pouvoir tester le code rapidement
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 235
diff changeset
193 print('epoch %i, minibatch %i, validation error %f %%' % \
252
7dd43ef66d15 ajout de fonctionnalite pour different finetune dataset
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 238
diff changeset
194 (epoch, minibatch_index+1, \
230
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
195 this_validation_loss*100.))
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
196
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
197
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
198 # if we got the best validation score until now
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
199 if this_validation_loss < best_validation_loss:
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
200
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
201 #improve patience if loss improvement is good enough
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
202 if this_validation_loss < best_validation_loss * \
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
203 improvement_threshold :
252
7dd43ef66d15 ajout de fonctionnalite pour different finetune dataset
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 238
diff changeset
204 patience = max(patience, total_mb_index * patience_increase)
230
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
205
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
206 # save best validation score and iteration number
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
207 best_validation_loss = this_validation_loss
252
7dd43ef66d15 ajout de fonctionnalite pour different finetune dataset
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 238
diff changeset
208 best_iter = total_mb_index
230
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
209
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
210 # test it on the test set
252
7dd43ef66d15 ajout de fonctionnalite pour different finetune dataset
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 238
diff changeset
211 iter = dataset.test(minibatch_size)
7dd43ef66d15 ajout de fonctionnalite pour different finetune dataset
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 238
diff changeset
212 if self.max_minibatches:
7dd43ef66d15 ajout de fonctionnalite pour different finetune dataset
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 238
diff changeset
213 iter = itermax(iter, self.max_minibatches)
7dd43ef66d15 ajout de fonctionnalite pour different finetune dataset
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 238
diff changeset
214 test_losses = [test_model(x,y) for x,y in iter]
230
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
215 test_score = numpy.mean(test_losses)
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
216
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
217 self.series["test_error"].\
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
218 append((epoch, minibatch_index), test_score*100.)
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
219
238
9fc641d7adda Possibilite de restreindre la taille des ensemble d'entrainement, valid et test afin de pouvoir tester le code rapidement
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 235
diff changeset
220 print((' epoch %i, minibatch %i, test error of best '
230
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
221 'model %f %%') %
252
7dd43ef66d15 ajout de fonctionnalite pour different finetune dataset
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 238
diff changeset
222 (epoch, minibatch_index+1,
230
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
223 test_score*100.))
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
224
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
225 sys.stdout.flush()
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
226
252
7dd43ef66d15 ajout de fonctionnalite pour different finetune dataset
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 238
diff changeset
227 # useful when doing tests
7dd43ef66d15 ajout de fonctionnalite pour different finetune dataset
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 238
diff changeset
228 if self.max_minibatches and minibatch_index >= self.max_minibatches:
7dd43ef66d15 ajout de fonctionnalite pour different finetune dataset
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 238
diff changeset
229 break
7dd43ef66d15 ajout de fonctionnalite pour different finetune dataset
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 238
diff changeset
230
230
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
231 self.series['params'].append((epoch,), self.classifier.all_params)
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
232
252
7dd43ef66d15 ajout de fonctionnalite pour different finetune dataset
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 238
diff changeset
233 if patience <= total_mb_index:
230
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
234 done_looping = True
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
235 break
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
236
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
237 end_time = time.clock()
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
238 self.hp.update({'finetuning_time':end_time-start_time,\
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
239 'best_validation_error':best_validation_loss,\
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
240 'test_score':test_score,
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
241 'num_finetuning_epochs':epoch})
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
242
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
243 print(('Optimization complete with best validation score of %f %%,'
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
244 'with test performance %f %%') %
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
245 (best_validation_loss * 100., test_score*100.))
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
246 print ('The finetuning ran for %f minutes' % ((end_time-start_time)/60.))
252
7dd43ef66d15 ajout de fonctionnalite pour different finetune dataset
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 238
diff changeset
247
7dd43ef66d15 ajout de fonctionnalite pour different finetune dataset
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 238
diff changeset
248
7dd43ef66d15 ajout de fonctionnalite pour different finetune dataset
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 238
diff changeset
249 #Set parameters like they where right after pre-train
7dd43ef66d15 ajout de fonctionnalite pour different finetune dataset
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 238
diff changeset
250 def reload_parameters(self):
7dd43ef66d15 ajout de fonctionnalite pour different finetune dataset
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 238
diff changeset
251
7dd43ef66d15 ajout de fonctionnalite pour different finetune dataset
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 238
diff changeset
252 for idx,x in enumerate(self.parameters_pre):
7dd43ef66d15 ajout de fonctionnalite pour different finetune dataset
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 238
diff changeset
253 self.classifier.params[idx].value=copy(x)
7dd43ef66d15 ajout de fonctionnalite pour different finetune dataset
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 238
diff changeset
254
7dd43ef66d15 ajout de fonctionnalite pour different finetune dataset
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 238
diff changeset
255
230
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
256
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
257
8a94a5c808cd Repertoire pour faire les tests avec les differents ensembles pour le finetuning
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
258