Mercurial > pylearn
annotate sandbox/simple_autoassociator/model.py @ 434:0f366ecb11ee
log2->log in cost
author | Olivier Breuleux <breuleuo@iro.umontreal.ca> |
---|---|
date | Mon, 04 Aug 2008 16:21:59 -0400 |
parents | faffaae0d2f9 |
children | 8849eba55520 |
rev | line source |
---|---|
370
a1bbcde6b456
Moved sparse_random_autoassociator from my repository
Joseph Turian <turian@gmail.com>
parents:
diff
changeset
|
1 """ |
a1bbcde6b456
Moved sparse_random_autoassociator from my repository
Joseph Turian <turian@gmail.com>
parents:
diff
changeset
|
2 The model for an autoassociator for sparse inputs, using Ronan Collobert + Jason |
a1bbcde6b456
Moved sparse_random_autoassociator from my repository
Joseph Turian <turian@gmail.com>
parents:
diff
changeset
|
3 Weston's sampling trick (2008). |
a1bbcde6b456
Moved sparse_random_autoassociator from my repository
Joseph Turian <turian@gmail.com>
parents:
diff
changeset
|
4 """ |
a1bbcde6b456
Moved sparse_random_autoassociator from my repository
Joseph Turian <turian@gmail.com>
parents:
diff
changeset
|
5 |
a1bbcde6b456
Moved sparse_random_autoassociator from my repository
Joseph Turian <turian@gmail.com>
parents:
diff
changeset
|
6 from graph import trainfn |
a1bbcde6b456
Moved sparse_random_autoassociator from my repository
Joseph Turian <turian@gmail.com>
parents:
diff
changeset
|
7 import parameters |
372
75bab24bb2d8
Moved more logic into model.py
Joseph Turian <turian@gmail.com>
parents:
370
diff
changeset
|
8 |
75bab24bb2d8
Moved more logic into model.py
Joseph Turian <turian@gmail.com>
parents:
370
diff
changeset
|
9 import globals |
75bab24bb2d8
Moved more logic into model.py
Joseph Turian <turian@gmail.com>
parents:
370
diff
changeset
|
10 from globals import LR |
75bab24bb2d8
Moved more logic into model.py
Joseph Turian <turian@gmail.com>
parents:
370
diff
changeset
|
11 |
370
a1bbcde6b456
Moved sparse_random_autoassociator from my repository
Joseph Turian <turian@gmail.com>
parents:
diff
changeset
|
12 import numpy |
372
75bab24bb2d8
Moved more logic into model.py
Joseph Turian <turian@gmail.com>
parents:
370
diff
changeset
|
13 import random |
75bab24bb2d8
Moved more logic into model.py
Joseph Turian <turian@gmail.com>
parents:
370
diff
changeset
|
14 random.seed(globals.SEED) |
75bab24bb2d8
Moved more logic into model.py
Joseph Turian <turian@gmail.com>
parents:
370
diff
changeset
|
15 |
370
a1bbcde6b456
Moved sparse_random_autoassociator from my repository
Joseph Turian <turian@gmail.com>
parents:
diff
changeset
|
16 class Model: |
a1bbcde6b456
Moved sparse_random_autoassociator from my repository
Joseph Turian <turian@gmail.com>
parents:
diff
changeset
|
17 def __init__(self): |
a1bbcde6b456
Moved sparse_random_autoassociator from my repository
Joseph Turian <turian@gmail.com>
parents:
diff
changeset
|
18 self.parameters = parameters.Parameters(randomly_initialize=True) |
a1bbcde6b456
Moved sparse_random_autoassociator from my repository
Joseph Turian <turian@gmail.com>
parents:
diff
changeset
|
19 |
372
75bab24bb2d8
Moved more logic into model.py
Joseph Turian <turian@gmail.com>
parents:
370
diff
changeset
|
20 def update(self, instance): |
75bab24bb2d8
Moved more logic into model.py
Joseph Turian <turian@gmail.com>
parents:
370
diff
changeset
|
21 """ |
75bab24bb2d8
Moved more logic into model.py
Joseph Turian <turian@gmail.com>
parents:
370
diff
changeset
|
22 Update the L{Model} using one training instance. |
75bab24bb2d8
Moved more logic into model.py
Joseph Turian <turian@gmail.com>
parents:
370
diff
changeset
|
23 @param instance: A dict from feature index to (non-zero) value. |
75bab24bb2d8
Moved more logic into model.py
Joseph Turian <turian@gmail.com>
parents:
370
diff
changeset
|
24 @todo: Should assert that nonzero_indices and zero_indices |
75bab24bb2d8
Moved more logic into model.py
Joseph Turian <turian@gmail.com>
parents:
370
diff
changeset
|
25 are correct (i.e. are truly nonzero/zero). |
75bab24bb2d8
Moved more logic into model.py
Joseph Turian <turian@gmail.com>
parents:
370
diff
changeset
|
26 """ |
386 | 27 x = numpy.zeros(globals.INPUT_DIMENSION) |
28 for idx in instance.keys(): | |
29 x[idx] = instance[idx] | |
30 | |
411
faffaae0d2f9
Autoassociator now seems to work
Joseph Turian <turian@iro.umontreal.ca>
parents:
404
diff
changeset
|
31 (y, h, loss, gw1, gb1, gw2, gb2) = trainfn(x, self.parameters.w1, self.parameters.b1, self.parameters.w2, self.parameters.b2) |
faffaae0d2f9
Autoassociator now seems to work
Joseph Turian <turian@iro.umontreal.ca>
parents:
404
diff
changeset
|
32 # print |
faffaae0d2f9
Autoassociator now seems to work
Joseph Turian <turian@iro.umontreal.ca>
parents:
404
diff
changeset
|
33 # print "instance:", instance |
faffaae0d2f9
Autoassociator now seems to work
Joseph Turian <turian@iro.umontreal.ca>
parents:
404
diff
changeset
|
34 # print "x:", x |
faffaae0d2f9
Autoassociator now seems to work
Joseph Turian <turian@iro.umontreal.ca>
parents:
404
diff
changeset
|
35 # print "OLD y:", y |
370
a1bbcde6b456
Moved sparse_random_autoassociator from my repository
Joseph Turian <turian@gmail.com>
parents:
diff
changeset
|
36 print "OLD total loss:", loss |
411
faffaae0d2f9
Autoassociator now seems to work
Joseph Turian <turian@iro.umontreal.ca>
parents:
404
diff
changeset
|
37 # print "gw1:", gw1 |
faffaae0d2f9
Autoassociator now seems to work
Joseph Turian <turian@iro.umontreal.ca>
parents:
404
diff
changeset
|
38 # print "gb1:", gb1 |
faffaae0d2f9
Autoassociator now seems to work
Joseph Turian <turian@iro.umontreal.ca>
parents:
404
diff
changeset
|
39 # print "gw2:", gw2 |
faffaae0d2f9
Autoassociator now seems to work
Joseph Turian <turian@iro.umontreal.ca>
parents:
404
diff
changeset
|
40 # print "gb2:", gb2 |
370
a1bbcde6b456
Moved sparse_random_autoassociator from my repository
Joseph Turian <turian@gmail.com>
parents:
diff
changeset
|
41 |
a1bbcde6b456
Moved sparse_random_autoassociator from my repository
Joseph Turian <turian@gmail.com>
parents:
diff
changeset
|
42 # SGD update |
386 | 43 self.parameters.w1 -= LR * gw1 |
44 self.parameters.b1 -= LR * gb1 | |
45 self.parameters.w2 -= LR * gw2 | |
46 self.parameters.b2 -= LR * gb2 | |
370
a1bbcde6b456
Moved sparse_random_autoassociator from my repository
Joseph Turian <turian@gmail.com>
parents:
diff
changeset
|
47 |
a1bbcde6b456
Moved sparse_random_autoassociator from my repository
Joseph Turian <turian@gmail.com>
parents:
diff
changeset
|
48 # Recompute the loss, to make sure it's descreasing |
411
faffaae0d2f9
Autoassociator now seems to work
Joseph Turian <turian@iro.umontreal.ca>
parents:
404
diff
changeset
|
49 (y, h, loss, gw1, gb1, gw2, gb2) = trainfn(x, self.parameters.w1, self.parameters.b1, self.parameters.w2, self.parameters.b2) |
faffaae0d2f9
Autoassociator now seems to work
Joseph Turian <turian@iro.umontreal.ca>
parents:
404
diff
changeset
|
50 # print "NEW y:", y |
370
a1bbcde6b456
Moved sparse_random_autoassociator from my repository
Joseph Turian <turian@gmail.com>
parents:
diff
changeset
|
51 print "NEW total loss:", loss |
411
faffaae0d2f9
Autoassociator now seems to work
Joseph Turian <turian@iro.umontreal.ca>
parents:
404
diff
changeset
|
52 # print "h:", h |
faffaae0d2f9
Autoassociator now seems to work
Joseph Turian <turian@iro.umontreal.ca>
parents:
404
diff
changeset
|
53 # print self.parameters |