* init grad op checker
* can run
* add GradeChecker class
* use get_numeric_gradient
* refine code
* add softmax and cross entropy auto grad test
* use close to judge op_grad and numeric_grad
* add cpu and gpu compare
* add comments
* add support_gpu
* fix allclose
* fix name error and symplify code
* optimize gradient checker
* add test_cross_entropy_op
* update gradient_checker.py
* optimize code
* use random.uniform instead of random.random
* fix type bug
* optimize check_grad
* put SupportGPU into OperatorBase
* typo
It can be run both CPU/GPU. configure attributes are:
* min: the min value of uniform random
* max: the max value of uniform random
* dims: the dimension of output tensor
* seed: the random seed of uniform random. 0 means generate a seed each
time.
* Expose Net to Python
* Expose PlainNet to Python, make python can add_op, complete_add_op
* Provide a low level api to manipulate Net
* Unittest for Net::DebugString
* Follow review comments to seperate Tensor Numpy interactive methods in
tensor.h.
* Simplify logic for `CastToPyBufferImpl`, make it as one struct and in
details namespace.
* Remove `Scope` expose in Python, since it currently is useless.
* Remove some debug functions.
`Paddle` manages Scope as programming language's scope. It just a
thread-local stack of Scope. Top of that stack is current scope, the
bottom of that stack is all scopes' parent.
Invoking `create_var/get_var` can `create/get` variable in current
scope. Invoking `enter_local_scope/leave_local_scope` can create or
destroy local scope.
A `scoped_function` will take a `function` as input. That function will
be invoked in a new local scope.
* Expose paddle.framework by pybind11
* Export paddle.framework.{Scope, Variable} to paddle.v2.framework.core.
* See python/paddle/v2/framework/tests/test_scope.py for Python usage
* See paddle/pybind/pybind.cc for C++ bind code.
* add copyright
Python should be able to manipulate Protobuf message because:
1. Python's `create_op_creation_methods` take the `OpProto` array to
generate all `op_creation_methods` in RunTime.
2. All `op_creation_methods` will create an `OpDesc` and pass it to
Paddle C++ method `CreateOp` and return the Op handle.
Here is the list of what is added in this commit:
* Add `protobuf_generate_python` if it is not defined.
* Before cmake 3.4, `protobuf_generate_python` is not defined. Just
copy the implementation of that function in `protobuf.cmake`
* Add `py_proto_compile` function in `cmake/generic.cmake`.
* It follows bazel's API interface.
* https://github.com/pubref/rules_protobuf#rules
* Add an empty package named `paddle.v2.framework`, all python code of
`paddle::framework` will be in that package.
* Generate protobuf's python module `__init__.py` by `touch` while
compiling.
* Change setup.py.in, make `paddle.v2.framework.proto` uses the
generated protobuf pythons.