Mercurial > ift6266
annotate scripts/stacked_dae.py @ 119:4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
author | fsavard |
---|---|
date | Wed, 17 Feb 2010 17:06:54 -0500 |
parents | 0b4080394f2c |
children |
rev | line source |
---|---|
114
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
1 #!/usr/bin/python |
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
2 # coding: utf-8 |
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
3 |
119
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
4 import numpy |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
5 import theano |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
6 import time |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
7 import theano.tensor as T |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
8 from theano.tensor.shared_randomstreams import RandomStreams |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
9 import os.path |
114
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
10 |
119
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
11 import gzip |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
12 import cPickle |
114
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
13 |
119
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
14 MNIST_LOCATION = '/u/savardf/datasets/mnist.pkl.gz' |
114
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
15 |
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
16 # from pylearn codebase |
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
17 def update_locals(obj, dct): |
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
18 if 'self' in dct: |
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
19 del dct['self'] |
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
20 obj.__dict__.update(dct) |
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
21 |
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
22 class LogisticRegression(object): |
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
23 def __init__(self, input, n_in, n_out): |
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
24 # initialize with 0 the weights W as a matrix of shape (n_in, n_out) |
119
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
25 self.W = theano.shared( value=numpy.zeros((n_in,n_out), |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
26 dtype = theano.config.floatX) ) |
114
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
27 # initialize the baises b as a vector of n_out 0s |
119
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
28 self.b = theano.shared( value=numpy.zeros((n_out,), |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
29 dtype = theano.config.floatX) ) |
114
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
30 # compute vector of class-membership probabilities in symbolic form |
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
31 self.p_y_given_x = T.nnet.softmax(T.dot(input, self.W)+self.b) |
119
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
32 |
114
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
33 # compute prediction as class whose probability is maximal in |
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
34 # symbolic form |
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
35 self.y_pred=T.argmax(self.p_y_given_x, axis=1) |
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
36 |
119
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
37 # list of parameters for this layer |
114
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
38 self.params = [self.W, self.b] |
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
39 |
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
40 def negative_log_likelihood(self, y): |
119
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
41 return -T.mean(T.log(self.p_y_given_x)[T.arange(y.shape[0]),y]) |
114
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
42 |
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
43 def errors(self, y): |
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
44 # check if y has same dimension of y_pred |
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
45 if y.ndim != self.y_pred.ndim: |
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
46 raise TypeError('y should have the same shape as self.y_pred', |
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
47 ('y', target.type, 'y_pred', self.y_pred.type)) |
119
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
48 |
114
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
49 # check if y is of the correct datatype |
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
50 if y.dtype.startswith('int'): |
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
51 # the T.neq operator returns a vector of 0s and 1s, where 1 |
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
52 # represents a mistake in prediction |
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
53 return T.mean(T.neq(self.y_pred, y)) |
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
54 else: |
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
55 raise NotImplementedError() |
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
56 |
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
57 |
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
58 class SigmoidalLayer(object): |
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
59 def __init__(self, rng, input, n_in, n_out): |
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
60 self.input = input |
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
61 |
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
62 W_values = numpy.asarray( rng.uniform( \ |
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
63 low = -numpy.sqrt(6./(n_in+n_out)), \ |
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
64 high = numpy.sqrt(6./(n_in+n_out)), \ |
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
65 size = (n_in, n_out)), dtype = theano.config.floatX) |
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
66 self.W = theano.shared(value = W_values) |
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
67 |
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
68 b_values = numpy.zeros((n_out,), dtype= theano.config.floatX) |
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
69 self.b = theano.shared(value= b_values) |
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
70 |
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
71 self.output = T.nnet.sigmoid(T.dot(input, self.W) + self.b) |
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
72 self.params = [self.W, self.b] |
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
73 |
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
74 |
119
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
75 |
114
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
76 class dA(object): |
119
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
77 def __init__(self, n_visible= 784, n_hidden= 500, corruption_level = 0.1,\ |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
78 input = None, shared_W = None, shared_b = None): |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
79 self.n_visible = n_visible |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
80 self.n_hidden = n_hidden |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
81 |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
82 # create a Theano random generator that gives symbolic random values |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
83 theano_rng = RandomStreams() |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
84 |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
85 if shared_W != None and shared_b != None : |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
86 self.W = shared_W |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
87 self.b = shared_b |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
88 else: |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
89 # initial values for weights and biases |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
90 # note : W' was written as `W_prime` and b' as `b_prime` |
114
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
91 |
119
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
92 # W is initialized with `initial_W` which is uniformely sampled |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
93 # from -6./sqrt(n_visible+n_hidden) and 6./sqrt(n_hidden+n_visible) |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
94 # the output of uniform if converted using asarray to dtype |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
95 # theano.config.floatX so that the code is runable on GPU |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
96 initial_W = numpy.asarray( numpy.random.uniform( \ |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
97 low = -numpy.sqrt(6./(n_hidden+n_visible)), \ |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
98 high = numpy.sqrt(6./(n_hidden+n_visible)), \ |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
99 size = (n_visible, n_hidden)), dtype = theano.config.floatX) |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
100 initial_b = numpy.zeros(n_hidden, dtype = theano.config.floatX) |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
101 |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
102 |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
103 # theano shared variables for weights and biases |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
104 self.W = theano.shared(value = initial_W, name = "W") |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
105 self.b = theano.shared(value = initial_b, name = "b") |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
106 |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
107 |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
108 initial_b_prime= numpy.zeros(n_visible) |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
109 # tied weights, therefore W_prime is W transpose |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
110 self.W_prime = self.W.T |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
111 self.b_prime = theano.shared(value = initial_b_prime, name = "b'") |
114
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
112 |
119
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
113 # if no input is given, generate a variable representing the input |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
114 if input == None : |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
115 # we use a matrix because we expect a minibatch of several examples, |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
116 # each example being a row |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
117 self.x = T.dmatrix(name = 'input') |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
118 else: |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
119 self.x = input |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
120 # Equation (1) |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
121 # keep 90% of the inputs the same and zero-out randomly selected subset of 10% of the inputs |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
122 # note : first argument of theano.rng.binomial is the shape(size) of |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
123 # random numbers that it should produce |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
124 # second argument is the number of trials |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
125 # third argument is the probability of success of any trial |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
126 # |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
127 # this will produce an array of 0s and 1s where 1 has a |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
128 # probability of 1 - ``corruption_level`` and 0 with |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
129 # ``corruption_level`` |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
130 self.tilde_x = theano_rng.binomial( self.x.shape, 1, 1 - corruption_level) * self.x |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
131 # Equation (2) |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
132 # note : y is stored as an attribute of the class so that it can be |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
133 # used later when stacking dAs. |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
134 self.y = T.nnet.sigmoid(T.dot(self.tilde_x, self.W ) + self.b) |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
135 # Equation (3) |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
136 self.z = T.nnet.sigmoid(T.dot(self.y, self.W_prime) + self.b_prime) |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
137 # Equation (4) |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
138 # note : we sum over the size of a datapoint; if we are using minibatches, |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
139 # L will be a vector, with one entry per example in minibatch |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
140 self.L = - T.sum( self.x*T.log(self.z) + (1-self.x)*T.log(1-self.z), axis=1 ) |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
141 # note : L is now a vector, where each element is the cross-entropy cost |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
142 # of the reconstruction of the corresponding example of the |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
143 # minibatch. We need to compute the average of all these to get |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
144 # the cost of the minibatch |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
145 self.cost = T.mean(self.L) |
114
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
146 |
119
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
147 self.params = [ self.W, self.b, self.b_prime ] |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
148 |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
149 |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
150 |
114
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
151 |
119
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
152 class SdA(object): |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
153 def __init__(self, train_set_x, train_set_y, batch_size, n_ins, |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
154 hidden_layers_sizes, n_outs, |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
155 corruption_levels, rng, pretrain_lr, finetune_lr): |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
156 |
114
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
157 self.layers = [] |
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
158 self.pretrain_functions = [] |
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
159 self.params = [] |
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
160 self.n_layers = len(hidden_layers_sizes) |
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
161 |
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
162 if len(hidden_layers_sizes) < 1 : |
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
163 raiseException (' You must have at least one hidden layer ') |
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
164 |
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
165 |
119
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
166 # allocate symbolic variables for the data |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
167 index = T.lscalar() # index to a [mini]batch |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
168 self.x = T.matrix('x') # the data is presented as rasterized images |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
169 self.y = T.ivector('y') # the labels are presented as 1D vector of |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
170 # [int] labels |
114
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
171 |
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
172 for i in xrange( self.n_layers ): |
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
173 # construct the sigmoidal layer |
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
174 |
119
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
175 # the size of the input is either the number of hidden units of |
114
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
176 # the layer below or the input size if we are on the first layer |
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
177 if i == 0 : |
119
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
178 input_size = n_ins |
114
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
179 else: |
119
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
180 input_size = hidden_layers_sizes[i-1] |
114
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
181 |
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
182 # the input to this layer is either the activation of the hidden |
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
183 # layer below or the input of the SdA if you are on the first |
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
184 # layer |
119
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
185 if i == 0 : |
114
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
186 layer_input = self.x |
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
187 else: |
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
188 layer_input = self.layers[-1].output |
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
189 |
119
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
190 layer = SigmoidalLayer(rng, layer_input, input_size, |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
191 hidden_layers_sizes[i] ) |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
192 # add the layer to the |
114
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
193 self.layers += [layer] |
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
194 self.params += layer.params |
119
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
195 |
114
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
196 # Construct a denoising autoencoder that shared weights with this |
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
197 # layer |
119
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
198 dA_layer = dA(input_size, hidden_layers_sizes[i], \ |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
199 corruption_level = corruption_levels[0],\ |
114
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
200 input = layer_input, \ |
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
201 shared_W = layer.W, shared_b = layer.b) |
119
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
202 |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
203 # Construct a function that trains this dA |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
204 # compute gradients of layer parameters |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
205 gparams = T.grad(dA_layer.cost, dA_layer.params) |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
206 # compute the list of updates |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
207 updates = {} |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
208 for param, gparam in zip(dA_layer.params, gparams): |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
209 updates[param] = param - gparam * pretrain_lr |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
210 |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
211 # create a function that trains the dA |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
212 update_fn = theano.function([index], dA_layer.cost, \ |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
213 updates = updates, |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
214 givens = { |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
215 self.x : train_set_x[index*batch_size:(index+1)*batch_size]}) |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
216 # collect this function into a list |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
217 self.pretrain_functions += [update_fn] |
114
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
218 |
119
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
219 |
114
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
220 # We now need to add a logistic layer on top of the MLP |
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
221 self.logLayer = LogisticRegression(\ |
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
222 input = self.layers[-1].output,\ |
119
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
223 n_in = hidden_layers_sizes[-1], n_out = n_outs) |
114
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
224 |
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
225 self.params += self.logLayer.params |
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
226 # construct a function that implements one step of finetunining |
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
227 |
119
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
228 # compute the cost, defined as the negative log likelihood |
114
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
229 cost = self.logLayer.negative_log_likelihood(self.y) |
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
230 # compute the gradients with respect to the model parameters |
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
231 gparams = T.grad(cost, self.params) |
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
232 # compute list of updates |
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
233 updates = {} |
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
234 for param,gparam in zip(self.params, gparams): |
119
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
235 updates[param] = param - gparam*finetune_lr |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
236 |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
237 self.finetune = theano.function([index], cost, |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
238 updates = updates, |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
239 givens = { |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
240 self.x : train_set_x[index*batch_size:(index+1)*batch_size], |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
241 self.y : train_set_y[index*batch_size:(index+1)*batch_size]} ) |
114
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
242 |
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
243 # symbolic variable that points to the number of errors made on the |
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
244 # minibatch given by self.x and self.y |
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
245 |
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
246 self.errors = self.logLayer.errors(self.y) |
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
247 |
119
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
248 class Hyperparameters: |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
249 def __init__(self, dict): |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
250 self.__dict__.update(dict) |
114
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
251 |
119
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
252 def sgd_optimization_mnist(learning_rate=0.1, pretraining_epochs = 2, \ |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
253 pretrain_lr = 0.1, training_epochs = 5, \ |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
254 dataset='mnist.pkl.gz'): |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
255 # Load the dataset |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
256 f = gzip.open(dataset,'rb') |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
257 # this gives us train, valid, test (each with .x, .y) |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
258 dataset = cPickle.load(f) |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
259 f.close() |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
260 |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
261 n_ins = 28*28 |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
262 n_outs = 10 |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
263 |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
264 hyperparameters = Hyperparameters({'finetuning_lr':learning_rate, |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
265 'pretraining_lr':pretrain_lr, |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
266 'pretraining_epochs_per_layer':pretraining_epochs, |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
267 'max_finetuning_epochs':training_epochs, |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
268 'hidden_layers_sizes':[1000,1000,1000], |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
269 'corruption_levels':[0.2,0.2,0.2], |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
270 'minibatch_size':20}) |
114
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
271 |
119
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
272 sgd_optimization(dataset, hyperparameters, n_ins, n_outs) |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
273 |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
274 class NIST: |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
275 def __init__(self, minibatch_size, basepath=='/data/lisa/data/nist/by_class/all'): |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
276 self.minibatch_size = minibatch_size |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
277 self.basepath = basepath |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
278 |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
279 self.train = [None, None] |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
280 self.test = [None, None] |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
281 |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
282 self.load_train_test() |
114
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
283 |
119
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
284 self.valid = [None, None] |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
285 self.split_train_valid() |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
286 |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
287 def set_filenames(self): |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
288 self.train_files = ['all_train_data.ft', |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
289 'all_train_labels.ft'] |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
290 |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
291 self.test_files = ['all_test_data.ft', |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
292 'all_test_labels.ft'] |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
293 |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
294 def load_train_test(self): |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
295 self.load_data_labels(self.train_files, self.train) |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
296 self.load_data_labels(self.test_files, self.test) |
114
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
297 |
119
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
298 def load_data_labels(self, filenames, pair): |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
299 for i, fn in enumerate(filenames): |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
300 f = open(fn) |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
301 pair[i] = ft.read(os.path.join(self.base_path, fn)) |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
302 f.close() |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
303 |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
304 def split_train_valid(self): |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
305 test_len = len(self.test[0]) |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
306 |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
307 new_train_x = self.train[0][:-test_len] |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
308 new_train_y = self.train[1][:-test_len] |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
309 |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
310 self.valid[0] = self.train[0][-test_len:] |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
311 self.valid[1] = self.train[1][-test_len:] |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
312 |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
313 self.train[0] = new_train_x |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
314 self.train[1] = new_train_y |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
315 |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
316 def sgd_optimization_nist(dataset_dir='/data/lisa/data/nist'): |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
317 pass |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
318 |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
319 def sgd_optimization(dataset, hyperparameters, n_ins, n_outs): |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
320 hp = hyperparameters |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
321 |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
322 train_set, valid_set, test_set = dataset |
114
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
323 |
119
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
324 def shared_dataset(data_xy): |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
325 data_x, data_y = data_xy |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
326 shared_x = theano.shared(numpy.asarray(data_x, dtype=theano.config.floatX)) |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
327 shared_y = theano.shared(numpy.asarray(data_y, dtype=theano.config.floatX)) |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
328 return shared_x, T.cast(shared_y, 'int32') |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
329 |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
330 test_set_x, test_set_y = shared_dataset(test_set) |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
331 valid_set_x, valid_set_y = shared_dataset(valid_set) |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
332 train_set_x, train_set_y = shared_dataset(train_set) |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
333 |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
334 # compute number of minibatches for training, validation and testing |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
335 n_train_batches = train_set_x.value.shape[0] / hp.minibatch_size |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
336 n_valid_batches = valid_set_x.value.shape[0] / hp.minibatch_size |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
337 n_test_batches = test_set_x.value.shape[0] / hp.minibatch_size |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
338 |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
339 # allocate symbolic variables for the data |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
340 index = T.lscalar() # index to a [mini]batch |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
341 |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
342 # construct the stacked denoising autoencoder class |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
343 classifier = SdA( train_set_x=train_set_x, train_set_y = train_set_y,\ |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
344 batch_size = hp.minibatch_size, n_ins= n_ins, \ |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
345 hidden_layers_sizes = hp.hidden_layers_sizes, n_outs=10, \ |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
346 corruption_levels = hp.corruption_levels,\ |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
347 rng = numpy.random.RandomState(1234),\ |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
348 pretrain_lr = hp.pretraining_lr, finetune_lr = hp.finetuning_lr ) |
114
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
349 |
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
350 |
119
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
351 start_time = time.clock() |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
352 ## Pre-train layer-wise |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
353 for i in xrange(classifier.n_layers): |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
354 # go through pretraining epochs |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
355 for epoch in xrange(hp.pretraining_epochs_per_layer): |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
356 # go through the training set |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
357 for batch_index in xrange(n_train_batches): |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
358 c = classifier.pretrain_functions[i](batch_index) |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
359 print 'Pre-training layer %i, epoch %d, cost '%(i,epoch),c |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
360 |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
361 end_time = time.clock() |
114
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
362 |
119
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
363 print ('Pretraining took %f minutes' %((end_time-start_time)/60.)) |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
364 # Fine-tune the entire model |
114
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
365 |
119
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
366 minibatch_size = hp.minibatch_size |
114
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
367 |
119
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
368 # create a function to compute the mistakes that are made by the model |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
369 # on the validation set, or testing set |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
370 test_model = theano.function([index], classifier.errors, |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
371 givens = { |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
372 classifier.x: test_set_x[index*minibatch_size:(index+1)*minibatch_size], |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
373 classifier.y: test_set_y[index*minibatch_size:(index+1)*minibatch_size]}) |
114
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
374 |
119
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
375 validate_model = theano.function([index], classifier.errors, |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
376 givens = { |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
377 classifier.x: valid_set_x[index*minibatch_size:(index+1)*minibatch_size], |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
378 classifier.y: valid_set_y[index*minibatch_size:(index+1)*minibatch_size]}) |
114
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
379 |
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
380 |
119
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
381 # early-stopping parameters |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
382 patience = 10000 # look as this many examples regardless |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
383 patience_increase = 2. # wait this much longer when a new best is |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
384 # found |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
385 improvement_threshold = 0.995 # a relative improvement of this much is |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
386 # considered significant |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
387 validation_frequency = min(n_train_batches, patience/2) |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
388 # go through this many |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
389 # minibatche before checking the network |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
390 # on the validation set; in this case we |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
391 # check every epoch |
114
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
392 |
119
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
393 best_params = None |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
394 best_validation_loss = float('inf') |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
395 test_score = 0. |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
396 start_time = time.clock() |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
397 |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
398 done_looping = False |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
399 epoch = 0 |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
400 |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
401 while (epoch < hp.max_finetuning_epochs) and (not done_looping): |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
402 epoch = epoch + 1 |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
403 for minibatch_index in xrange(n_train_batches): |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
404 |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
405 cost_ij = classifier.finetune(minibatch_index) |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
406 iter = epoch * n_train_batches + minibatch_index |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
407 |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
408 if (iter+1) % validation_frequency == 0: |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
409 |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
410 validation_losses = [validate_model(i) for i in xrange(n_valid_batches)] |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
411 this_validation_loss = numpy.mean(validation_losses) |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
412 print('epoch %i, minibatch %i/%i, validation error %f %%' % \ |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
413 (epoch, minibatch_index+1, n_train_batches, \ |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
414 this_validation_loss*100.)) |
114
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
415 |
119
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
416 |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
417 # if we got the best validation score until now |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
418 if this_validation_loss < best_validation_loss: |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
419 |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
420 #improve patience if loss improvement is good enough |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
421 if this_validation_loss < best_validation_loss * \ |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
422 improvement_threshold : |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
423 patience = max(patience, iter * patience_increase) |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
424 |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
425 # save best validation score and iteration number |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
426 best_validation_loss = this_validation_loss |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
427 best_iter = iter |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
428 |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
429 # test it on the test set |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
430 test_losses = [test_model(i) for i in xrange(n_test_batches)] |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
431 test_score = numpy.mean(test_losses) |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
432 print((' epoch %i, minibatch %i/%i, test error of best ' |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
433 'model %f %%') % |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
434 (epoch, minibatch_index+1, n_train_batches, |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
435 test_score*100.)) |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
436 |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
437 |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
438 if patience <= iter : |
114
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
439 done_looping = True |
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
440 break |
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
441 |
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
442 end_time = time.clock() |
119
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
443 print(('Optimization complete with best validation score of %f %%,' |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
444 'with test performance %f %%') % |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
445 (best_validation_loss * 100., test_score*100.)) |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
446 print ('The code ran for %f minutes' % ((end_time-start_time)/60.)) |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
447 |
114
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
448 |
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
449 if __name__ == '__main__': |
119
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
450 import sys |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
451 args = sys.argv[1:] |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
452 if len(args) > 0 and args[0] == "jobman_add": |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
453 jobman_add() |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
454 else: |
4f37755d301b
Refait stacked_dae.py en utilisant le dataset complet shared (juste reparti à 0 à partir du code du tutoriel), et préparé pour utiliser NIST (pas testé)
fsavard
parents:
114
diff
changeset
|
455 sgd_optimization_mnist(dataset=MNIST_LOCATION) |
114
0b4080394f2c
Added stacked DAE code for my experiments, based on tutorial code. Quite unfinished.
fsavard
parents:
diff
changeset
|
456 |