Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
PaddlePaddle
FluidDoc
提交
665fc714
F
FluidDoc
项目概览
PaddlePaddle
/
FluidDoc
通知
7
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看板
提交
665fc714
编写于
9月 27, 2019
作者:
X
xingzhaolong
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix sampled softmax entropy loss api doc
test=develop
上级
15064bb7
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
23 addition
and
28 deletion
+23
-28
doc/fluid/api_cn/layers_cn/sampled_softmax_with_cross_entropy_cn.rst
...pi_cn/layers_cn/sampled_softmax_with_cross_entropy_cn.rst
+23
-28
未找到文件。
doc/fluid/api_cn/layers_cn/sampled_softmax_with_cross_entropy_cn.rst
浏览文件 @
665fc714
...
...
@@ -5,46 +5,41 @@ sampled_softmax_with_cross_entropy
.. py:function:: paddle.fluid.layers.sampled_softmax_with_cross_entropy(logits, label, num_samples, num_true=1, remove_accidental_hits=True, use_customized_samples=False, customized_samples=None, customized_probabilities=None, seed=0)
**Sampled Softmax With Cross Entropy Operator**
假设该OP输入logits的shape为[N, K],N表示batch size大小。该OP首先对logits进行softmax计算,得到每个样例下分类的概率值,假设为logits_s,shape为[N,K],其中样例个数为N,类别个数为K。
对于较大的输出类,采样的交叉熵损失Softmax被广泛地用作输出层。该运算符为所有示例采样若干个样本,并计算每行采样张量的SoftMax标准化值,然后计算交叉熵损失
。
该OP的输入label的shape为[N,1]。对于某一个样例i的概率值logits_s[i],其中有1个为正样例的概率,其他的K-1个为负样本的概率
。
由于此运算符在内部对逻辑执行SoftMax,因此它需要未分级的逻辑。此运算符不应与SoftMax运算符的输出一起使用,因为这样会产生不正确的结果
。
对于样例logits_s[i],该OP并不会对该样例的所有输出为负样例的K-1个概率值计算交叉熵,而是从K-1个概率值中随机选择出num_samples
。
对于T真标签(T>=1)的示例,我们假设每个真标签的概率为1/T。对于每个样本,使用对数均匀分布生成S个样本。真正的标签与这些样本连接起来,形成每个示例的T+S样本。因此,假设逻辑的形状是[N x K],样本的形状是[N x(T+S)]。对于每个取样标签,计算出一个概率,对应于[Jean et al., 2014]( `http://arxiv.org/abs/1412.2007 <https://arxiv.org/abs/1412.2007>`_ )中的Q(y|x)。
根据采样标签对逻辑进行采样。如果remove_accidental_hits为“真”,如果sample[i, j] 意外匹配“真”标签,则相应的sampled_logits[i, j]减去1e20,使其SoftMax结果接近零。然后用logQ(y|x)减去采样的逻辑,这些采样的逻辑和重新索引的标签被用来计算具有交叉熵的SoftMax。
将label真实标签的对应的概率值, 以及根据随机选择出的非真实标签对应的概率值拼接成[N,1 + num_samples] 大小的矩阵。
对此矩阵进行计算交叉熵损失即为该OP的输出。
参数:
- **logits** (Variable)- 非比例对数概率,是一个二维张量,形状为[N x K]。N是批大小,K是类别号。
- **label** (Variable)- 基本事实,是一个二维张量。label是一个张量<int64>,其形状为[N x T],其中T是每个示例的真实标签数。
- **num_samples** (int)- 每个示例的数目num_samples应该小于类的数目。
- **num_true** (int)- 每个训练实例的目标类别总数。
- **remove_accidental_hits** (bool)- 指示采样时是否删除意外命中的标签。如果为真,如果一个sample[i,j]意外地碰到了真标签,那么相应的sampled_logits[i,j]将被减去1e20,使其SoftMax结果接近零。默认值为True。
- **use_customized_samples** (bool)- 是否使用自定义样本和可能性对logits进行抽样。
- **customized_samples** (Variable)- 用户定义的示例,它是一个具有形状[N, T + S]的二维张量。S是num_samples,T是每个示例的真标签数。
- **customized_probabilities** (Variable)- 用户定义的样本概率,与customized_samples形状相同的二维张量。
- **seed** (int)- 用于生成随机数的随机种子,在采样过程中使用。默认值为0。
- **logits** (Variable)- logits是一个shape为[N x K]的2-D Tensor。N是batch size,K是类别数目。数据类型支持float32。
- **label** (Variable)- 表示样例的真实标签。label是一个shape为[N,1]的真实标签。数据类型支持int64。
- **num_samples** (int)- OP计算过程中,会随机从非真实标签的概率输出中选择出num_samples个概率进行计算交叉熵损失。
- **num_true** (int)- 训练实例的目标类别总数,默认值为1。
- **remove_accidental_hits** (bool,可选)- 随机选出num_samples个概率期间,可能会选出同一个非真实标签的概率值,如果此值为True,表示允许选择出多个同样的非真实标签的概率值出来。默认值为True。
- **use_customized_samples** (bool,可选)- 此开关为开发人员测试使用,默认值为False。
- **customized_samples** (Variable, 可选)- 此开关为开发人员测试使用,默认值为None。
- **customized_probabilities** (Variable,可选)- 此开关为开发人员测试使用,默认值为None。
- **seed** (int,可选)- 用于生成随机数的随机种子,在采样过程中使用。默认值为0。
返回:返回类型为Variable(Tensor|LoDTensor),是一个2-D Tensor/LoDTensor,shape为[N x 1]。
返回:交叉熵损失,是一个二维张量,形状为[N x 1]。
返回类型:Variable
<font color="#FF0000">**注意:此OP内部会进行Softmax运算。**</font>
**代码示例:**
.. code-block:: python
import paddle.fluid as fluid
input = fluid.layers.data(name='data', shape=[256], dtype='float32')
label = fluid.layers.data(name='label', shape=[5], dtype='int64')
fc = fluid.layers.fc(input=input, size=100)
out = fluid.layers.sampled_softmax_with_cross_entropy(
logits=fc, label=label, num_samples=25)
import numpy as np
import paddle.fluid as fluid
input = fluid.layers.data(name='data', shape=[25], dtype='float32')
label = fluid.layers.data(name='label', shape=[1], dtype='int64')
out = fluid.layers.sampled_softmax_with_cross_entropy(
logits=input, label=label, num_samples=2)
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录