@@ -2,40 +2,40 @@ documented all commits up to: a1f5e8f854f8(during 28 july 2011)
...
@@ -2,40 +2,40 @@ documented all commits up to: a1f5e8f854f8(during 28 july 2011)
Modifications in the 0.4.1 release candidate 1
Modifications in the 0.4.1 release candidate 1
TODO:
TODO:
* LazyLinker, VM, CVM with profile
* LazyLinker, VM, CVM with profile
* James sparse sandbox op.
* James sparse sandbox op.
Unknow impact:
Unknown impact:
* Compilation cache: we put some theano flags with in_c_key=False. How this affect the compilation cache?
* Compilation cache: we put some theano flags with in_c_key=False. How does this affect the compilation cache?
Deprecation:
Deprecation:
* The string mode (accepted only by theano.function()) FAST_RUN_NOGC. Use Mode(linker='c|py_nogc') instead.
* The string mode (accepted only by theano.function()) FAST_RUN_NOGC. Use Mode(linker='c|py_nogc') instead.
* The string mode (accepted only by theano.function()) STABILIZE. Use Mode(optimizer='stabilize') instead.
* The string mode (accepted only by theano.function()) STABILIZE. Use Mode(optimizer='stabilize') instead.
* Scan interface change...RP what they are? I think you deprecated AND removed them... TODO
* Scan interface change...RP what are these changes? I think you deprecated AND removed them... TODO
Bugs fixed:
Bugs fixed:
* In one case a AdvancedSubtensor1 could be converted to a GpuAdvancedIncSubtensor1 insted of GpuAdvancedSubtensor1.
* In one case an AdvancedSubtensor1 could be converted to a GpuAdvancedIncSubtensor1 insted of GpuAdvancedSubtensor1.
It probably didn't happened due to the order of optimizations, but that order is not waranty to be the same on all computers.
It probably didn't happen due to the order of optimizations, but that order is not guaranteed to be the same on all computers.
* Derivative of set_subtensor was wrong.
* Derivative of set_subtensor was wrong.
* Derivative of Alloc was wrong.
* Derivative of Alloc was wrong.
Crash fixed:
Crash fixed:
* On an unusual python 2.4.4 on Windows
* On an unusual Python 2.4.4 on Windows
* When using a C cache copied from another location
* When using a C cache copied from another location
* On Windows 32 bits when setting a complex64 to 0.
* On Windows 32 bits when setting a complex64 to 0.
* Compilation crash with CUDA 4
* Compilation crash with CUDA 4
* Fixed many problem when wanting to copy the compilation cache from a computer to another
* when wanting to copy the compilation cache from a computer to another
* This can be usefull to use Theano on a computer without compiler.
* This can be useful for using Theano on a computer without a compiler.
GPU:
GPU:
* Compilation crash fixed under Ubuntu 11.04
* Compilation crash fixed under Ubuntu 11.04
* Compilation crash with CUDA 4.0
* Compilation crash fixed with CUDA 4.0
* PyCUDA/Theano bridge and `documentation <http://deeplearning.net/software/theano/tutorial/pycuda.html>`_.
* PyCUDA/Theano bridge and `documentation <http://deeplearning.net/software/theano/tutorial/pycuda.html>`_.
* New function to easily convert pycuda GPUArray object to and from CudaNdarray object
* New function to easily convert pycuda GPUArray object to and from CudaNdarray object
* Fixed a bug if you crated a view of a manually created CudaNdarray that are view of GPUArray.
* Fixed a bug if you crated a view of a manually created CudaNdarray that are view of GPUArray.
...
@@ -45,57 +45,54 @@ GPU:
...
@@ -45,57 +45,54 @@ GPU:
New features:
New features:
* `R_op <http://deeplearning.net/software/theano/tutorial/gradients.html>`_ macro like theano.tensor.grad
* `R_op <http://deeplearning.net/software/theano/tutorial/gradients.html>`_ macro like theano.tensor.grad
* Not all test done yet(TODO)
* Not all tests are done yet (TODO)
* Added alias theano.tensor.bitwise_{and,or,xor,not}. They are the numpy name
* Added alias theano.tensor.bitwise_{and,or,xor,not}. They are the numpy names.
* Updates returned by Scan (you need to pass them to the theano.function) are now a new Updates class.
* Updates returned by Scan (you need to pass them to the theano.function) are now a new Updates class.
That allow more check and easier work with them. The Updates class is a subclass of dict
That allow more check and easier work with them. The Updates class is a subclass of dict
* Scan can now work in a "do while" loop style.
* Scan can now work in a "do while" loop style.
* We scan until a condition is meat.
* We scan until a condition is met.
* There is a minimum of 1 iteration(can't do "while do" style loop)
* There is a minimum of 1 iteration(can't do "while do" style loop)
* The "Interactive Debugger"(compute_test_value theano flags)
* The "Interactive Debugger" (compute_test_value theano flags)
* Now should work with all op (even the one with only c code)
* Now should work with all ops (even the one with only C code)
* In the past some errors where transformed to others that not related one.
* In the past some errors were caught and re-raised as unrelated errors (ShapeMismatch replaced with NotImplemented). We don't do that anymore.
Now we don't do that anymore.
* The new Op.make_thunk function(introduced in 0.4.0) is now used by constant_folding and DebugMode
* The new Op.make_thunk function(introduced in 0.4.0) is now used by constant_folding and DebugMode
* Added A_TENSOR_VARIABLE.astype() as a way to cast. Numpy allow this syntax.
* Added A_TENSOR_VARIABLE.astype() as a way to cast. NumPy allows this syntax.
* New BLAS GER implementation.
* New BLAS GER implementation.
* Insert gemv more frequently.
* Insert GEMV more frequently.
* Added new ifelse(scalar condition, rval_if_true, rval_if_false) Op.
* Added new ifelse(scalar condition, rval_if_true, rval_if_false) Op.
* This is a subset of the elemwise switch(tensor condition, rval_if_true, rval_if_false).
* This is a subset of the elemwise switch(tensor condition, rval_if_true, rval_if_false).
* With the new feature in the sandbox, only rval_if_true or rval_if_false will be evaluated
* With the new feature in the sandbox, only one of rval_if_true or rval_if_false will be evaluated.
Optimization:
Optimizations:
* Subtensor has c code
* Subtensor has C code
* {Inc,Set}Subtensor has c code
* {Inc,Set}Subtensor has C code
* ScalarFromTensor has c code
* ScalarFromTensor has C code
* dot(zeros,x) and dot(x,zeros)
* dot(zeros,x) and dot(x,zeros)
* IncSubtensor(x, zeros, idx) -> x
* IncSubtensor(x, zeros, idx) -> x
* SetSubtensor(x, x[idx], idx) -> x (when x is a constant)
* SetSubtensor(x, x[idx], idx) -> x (when x is a constant)
* subtensor(alloc,...) -> alloc
* subtensor(alloc,...) -> alloc
* Many new scan optimization (TODO, list them)
* Many new scan optimization (TODO, list them)
* Lower scan execution overhead with a cython implementation
* Lower scan execution overhead with a Cython implementation
* Removed scan double compilation (by using the new Op.make_thunk mechanism)
* Removed scan double compilation (by using the new Op.make_thunk mechanism)
Sandbox:
Sandbox:
* MRG random generator now implement the same casting behavior as the regular random generator.
* MRG random generator now implements the same casting behavior as the regular random generator.
Sandbox New features(not enabled by default):
Sandbox New features(not enabled by default):
* New Linkers(theano flags linker={vm,cvm})
* New Linkers (theano flags linker={vm,cvm})
* It allow to evaluate lazyly the new op ifelse.
* The new linker allows lazy evaluation of the new ifelse op, meaning we compute only the true or false branch depending of the condition. This can speed up some types of computation.
* That mean we compyte only the true or false branch depending of the condition.
* Uses a new profiling system (that currently tracks less stuff)
* This can speed up some type of computation.
* The cvm is implemented in C, so it lowers Theano's overhead.
* Use a new profiling system (currently track less stuff)
* The vm is implemented in python. So it can help debugging in some cases.
* The cvm is implemented in C. So It lower theano overhead.
* In the future, the default will be the cvm.
* The vm is implemented in python. So it can help debuging in some case
* Some new not yet well tested sparse ops: theano.sparse.sandbox.{SpSum, Diag, SquareDiagonal, ColScaleCSC, RowScaleCSC, Remove0, EnsureSortedIndices, ConvolutionIndices}
* In the futur the default will be cvm.
* Some new not well tested sparse op: theano.sparse.sandbox.{SpSum, Diag, SquareDiagonal, ColScaleCSC, RowScaleCSC, Remove0, EnsureSortedIndices, ConvolutionIndices}
Documentation:
Documentation:
* How to compute the `Jocobian, Hessian, Jacobian times a vector, Hesian times a vector <http://deeplearning.net/software/theano/tutorial/gradients.html>`_.
* How to compute the `Jacobian, Hessian, Jacobian times a vector, Hessian times a vector <http://deeplearning.net/software/theano/tutorial/gradients.html>`_.
* Slide for a 3 hours class with exercises that was done at the HPCS2011 Conference in Montréal.
* Slide for a 3 hours class with exercises that was done at the HPCS2011 Conference in Montréal.
Others:
Others:
...
@@ -103,11 +100,11 @@ Others:
...
@@ -103,11 +100,11 @@ Others:
* Logger name renamed to be consistent.
* Logger name renamed to be consistent.
* Logger function simplified and made more consistent.
* Logger function simplified and made more consistent.
* Fixed transformation of error by other not related error with the compute_test_value Theano flag.
* Fixed transformation of error by other not related error with the compute_test_value Theano flag.
* Compilation cache enhencement.
* Compilation cache enhancements.
* Made compatible with numpy 1.6 and scipy 0.9
* Made compatible with NumPy 1.6 and SciPy 0.9
* Fix tests when there was new dtype in numpy that is not supported by Theano.
* Fix tests when there was new dtype in NumPy that is not supported by Theano.
* Fixed some tests when scipy is not available
* Fixed some tests when SciPy is not available.
* Don't compile anything when Theano is imported. Compile support code when we compile the first c code.
* Don't compile anything when Theano is imported. Compile support code when we compile the first C code.
* Python 2.4 fix:
* Python 2.4 fix:
* Fix the file theano/misc/check_blas.py
* Fix the file theano/misc/check_blas.py
* For python 2.4.4 on Windows, replaced float("inf") with numpy.inf.
* For python 2.4.4 on Windows, replaced float("inf") with numpy.inf.
...
@@ -115,28 +112,17 @@ Others:
...
@@ -115,28 +112,17 @@ Others:
Core:
Core:
* there is a new mechanism that lets an Op permit that one of its
* there is a new mechanism that lets an Op permit that one of its
inputs can be aliased to another destroyed input. This will generally
inputs to be aliased to another destroyed input. This will generally
result in incorrect calculation, so it should be used with care! The
result in incorrect calculation, so it should be used with care! The
right way to use it is when the caller can guarantee that even if
right way to use it is when the caller can guarantee that even if
these two inputs look aliased, they actually will never overlap. This
these two inputs look aliased, they actually will never overlap. This
mechanism can be used for example, by a new alternative approach to
mechanism can be used, for example, by a new alternative approach to
implementing Scan. If an op has an attribute called
implementing Scan. If an op has an attribute called
"destroyhandler_tolerate_aliased" then this is what's going on.
"destroyhandler_tolerate_aliased" then this is what's going on.
IncSubtensor is thus far the only Op to use this mechanism.Mechanism
IncSubtensor is thus far the only Op to use this mechanism.Mechanism