It is not possible to enforce strict shape into a Theano variable. The given parameter of theano.function can change the shape any TheanoVariable in a graph.
It is not possible to enforce strict shape into a Theano variable when
building a graph. The given parameter of theano.function can change the
shape any TheanoVariable in a graph.
Currently shape informations are used for 2 things in Theano:
Currently shape informations are used for 2 things in Theano:
- When the exact shape is know, we use it to generate faster c code for the 2d convolution on the cpu and gpu.
- When the exact shape is known, we use it to generate faster c code for
- To remove computation in the graph when we only want to know the shape.
the 2d convolution on the cpu and gpu.
This is done with the `Op.infer_shape <http://deeplearning.net/software/theano/extending/cop.html#Op.infer_shape>`_ method.
- To remove computations in the graph when we only want to know the
shape, but not the actual value of a variable. This is done with the
- You can pass the shape info directly to the `ConvOp` created when calling conv2d. You must add the parameter image_shape and filter_shape to that call. They but most be tuple of 4 elements. Ex: theano.tensor.nnet.conv2d(..., image_shape=(7,3,5,5), filter_shape=(2,3,4,4))
- You can use the SpecifyShape op to add shape anywhere in the
- You can use the SpecifyShape op to add shape anywhere in the graph. This allow to do some optimization. In the following example, this allow to precompute the Theano function to a constant.
graph. This allows to do some optimizations. In the following example,
this allows to precompute the Theano function to a constant.
.. code-block:: python
.. code-block:: python
...
@@ -45,7 +64,10 @@ Currently this is not as easy as we want. We plan some upgrade, but this is the
...
@@ -45,7 +64,10 @@ Currently this is not as easy as we want. We plan some upgrade, but this is the
theano.printing.debugprint(f)
theano.printing.debugprint(f)
# [2 2] [@72791376]
# [2 2] [@72791376]
Futur plan
Future plans
==========
============
- Add the parameter constant shape to theano.shared(). This is probably the most frequent use case when we will use it. This will make the code simpler and we will be able to check that the shape don't change when we update the shared variable.
- Add the parameter "constant shape" to theano.shared(). This is probably
the most frequent use case when we will use it. This will make the code
simpler and we will be able to check that the shape does not change when