Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
PaddlePaddle
FluidDoc
提交
e4dd68e8
F
FluidDoc
项目概览
PaddlePaddle
/
FluidDoc
通知
5
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
23
列表
看板
标记
里程碑
合并请求
111
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
F
FluidDoc
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
23
Issue
23
列表
看板
标记
里程碑
合并请求
111
合并请求
111
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
e4dd68e8
编写于
9月 24, 2019
作者:
Y
Yi Liu
提交者:
GitHub
9月 24, 2019
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
update shard_index_cn.rst (#1300)
上级
f31732a6
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
33 addition
and
51 deletion
+33
-51
doc/fluid/api_cn/index_cn.rst
doc/fluid/api_cn/index_cn.rst
+0
-10
doc/fluid/api_cn/layers_cn/shard_index_cn.rst
doc/fluid/api_cn/layers_cn/shard_index_cn.rst
+33
-41
未找到文件。
doc/fluid/api_cn/index_cn.rst
已删除
100644 → 0
浏览文件 @
f31732a6
=====
API
=====
.. toctree::
:maxdepth: 1
../api_guides/index_cn.rst
api_tree_cn.rst
doc/fluid/api_cn/layers_cn/shard_index_cn.rst
浏览文件 @
e4dd68e8
...
...
@@ -5,50 +5,47 @@ shard_index
.. py:function:: paddle.fluid.layers.shard_index(input, index_num, nshards, shard_id, ignore_value=-1)
该层为输入创建碎片化索引,通常在模型和数据并行混合训练时使用,索引数据(通常是标签)应该在每一个trainer里面被计算,通过
该函数对输入的索引根据分片(shard)的偏移量重新计算。
索引长度被均分为N个分片,如果输入索引所在的分片跟分片ID对应,则该索引以分片的偏移量为界重新计算,否则更新为默认值(ignore_value)。具体计算为:
::
assert index_num % nshards == 0
每个分片的长度为
shard_size = (index_num + nshards - 1) // nshards
shard_size = index_num / nshards
如果 shard_id == input // shard_size
则 output = input % shard_size
否则 output = ignore_value
注意:若索引长度不能被分片数整除,则最后一个分片长度不足shard_size。
如果 x / shard_size == shard_id
y = x % shard_size
否则
y = ignore_value
我们使用分布式 ``one-hot`` 表示来展示该层如何使用, 分布式的 ``one-hot`` 表示被分割为多个碎片, 碎片索引里不为1的都使用0来填充。为了在每一个trainer里面创建碎片化的表示,原始的索引应该先进行计算(i.e. sharded)。我们来看个例子:
.. code-block:: text
X 是一个整形张量
X.shape = [4, 1]
X.data = [[1], [6], [12], [19]]
示例:
::
假设 index_num = 20 并且 nshards = 2, 我们可以得到 shard_size = 10
输入:
input.shape = [4, 1]
input.data = [[1], [6], [12], [19]]
index_num = 20
nshards = 2
ignore_value=-1
如果 shard_id == 0, 我们得到输出:
Out.shape = [4, 1]
Out.data = [[1], [6], [-1], [-1]]
如果 shard_id == 1, 我们得到输出:
Out.shape = [4, 1]
Out.data = [[-1], [-1], [2], [9]]
如果 shard_id == 0, 输出:
output.shape = [4, 1]
output.data = [[1], [6], [-1], [-1]]
上面的例子中默认 ignore_value = -1
如果 shard_id == 1, 输出:
output.shape = [4, 1]
output.data = [[-1], [-1], [2], [9]]
参数:
- **input** (Variable)- 输入的索引,最后的维度应该为1
- **index_num** (scalar) - 定义索引长度的整形参数
- **nshards** (scalar) - shards
数量
- **shard_id** (scalar) - 当前碎片的索引
- **ignore_value** (scalar) - 超出碎片索引范围的整型
值
- **input** (Variable)- 输入的索引
- **index_num** (scalar) - 索引长度
- **nshards** (scalar) - 分片
数量
- **shard_id** (scalar) - 当前分片ID
- **ignore_value** (scalar) - 超出分片索引范围的默认
值
返回:
输入的碎片索引
返回:
更新后的索引值
返回类型:
Variable
返回类型:Variable
**代码示例:**
...
...
@@ -57,11 +54,6 @@ shard_index
import paddle.fluid as fluid
label = fluid.layers.data(name="label", shape=[1], dtype="int64")
shard_label = fluid.layers.shard_index(input=label,
index_num=20,
nshards=2,
shard_id=0)
index_num=20,
nshards=2,
shard_id=0)
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录