1. 17 7月, 2017 7 次提交
  2. 16 7月, 2017 4 次提交
    • Q
      change net to operator (#2846) · 45ce1649
      Qiao Longfei 提交于
      * OperatorBase should not store OpDesc because not All op contains an
        OpDesc and not all ops create from OpDesc.
        * Networks do not contain OpDesc and are not created by OpDesc
      * Do not register Network to OpRegistry.
        * The network is directly created by the user in Python. Not from
          registry.
      * Correctly handle the `inputs` and `outputs` of a Network.
        * Add CompleteAddOp() methods
      * Remove `AddOp(OpDesc&)` in net-op. All op are added by OperatorPtr.
      * Rewrite unit test for truly tested what networks do.
      * optimise operator_test
      45ce1649
    • F
      formate code · 7de10ee7
      fengjiayi 提交于
      7de10ee7
    • F
      Refactor DDim's product() and add slice_ddim() · 85c4f488
      fengjiayi 提交于
      1. Refactor DDim's product() to make it more efficiently.
      
      2. Add slice_ddim().
      85c4f488
    • Q
      add ADD_OP_CPU to enable add op with only cpu kernel (#2896) · afa99d9a
      Qiao Longfei 提交于
      * add ADD_OP_CPU to enable add op with only cpu kernel
      afa99d9a
  3. 15 7月, 2017 6 次提交
    • Y
      Python Generate OpCreation Methods by OpProto · 9e0c6800
      Yu Yang 提交于
      All OpCreation method are generated by
      `create_op_creation_methods::__bootstrap__` method, and stores in
      `op_creations` object and its methods.
      
      There are three parts to implement this feature.
      
      1. Get all registered `OpProto` from C++ side. It is implemented in
      `get_all_op_protos` method.
      1. Create a function to convert `kwargs` to `OpDesc` base on each op's
      `OpProto`. The `OpDescCreationMethod` class.
      1. Convert `OpProto` to `docstring` by `get_docstring_from_op_proto`
      method.
      
      All three methods are unit tested. The `__bootstrap__` just combines
      them together and create a method in runtime.
      
      For details, please reference the doc string in
      `create_op_creation_methods.py` and the unit test
      `test_op_creation_methods.py`.
      9e0c6800
    • F
      add conditional compilation for tensor · afa2a88d
      fengjiayi 提交于
      afa2a88d
    • F
      fix compile error · 66cf21c8
      fengjiayi 提交于
      66cf21c8
    • F
      enbale tensor memory test · 68adb954
      fengjiayi 提交于
      68adb954
    • F
      add slice_dim draft · ee90c2d2
      fengjiayi 提交于
      ee90c2d2
    • L
      FIX: cpplint code style · 620575b6
      liaogang 提交于
      620575b6
  4. 14 7月, 2017 10 次提交
    • F
      update PADDLE_ENFORCE message · 57a22db3
      fengjiayi 提交于
      57a22db3
    • F
      update tensor.h · 34beec0f
      fengjiayi 提交于
      34beec0f
    • F
      change int numel_ to size_t numel · 8594d5c3
      fengjiayi 提交于
      8594d5c3
    • F
      refactor product(DDim ddim) · 8bcd1faf
      fengjiayi 提交于
      8bcd1faf
    • F
      fix several compile error · 1f97388a
      fengjiayi 提交于
      1f97388a
    • F
      Refactor Tensor::CopyFrom() · dcfcf687
      fengjiayi 提交于
      1. Add template T which indicates data type to `CopyFrom()`, `Slice()`
      and `ShareData()` functions. This makes `CopyData()` code much clearer.
      
      2. Add `set_dim()`.
      
      3. `product(DDim)` transforms `DDim` to `vector<int>` first and then calculate
      its product. That might be quite slow. For `product(dims_)` is frequently
      used in Tensor, we add a mumber variable `numel_` as a cache of the
      product result.
      TODO: refactor `product()` to make it more efficient.
      
      4. Unable Tensor::operator=
      
      5. Remove the limit of POD type, because `float16` and `int8` are not POD type.
      dcfcf687
    • F
      Refactor `Tensor::CopyFrom()` · a1dc4311
      fengjiayi 提交于
      a1dc4311
    • Q
      Optimize ptr (#2851) · 58f3de95
      Qiao Longfei 提交于
      * use OperatorPtr = std::shared_ptr<OperatorBase>;
      * use ScopePtr = std::share_ptr<Scope>;
      58f3de95
    • Y
      Let OpProto support multiple and temporary (#2860) · 2462d0c5
      Yu Yang 提交于
      * Let OpProto support multiple and temporary
      
      * Each input/output of Paddle's Op could be a list. Add multiple mark to
        OpProto. Also add a `input_format`/`output_format` attribute if that
        Op has multiple input or output. The format of that attribute please
        reference the comments in `op_proto.proto`
      * Add temporary mark, because some output of an Op is not used by user
        but used by other op for faster computation. Explicitly mark which
        output is temporary could let future memory/computation optimization.
      * Add generated field to AttrProto.
      
      * Add `AddInputs`/`AddOutputs` function
      
      * It is more readable to invoke `AddInputs` not
        `AddInput(multiple=true)`.
      2462d0c5
    • Y
      Init commit · cd5113c1
      Yu Yang 提交于
      cd5113c1
  5. 13 7月, 2017 4 次提交
  6. 12 7月, 2017 6 次提交
    • Q
      test OpKernel (#2820) · be441f7d
      Qiao Longfei 提交于
      Add unit test for OpKernel
      be441f7d
    • F
      Add Tensor::CopyFrom and Tensor::mutable_data(Place place) · 69d99d48
      fengjiayi 提交于
      1. Add `Tensor::CopyFrom`. Current version can only support CPU memory
      copy. The support of GPU will be provided later by `paddle::memory`.
      The current implementation of `Tensor::CopyFrom` is a little inefficient:
      Every time `CopyFrom` is called, tensor will re-allocate its memory. However, if
      we try to check and reuse `placeholder_`, we have to provide a template
      parameter for `CopyFrom` to indicate the data type. It seems strange for
      a simple copy function.
      
      2. Add `Tensor::mutable_data(Place place)`, which directly use member
      variable `dims_` as its dim parameter. This interface is required by
      `Op::InferShape`.
      69d99d48
    • Y
      Add OperatorWithKernel class · 0ff81920
      Yu Yang 提交于
      * User can register OpKernel to its Ops. The OpKernelMap saved in
        OperatorWithKernel. Each Op which inherits OperatorWithKernel will
        use `OpKernel::Compute` instead of Run.
      0ff81920
    • F
      Remove Dim::contiguous and Dim::contiguous_strides · 2dbe60e4
      fengjiayi 提交于
      Paddle's data block is row-major order, while Dim::contiguous and
      Dim::contiguous_strides are based on column-order. So remove them to
      prevent misuse.
      2dbe60e4
    • F
      fix some syntax problems · 2dccab87
      fengjiayi 提交于
      2dccab87
    • Q
      add operator base (#2725) · a2e5f652
      Qiao Longfei 提交于
      Add OperatorBase.
      
      issue: https://github.com/PaddlePaddle/Paddle/issues/2790
      
      Paddle design the Operator with Kernel. OperatorBase has no type and device information when create, One operator can have multiple kernels, Operator will choose a kernel to run according to context. The kernel should be bind to Operator before or during Operator running.
      a2e5f652
  7. 11 7月, 2017 3 次提交
    • F
      add more test · 0665dc97
      fengjiayi 提交于
      0665dc97
    • F
      Add several interfaces for Tensor class · ca39515e
      fengjiayi 提交于
      1. Add member variable 'DDim dims_' and a getter function 'dims()'.
      'dims' is supposed to hold tensor's shape during Op::InferShape.
      2. Remove 'mutable_data' which use default Place. User must specify a
      explicit Place when call 'mutable_data'.
      3. A PlaceHolder may be shared by more than one tensor, and some of them may be the others' slices. So we add a new member variable 'offset_' for Tensor, which is used to show the byte offset between PlaceHolder::ptr_ and where tensor's data really begins.
      4. Add functions 'ShareDataFrom' and 'Slice' for Tensor.
      
      TODO: Tensor needs a 'CopyFrom' function.
      ca39515e
    • Y
      Move static variable defined in .cc (#2782) · 267f9a2c
      Yu Yang 提交于
      * Move static variable defined in .cc
      
      We cannot define static variable in .h, because it will be multi-defined
      errors.
      
      Also fix some cpp syntax, like:
      
      * Prefer to use algorithm not manually for-loop, to make code more
        readable.
      * Remove unused `()`.
      * Enforce take a bool. It is no need `xxx==true`.
      * Use range-based for-loop iterator from op_desc.attrs
      
      * Fix a protential static variable init order error
      267f9a2c