annotate pylearn/formulas/nnet.py @ 1489:35a3a4e2d999

added formulas/nnet.py with inverse_max_pooling(...)
author Emmanuel Bengio <bengioe@iro.umontreal.ca>
date Wed, 27 Jul 2011 10:37:41 -0400
parents
children 9d2323513092
rev   line source
1489
35a3a4e2d999 added formulas/nnet.py with inverse_max_pooling(...)
Emmanuel Bengio <bengioe@iro.umontreal.ca>
parents:
diff changeset
1 import theano
35a3a4e2d999 added formulas/nnet.py with inverse_max_pooling(...)
Emmanuel Bengio <bengioe@iro.umontreal.ca>
parents:
diff changeset
2 from theano import tensor
35a3a4e2d999 added formulas/nnet.py with inverse_max_pooling(...)
Emmanuel Bengio <bengioe@iro.umontreal.ca>
parents:
diff changeset
3 from theano.sandbox import neighbours
35a3a4e2d999 added formulas/nnet.py with inverse_max_pooling(...)
Emmanuel Bengio <bengioe@iro.umontreal.ca>
parents:
diff changeset
4
35a3a4e2d999 added formulas/nnet.py with inverse_max_pooling(...)
Emmanuel Bengio <bengioe@iro.umontreal.ca>
parents:
diff changeset
5 import tags
35a3a4e2d999 added formulas/nnet.py with inverse_max_pooling(...)
Emmanuel Bengio <bengioe@iro.umontreal.ca>
parents:
diff changeset
6
35a3a4e2d999 added formulas/nnet.py with inverse_max_pooling(...)
Emmanuel Bengio <bengioe@iro.umontreal.ca>
parents:
diff changeset
7
35a3a4e2d999 added formulas/nnet.py with inverse_max_pooling(...)
Emmanuel Bengio <bengioe@iro.umontreal.ca>
parents:
diff changeset
8 @tags.tags('nnet', 'max pooling', 'inverse')
35a3a4e2d999 added formulas/nnet.py with inverse_max_pooling(...)
Emmanuel Bengio <bengioe@iro.umontreal.ca>
parents:
diff changeset
9 def inverse_max_pooling(max_pool_out,output_shape,pooling_shape=(2,2),
35a3a4e2d999 added formulas/nnet.py with inverse_max_pooling(...)
Emmanuel Bengio <bengioe@iro.umontreal.ca>
parents:
diff changeset
10 ignore_borders = True):
35a3a4e2d999 added formulas/nnet.py with inverse_max_pooling(...)
Emmanuel Bengio <bengioe@iro.umontreal.ca>
parents:
diff changeset
11 """
35a3a4e2d999 added formulas/nnet.py with inverse_max_pooling(...)
Emmanuel Bengio <bengioe@iro.umontreal.ca>
parents:
diff changeset
12 Return a symbolic variable representing the inverse of a max pooling
35a3a4e2d999 added formulas/nnet.py with inverse_max_pooling(...)
Emmanuel Bengio <bengioe@iro.umontreal.ca>
parents:
diff changeset
13 on a given tensor.
35a3a4e2d999 added formulas/nnet.py with inverse_max_pooling(...)
Emmanuel Bengio <bengioe@iro.umontreal.ca>
parents:
diff changeset
14
35a3a4e2d999 added formulas/nnet.py with inverse_max_pooling(...)
Emmanuel Bengio <bengioe@iro.umontreal.ca>
parents:
diff changeset
15 Parameters
35a3a4e2d999 added formulas/nnet.py with inverse_max_pooling(...)
Emmanuel Bengio <bengioe@iro.umontreal.ca>
parents:
diff changeset
16 ----------
35a3a4e2d999 added formulas/nnet.py with inverse_max_pooling(...)
Emmanuel Bengio <bengioe@iro.umontreal.ca>
parents:
diff changeset
17 max_pool_out : 4D tensor
35a3a4e2d999 added formulas/nnet.py with inverse_max_pooling(...)
Emmanuel Bengio <bengioe@iro.umontreal.ca>
parents:
diff changeset
18 A Theano variable representing the output of a max pooling
35a3a4e2d999 added formulas/nnet.py with inverse_max_pooling(...)
Emmanuel Bengio <bengioe@iro.umontreal.ca>
parents:
diff changeset
19 output_shape : 4D shape
35a3a4e2d999 added formulas/nnet.py with inverse_max_pooling(...)
Emmanuel Bengio <bengioe@iro.umontreal.ca>
parents:
diff changeset
20 The shape of the input before pooling
35a3a4e2d999 added formulas/nnet.py with inverse_max_pooling(...)
Emmanuel Bengio <bengioe@iro.umontreal.ca>
parents:
diff changeset
21 pooling_shape : 2D shape
35a3a4e2d999 added formulas/nnet.py with inverse_max_pooling(...)
Emmanuel Bengio <bengioe@iro.umontreal.ca>
parents:
diff changeset
22 The shape of the pooling windows
35a3a4e2d999 added formulas/nnet.py with inverse_max_pooling(...)
Emmanuel Bengio <bengioe@iro.umontreal.ca>
parents:
diff changeset
23 ignore_borders : boolean
35a3a4e2d999 added formulas/nnet.py with inverse_max_pooling(...)
Emmanuel Bengio <bengioe@iro.umontreal.ca>
parents:
diff changeset
24 Will pad borders with zeros if true
35a3a4e2d999 added formulas/nnet.py with inverse_max_pooling(...)
Emmanuel Bengio <bengioe@iro.umontreal.ca>
parents:
diff changeset
25 """
35a3a4e2d999 added formulas/nnet.py with inverse_max_pooling(...)
Emmanuel Bengio <bengioe@iro.umontreal.ca>
parents:
diff changeset
26 # flatten the input and repeat it
35a3a4e2d999 added formulas/nnet.py with inverse_max_pooling(...)
Emmanuel Bengio <bengioe@iro.umontreal.ca>
parents:
diff changeset
27 repeated_input = [max_pool_out.flatten()]*(pooling_shape[0]*pooling_shape[1])
35a3a4e2d999 added formulas/nnet.py with inverse_max_pooling(...)
Emmanuel Bengio <bengioe@iro.umontreal.ca>
parents:
diff changeset
28
35a3a4e2d999 added formulas/nnet.py with inverse_max_pooling(...)
Emmanuel Bengio <bengioe@iro.umontreal.ca>
parents:
diff changeset
29 # concatenate the repeated vectors into
35a3a4e2d999 added formulas/nnet.py with inverse_max_pooling(...)
Emmanuel Bengio <bengioe@iro.umontreal.ca>
parents:
diff changeset
30 # a 2D matrix in the format neibs2images wants
35a3a4e2d999 added formulas/nnet.py with inverse_max_pooling(...)
Emmanuel Bengio <bengioe@iro.umontreal.ca>
parents:
diff changeset
31 stacked_conv_neibs = T.stack(*repeated_input).T
35a3a4e2d999 added formulas/nnet.py with inverse_max_pooling(...)
Emmanuel Bengio <bengioe@iro.umontreal.ca>
parents:
diff changeset
32
35a3a4e2d999 added formulas/nnet.py with inverse_max_pooling(...)
Emmanuel Bengio <bengioe@iro.umontreal.ca>
parents:
diff changeset
33 # then get back a stretched version of the stacked neighbours
35a3a4e2d999 added formulas/nnet.py with inverse_max_pooling(...)
Emmanuel Bengio <bengioe@iro.umontreal.ca>
parents:
diff changeset
34 stretch_unpooling_out = \
35a3a4e2d999 added formulas/nnet.py with inverse_max_pooling(...)
Emmanuel Bengio <bengioe@iro.umontreal.ca>
parents:
diff changeset
35 neighbours.neibs2images(stacked_conv_neibs,
35a3a4e2d999 added formulas/nnet.py with inverse_max_pooling(...)
Emmanuel Bengio <bengioe@iro.umontreal.ca>
parents:
diff changeset
36 pooling_shape,
35a3a4e2d999 added formulas/nnet.py with inverse_max_pooling(...)
Emmanuel Bengio <bengioe@iro.umontreal.ca>
parents:
diff changeset
37 output_shape,
35a3a4e2d999 added formulas/nnet.py with inverse_max_pooling(...)
Emmanuel Bengio <bengioe@iro.umontreal.ca>
parents:
diff changeset
38 'ignore_borders' if ignore_borders else 'valid')
35a3a4e2d999 added formulas/nnet.py with inverse_max_pooling(...)
Emmanuel Bengio <bengioe@iro.umontreal.ca>
parents:
diff changeset
39 return stretch_unpooling_out