Skip to content

Commit

Permalink
change dynamic graph folder (#11451)
Browse files Browse the repository at this point in the history
* change dynamic to tape

* update readme link
  • Loading branch information
Yang Yang(Tony) authored Jun 14, 2018
1 parent d827c6e commit a59c3b7
Show file tree
Hide file tree
Showing 10 changed files with 25 additions and 19 deletions.
2 changes: 1 addition & 1 deletion paddle/contrib/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,4 @@
#

add_subdirectory(inference)
add_subdirectory(dynamic)
add_subdirectory(tape)
File renamed without changes.
18 changes: 12 additions & 6 deletions paddle/contrib/dynamic/README.md → paddle/contrib/tape/README.md
Original file line number Diff line number Diff line change
@@ -1,15 +1,20 @@
# Dynamic Graph on Fluid

PaddlePaddle Fluid is targeting the autodiff without tape, which, however, is very challenging and we are still way from there. DyNet and PyTorch provide a good design idea, the *tape*, that significantly eases the challenge. Also, DyNet provides a C++ API that is as convenient as Python but with higher efficiency and could conveniently integrate with industrial/production systems. This package, `tape`, combines the good of
PaddlePaddle Fluid is targeting the autodiff without tape, which, however, is very
challenging and we are still way from there. DyNet and PyTorch provide a good design
idea, the *tape*, that significantly eases the challenge. Also, DyNet provides
a C++ API that is as convenient as Python but with higher efficiency and could
conveniently integrate with industrial/production systems. This package, `tape`,
combines the good of

1. tape from PyTorch and DyNet
2. C++ API and core from DyNet
3. rich set of operators from PaddlePaddle

## Overview

We can implement Dynet-like Tape(See this survey) by wrapping Paddle Fluid's `Operator`
and `Variable`.
We can implement Dynet-like Tape(See this [survey](https://github.com/PaddlePaddle/Paddle/blob/develop/doc/survey/dynamic_graph.md))
by wrapping Paddle Fluid's `Operator` and `Variable`.

The user API is straight forward since

Expand Down Expand Up @@ -121,13 +126,14 @@ paddle::tape::SGD sgd(0.001);
// Data Feeder
paddle::tape::Fill data_feeder(...);
VariableHandle input(new paddle::tape::Variable("input"));
VariableHandle label(new paddle::tape::Variable("label"));

for (int i = 0; i < 2; ++i) {
reset_global_tape();

data_feeder(input);
data_feeder(input, label);

auto loss = mean(linear2(linear1(input))); // compile time InferShape & InferVarType
auto loss = softmax(linear2(linear1(input)), label); // compile time InferShape & InferVarType
LOG(INFO) << loss.value(); // Run forward up to loss

// Run backward, store gradient of w at w->Grad()
Expand Down Expand Up @@ -209,7 +215,7 @@ digraph G {
}
</details>
![Image](https://github.com/tonyyang-svail/Paddle/blob/cpp_tap/paddle/contrib/dynamic/computation_graph.png)
![Image](https://github.com/tonyyang-svail/Paddle/blob/cpp_tap/paddle/contrib/tape/computation_graph.png)
## Code Reuse
Expand Down
File renamed without changes
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,12 @@

#include <string>

#include "paddle/contrib/dynamic/tape.h"
#include "paddle/contrib/dynamic/variable.h"
#include "paddle/contrib/tape/tape.h"
#include "paddle/contrib/tape/variable.h"
#include "paddle/fluid/framework/type_defs.h"

namespace paddle {
namespace dynamic {
namespace tape {

class Function {};

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
// See the License for the specific language governing permissions and
// limitations under the License.

#include "paddle/contrib/dynamic/tape.h"
#include "paddle/contrib/tape/tape.h"

#include <list>
#include <map>
Expand All @@ -29,7 +29,7 @@
#include "paddle/fluid/pybind/pybind.h"

namespace paddle {
namespace dynamic {
namespace tape {

// borrowed from
// https://stackoverflow.com/questions/874134/find-if-string-ends-with-another-string-in-c
Expand Down
4 changes: 2 additions & 2 deletions paddle/contrib/dynamic/tape.h → paddle/contrib/tape/tape.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,10 @@
#include <string>
#include <vector>

#include "paddle/contrib/dynamic/variable.h"
#include "paddle/contrib/tape/variable.h"

namespace paddle {
namespace dynamic {
namespace tape {

using VariableHandleMap = std::map<std::string, std::vector<VariableHandle>>;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,9 @@
// limitations under the License.

#include "gtest/gtest.h"
#include "paddle/contrib/dynamic/function.h"
#include "paddle/contrib/tape/function.h"

using namespace paddle::dynamic;
using namespace paddle::tape;

TEST(Tape, TestMLP) {
LOG(INFO) << "TestMLP";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,10 @@
// See the License for the specific language governing permissions and
// limitations under the License.

#include "paddle/contrib/dynamic/variable.h"
#include "paddle/contrib/tape/variable.h"

namespace paddle {
namespace dynamic {
namespace tape {

void Variable::InitializeVariable() {
LOG(INFO) << "Initialzing " << desc_.Name() << " as " << desc_.GetType();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
#include "paddle/fluid/framework/variable.h"

namespace paddle {
namespace dynamic {
namespace tape {

class Variable;
using VariableHandle = std::shared_ptr<Variable>;
Expand Down

0 comments on commit a59c3b7

Please sign in to comment.