Dzmitry Bahdanau
2016-02-17 15:14:11 UTC
Hi all,
I have significant experience with theano.scan, but its error messages were
always incomprehensible for me. Perhaps this is the day to figure out how
to read them..
Here is a typical error message that I got this morning:
* When compiling the inner function of scan (the function called by scan in
each of its iterations) the following error has been encountered: The
initial state (`outputs_info` in scan nomenclature) of variable
IncSubtensor{Set;:int64:}.0 (argument number 0) has 3 dimension(s), while
the corresponding variable in the result of the inner function of scan
(`fn`) has 3 dimension(s) (it should be one less than the initial state).
For example, if the inner function of scan returns a vector of size d and
scan uses the values of the previous time-step, then the initial state in
scan should be a matrix of shape (1, d). The first dimension of this matrix
corresponds to the number of previous time-steps that scan uses in each of
its iterations. In order to solve this issue if the two varialbe currently
have the same dimensionality, you can increase the dimensionality of the
variable in the initial state of scan by using dimshuffle or shape_padleft.
*
Now, I know that it means that my "outputs_info" don't match the variable
returned by inner scan function. But let me try to read this error message
literally:
*The initial state (`outputs_info` in scan nomenclature) of variable
IncSubtensor{Set;:int64:}.0 (argument number 0) has 3 dimension(s), while
the corresponding variable in the result of the inner function of scan
(`fn`) has 3 dimension(s)*All right, let's look what we have in outputs_info
*ipdb> outputs_info[None, Rebroadcast{0}.0]ipdb> outputs_info[1].ndim2*
Oops! First of all, there is no *IncSubtensor{Set;:int64:}.0, *in this
list. In addition, there is no variable with 3 dimensions. But let's look
further:
*For example, if the inner function of scan returns a vector of size d and
scan uses the values of the previous time-step, then the initial state in
scan should be a matrix of shape (1, d). *While I believe that providing an
initial state of shape (1, d) would probably work, nobody does this,
including the official scan tutorial! The standard practice in such case is
to provide a d-vector as an initial state. In the common case when only
previous state results are used, it is perfectly fine to have the initial
state and the value returned by scan function with the same shape!
This error message gives me a double blow: first it is incomprehensible,
second, it postulates that I have always been using Scan in wrong way, and
makes me wonder, how it ever worked. The only useful information in this
message is that the result of the inner function has 3 dimensions. This was
actually helpful in fixing the bug.
I would be curious to hear the opinion of Theano developers, can we somehow
make this super common error message less confusing?
I have significant experience with theano.scan, but its error messages were
always incomprehensible for me. Perhaps this is the day to figure out how
to read them..
Here is a typical error message that I got this morning:
* When compiling the inner function of scan (the function called by scan in
each of its iterations) the following error has been encountered: The
initial state (`outputs_info` in scan nomenclature) of variable
IncSubtensor{Set;:int64:}.0 (argument number 0) has 3 dimension(s), while
the corresponding variable in the result of the inner function of scan
(`fn`) has 3 dimension(s) (it should be one less than the initial state).
For example, if the inner function of scan returns a vector of size d and
scan uses the values of the previous time-step, then the initial state in
scan should be a matrix of shape (1, d). The first dimension of this matrix
corresponds to the number of previous time-steps that scan uses in each of
its iterations. In order to solve this issue if the two varialbe currently
have the same dimensionality, you can increase the dimensionality of the
variable in the initial state of scan by using dimshuffle or shape_padleft.
*
Now, I know that it means that my "outputs_info" don't match the variable
returned by inner scan function. But let me try to read this error message
literally:
*The initial state (`outputs_info` in scan nomenclature) of variable
IncSubtensor{Set;:int64:}.0 (argument number 0) has 3 dimension(s), while
the corresponding variable in the result of the inner function of scan
(`fn`) has 3 dimension(s)*All right, let's look what we have in outputs_info
*ipdb> outputs_info[None, Rebroadcast{0}.0]ipdb> outputs_info[1].ndim2*
Oops! First of all, there is no *IncSubtensor{Set;:int64:}.0, *in this
list. In addition, there is no variable with 3 dimensions. But let's look
further:
*For example, if the inner function of scan returns a vector of size d and
scan uses the values of the previous time-step, then the initial state in
scan should be a matrix of shape (1, d). *While I believe that providing an
initial state of shape (1, d) would probably work, nobody does this,
including the official scan tutorial! The standard practice in such case is
to provide a d-vector as an initial state. In the common case when only
previous state results are used, it is perfectly fine to have the initial
state and the value returned by scan function with the same shape!
This error message gives me a double blow: first it is incomprehensible,
second, it postulates that I have always been using Scan in wrong way, and
makes me wonder, how it ever worked. The only useful information in this
message is that the result of the inner function has 3 dimensions. This was
actually helpful in fixing the bug.
I would be curious to hear the opinion of Theano developers, can we somehow
make this super common error message less confusing?
--
---
You received this message because you are subscribed to the Google Groups "theano-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to theano-users+***@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
---
You received this message because you are subscribed to the Google Groups "theano-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to theano-users+***@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.