Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
BaiXuePrincess
Paddle
提交
97d4622b
P
Paddle
项目概览
BaiXuePrincess
/
Paddle
与 Fork 源项目一致
Fork自
PaddlePaddle / Paddle
通知
1
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
Paddle
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
97d4622b
编写于
4月 11, 2019
作者:
P
phlrain
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
add softmax test unit
test=develop
上级
bbfc82cc
变更
1
显示空白变更内容
内联
并排
Showing
1 changed file
with
139 addition
and
0 deletion
+139
-0
python/paddle/fluid/tests/unittests/test_softmax_with_cross_entropy_op.py
...uid/tests/unittests/test_softmax_with_cross_entropy_op.py
+139
-0
未找到文件。
python/paddle/fluid/tests/unittests/test_softmax_with_cross_entropy_op.py
浏览文件 @
97d4622b
...
...
@@ -195,5 +195,144 @@ class TestSoftmaxWithCrossEntropyOp3NoCudnn(TestSoftmaxWithCrossEntropyOp3):
self
.
numeric_stable_mode
=
True
class
TestSoftmaxWithCrossEntropyOp5
(
OpTest
):
"""
Test softmax with cross entropy operator with ignore_index.
"""
def
initParams
(
self
):
self
.
numeric_stable_mode
=
False
def
setUp
(
self
):
self
.
initParams
()
self
.
op_type
=
"softmax_with_cross_entropy"
batch_size
=
[
6
,
10
]
class_num
=
47
logits
=
np
.
random
.
uniform
(
0.1
,
1.0
,
tuple
(
batch_size
+
[
class_num
])).
astype
(
"float64"
)
softmax
=
np
.
apply_along_axis
(
stable_softmax
,
2
,
logits
)
labels
=
np
.
random
.
randint
(
0
,
class_num
,
tuple
(
batch_size
+
[
1
]),
dtype
=
"int64"
)
ignore_index
=
7
softmax_2d
=
np
.
reshape
(
softmax
,
[
-
1
,
class_num
])
labels_2d
=
np
.
reshape
(
labels
,
[
-
1
,
1
])
cross_entropy
=
np
.
asmatrix
(
[[
-
np
.
log
(
softmax_2d
[
i
][
labels_2d
[
i
][
0
]])]
if
labels_2d
[
i
]
!=
ignore_index
else
[
0
]
for
i
in
range
(
softmax_2d
.
shape
[
0
])],
dtype
=
"float64"
)
cross_entropy
=
np
.
reshape
(
cross_entropy
,
batch_size
)
output_shape
=
tuple
(
batch_size
+
[
1
])
output_res
=
cross_entropy
.
astype
(
"float64"
)
output_res
=
np
.
expand_dims
(
output_res
,
axis
=
2
)
self
.
inputs
=
{
"Logits"
:
logits
,
"Label"
:
labels
}
self
.
outputs
=
{
"Softmax"
:
softmax
.
astype
(
"float64"
),
"Loss"
:
output_res
,
}
self
.
attrs
=
{
"ignore_index"
:
ignore_index
,
"numeric_stable_mode"
:
self
.
numeric_stable_mode
}
def
test_check_output
(
self
):
self
.
check_output
()
def
test_check_grad
(
self
):
self
.
check_grad
([
"Logits"
],
"Loss"
)
class
TestSoftmaxWithCrossEntropyOp5NoCudnn
(
TestSoftmaxWithCrossEntropyOp5
):
def
initParams
(
self
):
self
.
numeric_stable_mode
=
True
class
TestSoftmaxWithCrossEntropyOp6
(
OpTest
):
"""
Test softmax with cross entropy operator with soft labels.
"""
def
setUp
(
self
):
self
.
op_type
=
"softmax_with_cross_entropy"
batch_size
=
[
6
,
10
]
class_num
=
37
logits
=
np
.
random
.
uniform
(
0.1
,
1.0
,
tuple
(
batch_size
+
[
class_num
])).
astype
(
"float64"
)
softmax
=
np
.
apply_along_axis
(
stable_softmax
,
2
,
logits
)
labels
=
np
.
random
.
uniform
(
0.1
,
1.0
,
tuple
(
batch_size
+
[
class_num
])).
astype
(
"float64"
)
labels
/=
np
.
sum
(
labels
,
axis
=
2
,
keepdims
=
True
)
cross_entropy
=
(
-
labels
*
np
.
log
(
softmax
)).
sum
(
axis
=
2
,
keepdims
=
True
).
astype
(
"float64"
)
self
.
inputs
=
{
"Logits"
:
logits
,
"Label"
:
labels
}
self
.
outputs
=
{
"Softmax"
:
softmax
.
astype
(
"float64"
),
"Loss"
:
cross_entropy
.
astype
(
"float64"
)
}
self
.
attrs
=
{
"soft_label"
:
True
}
def
test_check_output
(
self
):
self
.
check_output
()
def
test_check_grad
(
self
):
self
.
check_grad
([
"Logits"
],
"Loss"
)
class
TestSoftmaxWithCrossEntropyOpFp16_2
(
TestSoftmaxWithCrossEntropyOp
):
def
initParams
(
self
):
self
.
numeric_stable_mode
=
False
self
.
dtype
=
np
.
float16
def
setUp
(
self
):
self
.
initParams
()
self
.
op_type
=
"softmax_with_cross_entropy"
batch_size
=
[
64
,
10
]
class_num
=
37
# NOTE: numpy float16 have very low accuracy, use float32 for numpy check.
logits
=
np
.
random
.
uniform
(
0.1
,
1.0
,
tuple
(
batch_size
+
[
class_num
])).
astype
(
np
.
float32
)
softmax
=
np
.
apply_along_axis
(
stable_softmax
,
2
,
logits
)
labels
=
np
.
random
.
randint
(
0
,
class_num
,
tuple
(
batch_size
+
[
1
]),
dtype
=
"int64"
)
softmax_2d
=
np
.
reshape
(
softmax
,
[
-
1
,
class_num
])
labels_2d
=
np
.
reshape
(
labels
,
[
-
1
,
1
])
cross_entropy
=
np
.
asmatrix
(
[[
-
np
.
log
(
softmax_2d
[
i
][
labels_2d
[
i
][
0
]])]
for
i
in
range
(
softmax_2d
.
shape
[
0
])],
dtype
=
np
.
float32
)
cross_entropy
=
np
.
reshape
(
cross_entropy
,
batch_size
)
output_shape
=
tuple
(
batch_size
+
[
1
])
output_res
=
cross_entropy
.
astype
(
self
.
dtype
)
output_res
=
np
.
expand_dims
(
output_res
,
axis
=
2
)
self
.
inputs
=
{
"Logits"
:
logits
,
"Label"
:
labels
}
self
.
inputs
=
{
"Logits"
:
logits
.
astype
(
self
.
dtype
).
view
(
np
.
uint16
),
"Label"
:
labels
}
self
.
outputs
=
{
"Softmax"
:
softmax
.
astype
(
self
.
dtype
),
"Loss"
:
output_res
,
}
self
.
attrs
=
{
"numeric_stable_mode"
:
self
.
numeric_stable_mode
}
def
test_check_output
(
self
):
self
.
check_output
(
atol
=
1e-2
)
def
test_check_grad
(
self
):
self
.
check_grad
([
"Logits"
],
"Loss"
,
max_relative_error
=
0.1
)
if
__name__
==
"__main__"
:
unittest
.
main
()
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录