@@ -16,16 +16,23 @@ The computation graph is constructed by Data Node and Operation Node. The concep
...
@@ -16,16 +16,23 @@ The computation graph is constructed by Data Node and Operation Node. The concep
## Definition of VarDesc
## Definition of VarDesc
A VarDesc should have a name and value, in PaddlePaddle, the value will always be a tensor. Since we use LoDTensor most of the time. We add a LoDTesnorDesc to represent it.
A VarDesc should have a name, and value. The are two kinds of variable type in compile time, they are `LoDTensor` and `SelectedRows`.
repeated int32 dims = 2; // [UNK, 640, 480] is saved as [-1, 640, 480]
repeated int64 dims = 2; // [UNK, 640, 480] is saved as [-1, 640, 480]
optional int32 lod_level = 3 [default=0];
}
}
```
```
## Definition of Variable in Python
A TensorDesc describes `SelectedRows` and `LoDTensor`. For details of `SelectedRows`, please reference [`SelectedRows`](./selected_rows.md).
In Python API, layer will take Variable as Input, and return Variable as Output. There should be a class `Variable` in python to help create and manage Variable.
```python
image = Variable(dims=[-1, 640, 480])
# fc1 and fc2 are both Variable
fc1 = layer.fc(input=image, output_size=10)
fc2 = layer.fc(input=fc1, output_size=20)
```
### what should class `Variable` Have
1. `name`.a name of string type is used to mark the value of the Variable.
1. `initializer`. Since our Tensor does not have value. we will always use some Operator to fullfill it when run. So we should have a initialize method to help add the init operator.
1. `operator`. Variable should record which operator produce itself. The reaon is:
- we use pd.eval(targets=[var1, var2]) to run the related ops to get the value of var1 and var2. var.op is used to trace the dependency of the current variable.
In PaddlePaddle, we use Block to describe Computation Graph, so in the code we will use Block but not Graph.
```python
import VarDesc
import LoDTensorDesc
import framework
def AddInitialOperator(variable, initializer):
# add an initialize Operator to block to init this Variable
<spanid="definition-of-vardesc"></span><h1>Definition of VarDesc<aclass="headerlink"href="#definition-of-vardesc"title="Permalink to this headline">¶</a></h1>
<spanid="definition-of-vardesc"></span><h1>Definition of VarDesc<aclass="headerlink"href="#definition-of-vardesc"title="Permalink to this headline">¶</a></h1>
<p>A VarDesc should have a name and value, in PaddlePaddle, the value will always be a tensor. Since we use LoDTensor most of the time. We add a LoDTesnorDesc to represent it.</p>
<p>A VarDesc should have a name, and value. The are two kinds of variable type in compile time, they are <codeclass="docutils literal"><spanclass="pre">LoDTensor</span></code> and <codeclass="docutils literal"><spanclass="pre">SelectedRows</span></code>.</p>
<spanid="definition-of-lodtensordesc"></span><h1>Definition of LodTensorDesc<aclass="headerlink"href="#definition-of-lodtensordesc"title="Permalink to this headline">¶</a></h1>
<spanid="definition-of-tensordesc"></span><h1>Definition of TensorDesc<aclass="headerlink"href="#definition-of-tensordesc"title="Permalink to this headline">¶</a></h1>
<spanclass="k">repeated</span><spanclass="kt">int32</span><spanclass="na">dims</span><spanclass="o">=</span><spanclass="mi">2</span><spanclass="p">;</span><spanclass="c1">// [UNK, 640, 480] is saved as [-1, 640, 480]</span>
<spanclass="k">repeated</span><spanclass="kt">int64</span><spanclass="na">dims</span><spanclass="o">=</span><spanclass="mi">2</span><spanclass="p">;</span><spanclass="c1">// [UNK, 640, 480] is saved as [-1, 640, 480]</span>
<spanid="definition-of-variable-in-python"></span><h1>Definition of Variable in Python<aclass="headerlink"href="#definition-of-variable-in-python"title="Permalink to this headline">¶</a></h1>
<spanid="definition-of-lodtensordesc"></span><h1>Definition of LodTensorDesc<aclass="headerlink"href="#definition-of-lodtensordesc"title="Permalink to this headline">¶</a></h1>
<p>In Python API, layer will take Variable as Input, and return Variable as Output. There should be a class <codeclass="docutils literal"><spanclass="pre">Variable</span></code> in python to help create and manage Variable.</p>
<spanid="what-should-class-variable-have"></span><h2>what should class <codeclass="docutils literal"><spanclass="pre">Variable</span></code> Have<aclass="headerlink"href="#what-should-class-variable-have"title="Permalink to this headline">¶</a></h2>
<olclass="simple">
<li><codeclass="docutils literal"><spanclass="pre">name</span></code>.a name of string type is used to mark the value of the Variable.</li>
<li><codeclass="docutils literal"><spanclass="pre">initializer</span></code>. Since our Tensor does not have value. we will always use some Operator to fullfill it when run. So we should have a initialize method to help add the init operator.</li>
<li><codeclass="docutils literal"><spanclass="pre">operator</span></code>. Variable should record which operator produce itself. The reaon is:</li>
</ol>
<ulclass="simple">
<li>we use pd.eval(targets=[var1, var2]) to run the related ops to get the value of var1 and var2. var.op is used to trace the dependency of the current variable.</li>
</ul>
<p>In PaddlePaddle, we use Block to describe Computation Graph, so in the code we will use Block but not Graph.</p>
<spanclass="n">y</span><spanclass="o">=</span><spanclass="n">operator</span><spanclass="o">.</span><spanclass="n">fc</span><spanclass="p">(</span><spanclass="n">X</span><spanclass="p">,</span><spanclass="n">W</span><spanclass="p">,</span><spanclass="n">b</span><spanclass="p">,</span><spanclass="n">output</span><spanclass="o">=</span><spanclass="n">out</span><spanclass="p">)</span><spanclass="c1"># fc will put fc op input into out</span>
<spanid="definition-of-variable-in-python"></span><h1>Definition of Variable in Python<aclass="headerlink"href="#definition-of-variable-in-python"title="Permalink to this headline">¶</a></h1>
<p>For Variable in Python, please reference <aclass="reference external"href="./python_api.md"><codeclass="docutils literal"><spanclass="pre">Python</span><spanclass="pre">API</span></code></a>.</p>
@@ -16,16 +16,23 @@ The computation graph is constructed by Data Node and Operation Node. The concep
...
@@ -16,16 +16,23 @@ The computation graph is constructed by Data Node and Operation Node. The concep
## Definition of VarDesc
## Definition of VarDesc
A VarDesc should have a name and value, in PaddlePaddle, the value will always be a tensor. Since we use LoDTensor most of the time. We add a LoDTesnorDesc to represent it.
A VarDesc should have a name, and value. The are two kinds of variable type in compile time, they are `LoDTensor` and `SelectedRows`.
repeated int32 dims = 2; // [UNK, 640, 480] is saved as [-1, 640, 480]
repeated int64 dims = 2; // [UNK, 640, 480] is saved as [-1, 640, 480]
optional int32 lod_level = 3 [default=0];
}
}
```
```
## Definition of Variable in Python
A TensorDesc describes `SelectedRows` and `LoDTensor`. For details of `SelectedRows`, please reference [`SelectedRows`](./selected_rows.md).
In Python API, layer will take Variable as Input, and return Variable as Output. There should be a class `Variable` in python to help create and manage Variable.
```python
image = Variable(dims=[-1, 640, 480])
# fc1 and fc2 are both Variable
fc1 = layer.fc(input=image, output_size=10)
fc2 = layer.fc(input=fc1, output_size=20)
```
### what should class `Variable` Have
1. `name`.a name of string type is used to mark the value of the Variable.
1. `initializer`. Since our Tensor does not have value. we will always use some Operator to fullfill it when run. So we should have a initialize method to help add the init operator.
1. `operator`. Variable should record which operator produce itself. The reaon is:
- we use pd.eval(targets=[var1, var2]) to run the related ops to get the value of var1 and var2. var.op is used to trace the dependency of the current variable.
In PaddlePaddle, we use Block to describe Computation Graph, so in the code we will use Block but not Graph.
```python
import VarDesc
import LoDTensorDesc
import framework
def AddInitialOperator(variable, initializer):
# add an initialize Operator to block to init this Variable
<spanid="definition-of-vardesc"></span><h1>Definition of VarDesc<aclass="headerlink"href="#definition-of-vardesc"title="永久链接至标题">¶</a></h1>
<spanid="definition-of-vardesc"></span><h1>Definition of VarDesc<aclass="headerlink"href="#definition-of-vardesc"title="永久链接至标题">¶</a></h1>
<p>A VarDesc should have a name and value, in PaddlePaddle, the value will always be a tensor. Since we use LoDTensor most of the time. We add a LoDTesnorDesc to represent it.</p>
<p>A VarDesc should have a name, and value. The are two kinds of variable type in compile time, they are <codeclass="docutils literal"><spanclass="pre">LoDTensor</span></code> and <codeclass="docutils literal"><spanclass="pre">SelectedRows</span></code>.</p>
<spanid="definition-of-lodtensordesc"></span><h1>Definition of LodTensorDesc<aclass="headerlink"href="#definition-of-lodtensordesc"title="永久链接至标题">¶</a></h1>
<spanid="definition-of-tensordesc"></span><h1>Definition of TensorDesc<aclass="headerlink"href="#definition-of-tensordesc"title="永久链接至标题">¶</a></h1>
<spanclass="k">repeated</span><spanclass="kt">int32</span><spanclass="na">dims</span><spanclass="o">=</span><spanclass="mi">2</span><spanclass="p">;</span><spanclass="c1">// [UNK, 640, 480] is saved as [-1, 640, 480]</span>
<spanclass="k">repeated</span><spanclass="kt">int64</span><spanclass="na">dims</span><spanclass="o">=</span><spanclass="mi">2</span><spanclass="p">;</span><spanclass="c1">// [UNK, 640, 480] is saved as [-1, 640, 480]</span>
<spanid="definition-of-variable-in-python"></span><h1>Definition of Variable in Python<aclass="headerlink"href="#definition-of-variable-in-python"title="永久链接至标题">¶</a></h1>
<spanid="definition-of-lodtensordesc"></span><h1>Definition of LodTensorDesc<aclass="headerlink"href="#definition-of-lodtensordesc"title="永久链接至标题">¶</a></h1>
<p>In Python API, layer will take Variable as Input, and return Variable as Output. There should be a class <codeclass="docutils literal"><spanclass="pre">Variable</span></code> in python to help create and manage Variable.</p>
<spanid="what-should-class-variable-have"></span><h2>what should class <codeclass="docutils literal"><spanclass="pre">Variable</span></code> Have<aclass="headerlink"href="#what-should-class-variable-have"title="永久链接至标题">¶</a></h2>
<olclass="simple">
<li><codeclass="docutils literal"><spanclass="pre">name</span></code>.a name of string type is used to mark the value of the Variable.</li>
<li><codeclass="docutils literal"><spanclass="pre">initializer</span></code>. Since our Tensor does not have value. we will always use some Operator to fullfill it when run. So we should have a initialize method to help add the init operator.</li>
<li><codeclass="docutils literal"><spanclass="pre">operator</span></code>. Variable should record which operator produce itself. The reaon is:</li>
</ol>
<ulclass="simple">
<li>we use pd.eval(targets=[var1, var2]) to run the related ops to get the value of var1 and var2. var.op is used to trace the dependency of the current variable.</li>
</ul>
<p>In PaddlePaddle, we use Block to describe Computation Graph, so in the code we will use Block but not Graph.</p>
<spanclass="n">y</span><spanclass="o">=</span><spanclass="n">operator</span><spanclass="o">.</span><spanclass="n">fc</span><spanclass="p">(</span><spanclass="n">X</span><spanclass="p">,</span><spanclass="n">W</span><spanclass="p">,</span><spanclass="n">b</span><spanclass="p">,</span><spanclass="n">output</span><spanclass="o">=</span><spanclass="n">out</span><spanclass="p">)</span><spanclass="c1"># fc will put fc op input into out</span>
<spanid="definition-of-variable-in-python"></span><h1>Definition of Variable in Python<aclass="headerlink"href="#definition-of-variable-in-python"title="永久链接至标题">¶</a></h1>
<p>For Variable in Python, please reference <aclass="reference external"href="./python_api.md"><codeclass="docutils literal"><spanclass="pre">Python</span><spanclass="pre">API</span></code></a>.</p>