提交 46a85a15 authored 作者: lamblin's avatar lamblin

Merge pull request #1128 from delallea/minor

Minor fixes
...@@ -204,14 +204,17 @@ Inplace optimization and DebugMode ...@@ -204,14 +204,17 @@ Inplace optimization and DebugMode
It is recommended that during the graph construction, all Ops are not inplace. It is recommended that during the graph construction, all Ops are not inplace.
Then an optimization replaces them with inplace ones. Currently DebugMode checks Then an optimization replaces them with inplace ones. Currently DebugMode checks
all optimizations that were tried even if they got rejected. One reason an inplace all optimizations that were tried even if they got rejected. One reason an inplace
optimization can get rejected is that there is another Op that is already being applied optimization can get rejected is when there is another Op that is already being applied
inplace on the same input. Another reason to reject an inplace optimization is inplace on the same input. Another reason to reject an inplace optimization is
if it would introduce a cycle into the graph. if it would introduce a cycle into the graph.
To allow using DebugMode more often, we can pre-check that our optimization will The problem with DebugMode is that it will trigger a useless error when
get rejected in many cases (not the cycle reason). For this you can use the checking a rejected inplace optimization, since it will lead to wrong results.
``theano.gof.destroyhandler.fast_inplace_check()`` function that will tell you which In order to be able to use DebugMode in more situations, your inplace
Op can be performed inplace. optimization can pre-check whether it will get rejected by using the
``theano.gof.destroyhandler.fast_inplace_check()`` function, that will tell
which Ops can be performed inplace. You may then skip the optimization if it is
incompatible with this check. Note however that this check does not cover all
cases where an optimization may be rejected (it will not detect cycles).
.. _optdb: .. _optdb:
...@@ -20,11 +20,13 @@ since 2007. But it is also approachable enough to be used in the classroom ...@@ -20,11 +20,13 @@ since 2007. But it is also approachable enough to be used in the classroom
News News
==== ====
* New technical report on Theano: `Theano: new features and speed improvements <http://arxiv.org/abs/1211.5590>`_. Please cite the other paper below. * New technical report on Theano: `Theano: new features and speed improvements <http://arxiv.org/abs/1211.5590>`_.
However, please keep citing the other paper below in scientific work involving Theano.
* Theano 0.6rc2 was released. Everybody is encouraged to update. * Theano 0.6rc2 was released. Everybody is encouraged to update.
* `HPCS 2011 Tutorial <http://www.iro.umontreal.ca/~lisa/pointeurs/tutorial_hpcs2011_fixed.pdf>`_. I included a few fix discovered while doing the Tutorial. * `HPCS 2011 Tutorial <http://www.iro.umontreal.ca/~lisa/pointeurs/tutorial_hpcs2011_fixed.pdf>`_.
We included a few fixes discovered while doing the Tutorial.
.. image:: images/talk2010.png .. image:: images/talk2010.png
:scale: 75% :scale: 75%
......
...@@ -12,4 +12,4 @@ tutorials/exercises if you need to learn it or only need a refresher: ...@@ -12,4 +12,4 @@ tutorials/exercises if you need to learn it or only need a refresher:
* `Dive into Python <http://diveintopython.net/>`__ * `Dive into Python <http://diveintopython.net/>`__
* `Google Python Class <http://code.google.com/edu/languages/google-python-class/index.html>`__ * `Google Python Class <http://code.google.com/edu/languages/google-python-class/index.html>`__
We have a tutorial on how :ref:`python manage its memory <python-memory-management>` We have a tutorial on how :ref:`Python manages its memory <python-memory-management>`.
...@@ -168,18 +168,18 @@ def function(inputs, outputs=None, mode=None, updates=None, givens=None, ...@@ -168,18 +168,18 @@ def function(inputs, outputs=None, mode=None, updates=None, givens=None,
not isinstance(updates, gof.python25.OrderedDict): not isinstance(updates, gof.python25.OrderedDict):
warnings.warn( warnings.warn(
"The parameter 'updates' of theano.function()" "The parameter 'updates' of theano.function()"
" expect an OrderedDict," " expects an OrderedDict,"
" got " + str(type(updates)) + "Using " " got " + str(type(updates)) + ". Using "
"a standard dictionary here results in " "a standard dictionary here results in "
"non-deterministic behavior. You should use an OrderedDict" "non-deterministic behavior. You should use an OrderedDict"
" if you are using python2.7 or use a list of (shared, update)" " if you are using Python 2.7, or use a list of (shared, update)"
" pairs. Do not just convert your dictionary to this type before" " pairs. Do not just convert your dictionary to this type before"
" the call as the conversion will still be non-deterministic.") " the call as the conversion will still be non-deterministic.")
if givens is None: if givens is None:
givens = [] givens = []
if not isinstance(inputs, (list, tuple)): if not isinstance(inputs, (list, tuple)):
raise Exception("Inputs variable of a Theano function should be" raise Exception("Input variables of a Theano function should be"
" contained in a list, even when there is a single input.") " contained in a list, even when there is a single input.")
# compute some features of the arguments: # compute some features of the arguments:
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论