Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
机器未来
Paddle
提交
c6c9c186
P
Paddle
项目概览
机器未来
/
Paddle
与 Fork 源项目一致
Fork自
PaddlePaddle / Paddle
通知
1
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
Paddle
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
未验证
提交
c6c9c186
编写于
9月 20, 2022
作者:
N
Nyakku Shigure
提交者:
GitHub
9月 20, 2022
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[CodeStyle] remove crlf for python files (#46155)
上级
9941ec12
变更
8
展开全部
隐藏空白更改
内联
并排
Showing
8 changed file
with
1497 addition
and
1497 deletion
+1497
-1497
python/paddle/fluid/tests/unittests/asp/test_asp_utils.py
python/paddle/fluid/tests/unittests/asp/test_asp_utils.py
+224
-224
python/paddle/fluid/tests/unittests/mkldnn/test_elementwise_sub_mkldnn_op.py
.../tests/unittests/mkldnn/test_elementwise_sub_mkldnn_op.py
+242
-242
python/paddle/fluid/tests/unittests/mkldnn/test_fill_constant_mkldnn_op.py
...id/tests/unittests/mkldnn/test_fill_constant_mkldnn_op.py
+126
-126
python/paddle/fluid/tests/unittests/sequence/test_sequence_first_step.py
...luid/tests/unittests/sequence/test_sequence_first_step.py
+51
-51
python/paddle/fluid/tests/unittests/sequence/test_sequence_last_step.py
...fluid/tests/unittests/sequence/test_sequence_last_step.py
+51
-51
python/paddle/fluid/tests/unittests/test_lstm_cudnn_op.py
python/paddle/fluid/tests/unittests/test_lstm_cudnn_op.py
+589
-589
python/paddle/fluid/tests/unittests/test_rnn_op.py
python/paddle/fluid/tests/unittests/test_rnn_op.py
+212
-212
python/paddle/fluid/transpiler/memory_optimization_transpiler.py
...paddle/fluid/transpiler/memory_optimization_transpiler.py
+2
-2
未找到文件。
python/paddle/fluid/tests/unittests/asp/test_asp_utils.py
浏览文件 @
c6c9c186
# Copyright (c) 2021 PaddlePaddle Authors. All Rights Reserved.
# Copyright (c) 2021 NVIDIA Corporation. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
from
__future__
import
print_function
import
unittest
import
threading
,
time
import
paddle
import
numpy
as
np
class
TestASPUtils
(
unittest
.
TestCase
):
def
test_get_check_method
(
self
):
self
.
assertEqual
(
paddle
.
fluid
.
contrib
.
sparsity
.
CheckMethod
.
get_checking_method
(
paddle
.
fluid
.
contrib
.
sparsity
.
MaskAlgo
.
MASK_1D
),
paddle
.
fluid
.
contrib
.
sparsity
.
CheckMethod
.
CHECK_1D
)
self
.
assertEqual
(
paddle
.
fluid
.
contrib
.
sparsity
.
CheckMethod
.
get_checking_method
(
paddle
.
fluid
.
contrib
.
sparsity
.
MaskAlgo
.
MASK_2D_GREEDY
),
paddle
.
fluid
.
contrib
.
sparsity
.
CheckMethod
.
CHECK_2D
)
self
.
assertEqual
(
paddle
.
fluid
.
contrib
.
sparsity
.
CheckMethod
.
get_checking_method
(
paddle
.
fluid
.
contrib
.
sparsity
.
MaskAlgo
.
MASK_2D_BEST
),
paddle
.
fluid
.
contrib
.
sparsity
.
CheckMethod
.
CHECK_2D
)
def
test_density
(
self
):
x
=
np
.
array
([[
1.0
,
1.0
,
1.0
,
0.0
,
1.0
],
[
1.0
,
1.0
,
0.0
,
0.0
,
1.0
],
[
1.0
,
0.0
,
0.0
,
0.0
,
1.0
],
[
1.0
,
1.0
,
0.0
,
0.0
,
1.0
],
[
0.0
,
1.0
,
0.0
,
0.0
,
1.0
]])
self
.
assertEqual
(
paddle
.
incubate
.
asp
.
calculate_density
(
x
),
0.56
)
x
[:,
0
]
=
0.0
self
.
assertEqual
(
paddle
.
incubate
.
asp
.
calculate_density
(
x
),
0.4
)
def
test_check_mask_1d
(
self
):
x
=
np
.
array
([[
1.0
,
0.0
,
0.0
,
1.0
,
1.0
],
[
1.0
,
1.0
,
0.0
,
0.0
,
1.0
],
[
1.0
,
1.0
,
0.0
,
0.0
,
1.0
],
[
1.0
,
1.0
,
0.0
,
0.0
,
1.0
],
[
0.0
,
1.0
,
0.0
,
0.0
,
1.0
]])
self
.
assertTrue
(
paddle
.
fluid
.
contrib
.
sparsity
.
check_mask_1d
(
x
,
2
,
4
))
self
.
assertFalse
(
paddle
.
fluid
.
contrib
.
sparsity
.
check_mask_1d
(
x
,
3
,
4
))
self
.
assertTrue
(
paddle
.
fluid
.
contrib
.
sparsity
.
check_mask_1d
(
x
,
2
,
5
))
self
.
assertFalse
(
paddle
.
fluid
.
contrib
.
sparsity
.
check_mask_1d
(
x
,
3
,
5
))
self
.
assertTrue
(
paddle
.
fluid
.
contrib
.
sparsity
.
check_mask_1d
(
x
,
3
,
6
))
self
.
assertFalse
(
paddle
.
fluid
.
contrib
.
sparsity
.
check_mask_1d
(
x
,
4
,
6
))
def
test_get_mask_1d
(
self
):
for
_
in
range
(
10
):
x
=
np
.
random
.
randint
(
10
,
size
=
(
5
,
5
))
x
=
paddle
.
fluid
.
contrib
.
sparsity
.
get_mask_1d
(
x
,
2
,
4
)
self
.
assertTrue
(
paddle
.
fluid
.
contrib
.
sparsity
.
check_mask_1d
(
x
,
2
,
4
))
x
=
np
.
random
.
randn
(
5
,
4
)
x
=
paddle
.
fluid
.
contrib
.
sparsity
.
get_mask_1d
(
x
,
2
,
4
)
self
.
assertTrue
(
paddle
.
fluid
.
contrib
.
sparsity
.
check_mask_1d
(
x
,
2
,
4
))
def
test_check_mask_2d
(
self
):
x
=
np
.
array
([[
1.0
,
0.0
,
0.0
,
1.0
,
1.0
],
[
0.0
,
1.0
,
0.0
,
0.0
,
0.0
],
[
0.0
,
0.0
,
1.0
,
0.0
,
1.0
],
[
1.0
,
1.0
,
0.0
,
0.0
,
0.0
],
[
0.0
,
1.0
,
0.0
,
0.0
,
1.0
]])
self
.
assertTrue
(
paddle
.
fluid
.
contrib
.
sparsity
.
check_mask_2d
(
x
,
2
,
4
))
self
.
assertFalse
(
paddle
.
fluid
.
contrib
.
sparsity
.
check_mask_2d
(
x
,
3
,
4
))
self
.
assertTrue
(
paddle
.
fluid
.
contrib
.
sparsity
.
check_mask_2d
(
x
,
2
,
5
))
self
.
assertFalse
(
paddle
.
fluid
.
contrib
.
sparsity
.
check_mask_2d
(
x
,
3
,
5
))
self
.
assertTrue
(
paddle
.
fluid
.
contrib
.
sparsity
.
check_mask_2d
(
x
,
3
,
6
))
self
.
assertFalse
(
paddle
.
fluid
.
contrib
.
sparsity
.
check_mask_2d
(
x
,
4
,
6
))
def
test_get_mask_2d_greedy
(
self
):
for
_
in
range
(
10
):
x
=
np
.
random
.
randint
(
10
,
size
=
(
5
,
5
))
x
=
paddle
.
fluid
.
contrib
.
sparsity
.
get_mask_2d_greedy
(
x
,
2
,
4
)
self
.
assertTrue
(
paddle
.
fluid
.
contrib
.
sparsity
.
check_mask_2d
(
x
,
2
,
4
))
x
=
np
.
random
.
randn
(
5
,
4
)
x
=
paddle
.
fluid
.
contrib
.
sparsity
.
get_mask_2d_greedy
(
x
,
2
,
4
)
self
.
assertTrue
(
paddle
.
fluid
.
contrib
.
sparsity
.
check_mask_2d
(
x
,
2
,
4
))
def
test_get_mask_2d_best
(
self
):
for
_
in
range
(
10
):
x
=
np
.
random
.
randint
(
10
,
size
=
(
5
,
5
))
x
=
paddle
.
fluid
.
contrib
.
sparsity
.
get_mask_2d_best
(
x
,
2
,
4
)
self
.
assertTrue
(
paddle
.
fluid
.
contrib
.
sparsity
.
check_mask_2d
(
x
,
2
,
4
))
x
=
np
.
random
.
randn
(
5
,
4
)
x
=
paddle
.
fluid
.
contrib
.
sparsity
.
get_mask_2d_best
(
x
,
2
,
4
)
self
.
assertTrue
(
paddle
.
fluid
.
contrib
.
sparsity
.
check_mask_2d
(
x
,
2
,
4
))
def
test_threadsafe_valid_2d_patterns
(
self
):
def
get_reference
(
m
=
4
,
n
=
2
):
from
itertools
import
permutations
patterns
=
np
.
zeros
(
m
)
patterns
[:
n
]
=
1
patterns
=
list
(
set
(
permutations
(
patterns
.
tolist
())))
patterns
=
patterns
+
patterns
patterns
=
np
.
asarray
(
list
(
set
(
permutations
(
patterns
,
m
))))
valid
=
((
patterns
.
sum
(
axis
=
1
)
<=
n
).
sum
(
axis
=
1
)
==
m
).
nonzero
()[
0
].
reshape
(
-
1
)
valid_patterns
=
np
.
empty
((
valid
.
shape
[
0
],
m
,
m
))
valid_patterns
[:]
=
patterns
[
valid
[:]]
return
valid_patterns
for
_
in
range
(
4
):
computing_thread
=
threading
.
Thread
(
target
=
paddle
.
fluid
.
contrib
.
sparsity
.
utils
.
_compute_valid_2d_patterns
,
args
=
(
2
,
4
))
computing_thread
.
start
()
time
.
sleep
(
3
)
patterns_map
=
paddle
.
fluid
.
contrib
.
sparsity
.
utils
.
_valid_2d_patterns
reference_patterns
=
get_reference
()
reference_key
=
'4_2'
self
.
assertTrue
(
reference_key
in
patterns_map
)
self
.
assertTrue
(
len
(
patterns_map
)
==
1
)
self
.
assertTrue
(
(
reference_patterns
==
patterns_map
[
reference_key
]).
all
())
def
test_check_sparsity
(
self
):
for
_
in
range
(
10
):
x
=
np
.
random
.
randint
(
10
,
size
=
(
5
))
x_2d
=
x
.
reshape
(
1
,
x
.
shape
[
0
])
self
.
__test_1D_2D_sparsity_checking_methods
(
x_2d
)
x
=
np
.
random
.
randint
(
10
,
size
=
(
5
,
5
))
x_2d
=
x
self
.
__test_1D_2D_sparsity_checking_methods
(
x_2d
)
x
=
np
.
random
.
randint
(
10
,
size
=
(
5
,
5
,
5
))
x_2d
=
x
.
reshape
(
x
.
shape
[
0
]
*
x
.
shape
[
1
],
x
.
shape
[
2
])
self
.
__test_1D_2D_sparsity_checking_methods
(
x_2d
)
x
=
np
.
random
.
randint
(
10
,
size
=
(
5
,
5
,
5
,
5
))
x_2d
=
x
.
reshape
(
x
.
shape
[
0
],
x
.
shape
[
1
]
*
x
.
shape
[
2
]
*
x
.
shape
[
3
])
self
.
__test_1D_2D_sparsity_checking_methods
(
x_2d
)
def
test_create_mask
(
self
):
for
_
in
range
(
10
):
x
=
np
.
random
.
randint
(
10
,
size
=
(
5
))
self
.
__test_1D_2D_sparse_mask_generation_methods
(
x
)
x
=
np
.
random
.
randint
(
10
,
size
=
(
5
,
5
))
self
.
__test_1D_2D_sparse_mask_generation_methods
(
x
)
x
=
np
.
random
.
randint
(
10
,
size
=
(
5
,
5
,
5
))
self
.
__test_1D_2D_sparse_mask_generation_methods
(
x
)
x
=
np
.
random
.
randint
(
10
,
size
=
(
5
,
5
,
5
,
5
))
self
.
__test_1D_2D_sparse_mask_generation_methods
(
x
)
def
__test_1D_2D_sparsity_checking_methods
(
self
,
x_2d
):
mask
=
paddle
.
fluid
.
contrib
.
sparsity
.
get_mask_1d
(
x_2d
,
2
,
4
)
self
.
assertEqual
(
paddle
.
fluid
.
contrib
.
sparsity
.
check_sparsity
(
mask
,
func_name
=
paddle
.
fluid
.
contrib
.
sparsity
.
CheckMethod
.
CHECK_1D
,
n
=
2
,
m
=
4
),
paddle
.
fluid
.
contrib
.
sparsity
.
check_mask_1d
(
mask
,
2
,
4
))
mask
=
paddle
.
fluid
.
contrib
.
sparsity
.
get_mask_2d_best
(
x_2d
,
2
,
4
)
self
.
assertEqual
(
paddle
.
fluid
.
contrib
.
sparsity
.
check_sparsity
(
mask
,
func_name
=
paddle
.
fluid
.
contrib
.
sparsity
.
CheckMethod
.
CHECK_2D
,
n
=
2
,
m
=
4
),
paddle
.
fluid
.
contrib
.
sparsity
.
check_mask_2d
(
mask
,
2
,
4
))
def
__test_1D_2D_sparse_mask_generation_methods
(
self
,
x
):
mask
=
paddle
.
fluid
.
contrib
.
sparsity
.
create_mask
(
x
,
func_name
=
paddle
.
fluid
.
contrib
.
sparsity
.
MaskAlgo
.
MASK_1D
,
n
=
2
,
m
=
4
)
self
.
assertTrue
(
paddle
.
fluid
.
contrib
.
sparsity
.
check_sparsity
(
mask
,
func_name
=
paddle
.
fluid
.
contrib
.
sparsity
.
CheckMethod
.
CHECK_1D
,
n
=
2
,
m
=
4
))
mask
=
paddle
.
fluid
.
contrib
.
sparsity
.
create_mask
(
x
,
func_name
=
paddle
.
fluid
.
contrib
.
sparsity
.
MaskAlgo
.
MASK_2D_GREEDY
,
n
=
2
,
m
=
4
)
self
.
assertTrue
(
paddle
.
fluid
.
contrib
.
sparsity
.
check_sparsity
(
mask
,
func_name
=
paddle
.
fluid
.
contrib
.
sparsity
.
CheckMethod
.
CHECK_2D
,
n
=
2
,
m
=
4
))
mask
=
paddle
.
fluid
.
contrib
.
sparsity
.
create_mask
(
x
,
func_name
=
paddle
.
fluid
.
contrib
.
sparsity
.
MaskAlgo
.
MASK_2D_BEST
,
n
=
2
,
m
=
4
)
self
.
assertTrue
(
paddle
.
fluid
.
contrib
.
sparsity
.
check_sparsity
(
mask
,
func_name
=
paddle
.
fluid
.
contrib
.
sparsity
.
CheckMethod
.
CHECK_2D
,
n
=
2
,
m
=
4
))
if
__name__
==
'__main__'
:
unittest
.
main
()
# Copyright (c) 2021 PaddlePaddle Authors. All Rights Reserved.
# Copyright (c) 2021 NVIDIA Corporation. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
from
__future__
import
print_function
import
unittest
import
threading
,
time
import
paddle
import
numpy
as
np
class
TestASPUtils
(
unittest
.
TestCase
):
def
test_get_check_method
(
self
):
self
.
assertEqual
(
paddle
.
fluid
.
contrib
.
sparsity
.
CheckMethod
.
get_checking_method
(
paddle
.
fluid
.
contrib
.
sparsity
.
MaskAlgo
.
MASK_1D
),
paddle
.
fluid
.
contrib
.
sparsity
.
CheckMethod
.
CHECK_1D
)
self
.
assertEqual
(
paddle
.
fluid
.
contrib
.
sparsity
.
CheckMethod
.
get_checking_method
(
paddle
.
fluid
.
contrib
.
sparsity
.
MaskAlgo
.
MASK_2D_GREEDY
),
paddle
.
fluid
.
contrib
.
sparsity
.
CheckMethod
.
CHECK_2D
)
self
.
assertEqual
(
paddle
.
fluid
.
contrib
.
sparsity
.
CheckMethod
.
get_checking_method
(
paddle
.
fluid
.
contrib
.
sparsity
.
MaskAlgo
.
MASK_2D_BEST
),
paddle
.
fluid
.
contrib
.
sparsity
.
CheckMethod
.
CHECK_2D
)
def
test_density
(
self
):
x
=
np
.
array
([[
1.0
,
1.0
,
1.0
,
0.0
,
1.0
],
[
1.0
,
1.0
,
0.0
,
0.0
,
1.0
],
[
1.0
,
0.0
,
0.0
,
0.0
,
1.0
],
[
1.0
,
1.0
,
0.0
,
0.0
,
1.0
],
[
0.0
,
1.0
,
0.0
,
0.0
,
1.0
]])
self
.
assertEqual
(
paddle
.
incubate
.
asp
.
calculate_density
(
x
),
0.56
)
x
[:,
0
]
=
0.0
self
.
assertEqual
(
paddle
.
incubate
.
asp
.
calculate_density
(
x
),
0.4
)
def
test_check_mask_1d
(
self
):
x
=
np
.
array
([[
1.0
,
0.0
,
0.0
,
1.0
,
1.0
],
[
1.0
,
1.0
,
0.0
,
0.0
,
1.0
],
[
1.0
,
1.0
,
0.0
,
0.0
,
1.0
],
[
1.0
,
1.0
,
0.0
,
0.0
,
1.0
],
[
0.0
,
1.0
,
0.0
,
0.0
,
1.0
]])
self
.
assertTrue
(
paddle
.
fluid
.
contrib
.
sparsity
.
check_mask_1d
(
x
,
2
,
4
))
self
.
assertFalse
(
paddle
.
fluid
.
contrib
.
sparsity
.
check_mask_1d
(
x
,
3
,
4
))
self
.
assertTrue
(
paddle
.
fluid
.
contrib
.
sparsity
.
check_mask_1d
(
x
,
2
,
5
))
self
.
assertFalse
(
paddle
.
fluid
.
contrib
.
sparsity
.
check_mask_1d
(
x
,
3
,
5
))
self
.
assertTrue
(
paddle
.
fluid
.
contrib
.
sparsity
.
check_mask_1d
(
x
,
3
,
6
))
self
.
assertFalse
(
paddle
.
fluid
.
contrib
.
sparsity
.
check_mask_1d
(
x
,
4
,
6
))
def
test_get_mask_1d
(
self
):
for
_
in
range
(
10
):
x
=
np
.
random
.
randint
(
10
,
size
=
(
5
,
5
))
x
=
paddle
.
fluid
.
contrib
.
sparsity
.
get_mask_1d
(
x
,
2
,
4
)
self
.
assertTrue
(
paddle
.
fluid
.
contrib
.
sparsity
.
check_mask_1d
(
x
,
2
,
4
))
x
=
np
.
random
.
randn
(
5
,
4
)
x
=
paddle
.
fluid
.
contrib
.
sparsity
.
get_mask_1d
(
x
,
2
,
4
)
self
.
assertTrue
(
paddle
.
fluid
.
contrib
.
sparsity
.
check_mask_1d
(
x
,
2
,
4
))
def
test_check_mask_2d
(
self
):
x
=
np
.
array
([[
1.0
,
0.0
,
0.0
,
1.0
,
1.0
],
[
0.0
,
1.0
,
0.0
,
0.0
,
0.0
],
[
0.0
,
0.0
,
1.0
,
0.0
,
1.0
],
[
1.0
,
1.0
,
0.0
,
0.0
,
0.0
],
[
0.0
,
1.0
,
0.0
,
0.0
,
1.0
]])
self
.
assertTrue
(
paddle
.
fluid
.
contrib
.
sparsity
.
check_mask_2d
(
x
,
2
,
4
))
self
.
assertFalse
(
paddle
.
fluid
.
contrib
.
sparsity
.
check_mask_2d
(
x
,
3
,
4
))
self
.
assertTrue
(
paddle
.
fluid
.
contrib
.
sparsity
.
check_mask_2d
(
x
,
2
,
5
))
self
.
assertFalse
(
paddle
.
fluid
.
contrib
.
sparsity
.
check_mask_2d
(
x
,
3
,
5
))
self
.
assertTrue
(
paddle
.
fluid
.
contrib
.
sparsity
.
check_mask_2d
(
x
,
3
,
6
))
self
.
assertFalse
(
paddle
.
fluid
.
contrib
.
sparsity
.
check_mask_2d
(
x
,
4
,
6
))
def
test_get_mask_2d_greedy
(
self
):
for
_
in
range
(
10
):
x
=
np
.
random
.
randint
(
10
,
size
=
(
5
,
5
))
x
=
paddle
.
fluid
.
contrib
.
sparsity
.
get_mask_2d_greedy
(
x
,
2
,
4
)
self
.
assertTrue
(
paddle
.
fluid
.
contrib
.
sparsity
.
check_mask_2d
(
x
,
2
,
4
))
x
=
np
.
random
.
randn
(
5
,
4
)
x
=
paddle
.
fluid
.
contrib
.
sparsity
.
get_mask_2d_greedy
(
x
,
2
,
4
)
self
.
assertTrue
(
paddle
.
fluid
.
contrib
.
sparsity
.
check_mask_2d
(
x
,
2
,
4
))
def
test_get_mask_2d_best
(
self
):
for
_
in
range
(
10
):
x
=
np
.
random
.
randint
(
10
,
size
=
(
5
,
5
))
x
=
paddle
.
fluid
.
contrib
.
sparsity
.
get_mask_2d_best
(
x
,
2
,
4
)
self
.
assertTrue
(
paddle
.
fluid
.
contrib
.
sparsity
.
check_mask_2d
(
x
,
2
,
4
))
x
=
np
.
random
.
randn
(
5
,
4
)
x
=
paddle
.
fluid
.
contrib
.
sparsity
.
get_mask_2d_best
(
x
,
2
,
4
)
self
.
assertTrue
(
paddle
.
fluid
.
contrib
.
sparsity
.
check_mask_2d
(
x
,
2
,
4
))
def
test_threadsafe_valid_2d_patterns
(
self
):
def
get_reference
(
m
=
4
,
n
=
2
):
from
itertools
import
permutations
patterns
=
np
.
zeros
(
m
)
patterns
[:
n
]
=
1
patterns
=
list
(
set
(
permutations
(
patterns
.
tolist
())))
patterns
=
patterns
+
patterns
patterns
=
np
.
asarray
(
list
(
set
(
permutations
(
patterns
,
m
))))
valid
=
((
patterns
.
sum
(
axis
=
1
)
<=
n
).
sum
(
axis
=
1
)
==
m
).
nonzero
()[
0
].
reshape
(
-
1
)
valid_patterns
=
np
.
empty
((
valid
.
shape
[
0
],
m
,
m
))
valid_patterns
[:]
=
patterns
[
valid
[:]]
return
valid_patterns
for
_
in
range
(
4
):
computing_thread
=
threading
.
Thread
(
target
=
paddle
.
fluid
.
contrib
.
sparsity
.
utils
.
_compute_valid_2d_patterns
,
args
=
(
2
,
4
))
computing_thread
.
start
()
time
.
sleep
(
3
)
patterns_map
=
paddle
.
fluid
.
contrib
.
sparsity
.
utils
.
_valid_2d_patterns
reference_patterns
=
get_reference
()
reference_key
=
'4_2'
self
.
assertTrue
(
reference_key
in
patterns_map
)
self
.
assertTrue
(
len
(
patterns_map
)
==
1
)
self
.
assertTrue
(
(
reference_patterns
==
patterns_map
[
reference_key
]).
all
())
def
test_check_sparsity
(
self
):
for
_
in
range
(
10
):
x
=
np
.
random
.
randint
(
10
,
size
=
(
5
))
x_2d
=
x
.
reshape
(
1
,
x
.
shape
[
0
])
self
.
__test_1D_2D_sparsity_checking_methods
(
x_2d
)
x
=
np
.
random
.
randint
(
10
,
size
=
(
5
,
5
))
x_2d
=
x
self
.
__test_1D_2D_sparsity_checking_methods
(
x_2d
)
x
=
np
.
random
.
randint
(
10
,
size
=
(
5
,
5
,
5
))
x_2d
=
x
.
reshape
(
x
.
shape
[
0
]
*
x
.
shape
[
1
],
x
.
shape
[
2
])
self
.
__test_1D_2D_sparsity_checking_methods
(
x_2d
)
x
=
np
.
random
.
randint
(
10
,
size
=
(
5
,
5
,
5
,
5
))
x_2d
=
x
.
reshape
(
x
.
shape
[
0
],
x
.
shape
[
1
]
*
x
.
shape
[
2
]
*
x
.
shape
[
3
])
self
.
__test_1D_2D_sparsity_checking_methods
(
x_2d
)
def
test_create_mask
(
self
):
for
_
in
range
(
10
):
x
=
np
.
random
.
randint
(
10
,
size
=
(
5
))
self
.
__test_1D_2D_sparse_mask_generation_methods
(
x
)
x
=
np
.
random
.
randint
(
10
,
size
=
(
5
,
5
))
self
.
__test_1D_2D_sparse_mask_generation_methods
(
x
)
x
=
np
.
random
.
randint
(
10
,
size
=
(
5
,
5
,
5
))
self
.
__test_1D_2D_sparse_mask_generation_methods
(
x
)
x
=
np
.
random
.
randint
(
10
,
size
=
(
5
,
5
,
5
,
5
))
self
.
__test_1D_2D_sparse_mask_generation_methods
(
x
)
def
__test_1D_2D_sparsity_checking_methods
(
self
,
x_2d
):
mask
=
paddle
.
fluid
.
contrib
.
sparsity
.
get_mask_1d
(
x_2d
,
2
,
4
)
self
.
assertEqual
(
paddle
.
fluid
.
contrib
.
sparsity
.
check_sparsity
(
mask
,
func_name
=
paddle
.
fluid
.
contrib
.
sparsity
.
CheckMethod
.
CHECK_1D
,
n
=
2
,
m
=
4
),
paddle
.
fluid
.
contrib
.
sparsity
.
check_mask_1d
(
mask
,
2
,
4
))
mask
=
paddle
.
fluid
.
contrib
.
sparsity
.
get_mask_2d_best
(
x_2d
,
2
,
4
)
self
.
assertEqual
(
paddle
.
fluid
.
contrib
.
sparsity
.
check_sparsity
(
mask
,
func_name
=
paddle
.
fluid
.
contrib
.
sparsity
.
CheckMethod
.
CHECK_2D
,
n
=
2
,
m
=
4
),
paddle
.
fluid
.
contrib
.
sparsity
.
check_mask_2d
(
mask
,
2
,
4
))
def
__test_1D_2D_sparse_mask_generation_methods
(
self
,
x
):
mask
=
paddle
.
fluid
.
contrib
.
sparsity
.
create_mask
(
x
,
func_name
=
paddle
.
fluid
.
contrib
.
sparsity
.
MaskAlgo
.
MASK_1D
,
n
=
2
,
m
=
4
)
self
.
assertTrue
(
paddle
.
fluid
.
contrib
.
sparsity
.
check_sparsity
(
mask
,
func_name
=
paddle
.
fluid
.
contrib
.
sparsity
.
CheckMethod
.
CHECK_1D
,
n
=
2
,
m
=
4
))
mask
=
paddle
.
fluid
.
contrib
.
sparsity
.
create_mask
(
x
,
func_name
=
paddle
.
fluid
.
contrib
.
sparsity
.
MaskAlgo
.
MASK_2D_GREEDY
,
n
=
2
,
m
=
4
)
self
.
assertTrue
(
paddle
.
fluid
.
contrib
.
sparsity
.
check_sparsity
(
mask
,
func_name
=
paddle
.
fluid
.
contrib
.
sparsity
.
CheckMethod
.
CHECK_2D
,
n
=
2
,
m
=
4
))
mask
=
paddle
.
fluid
.
contrib
.
sparsity
.
create_mask
(
x
,
func_name
=
paddle
.
fluid
.
contrib
.
sparsity
.
MaskAlgo
.
MASK_2D_BEST
,
n
=
2
,
m
=
4
)
self
.
assertTrue
(
paddle
.
fluid
.
contrib
.
sparsity
.
check_sparsity
(
mask
,
func_name
=
paddle
.
fluid
.
contrib
.
sparsity
.
CheckMethod
.
CHECK_2D
,
n
=
2
,
m
=
4
))
if
__name__
==
'__main__'
:
unittest
.
main
()
python/paddle/fluid/tests/unittests/mkldnn/test_elementwise_sub_mkldnn_op.py
浏览文件 @
c6c9c186
# Copyright (c) 2021 PaddlePaddle Authors. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
from
__future__
import
print_function
import
unittest
import
numpy
as
np
from
paddle
import
enable_static
from
paddle.fluid.tests.unittests.op_test
import
OpTest
,
OpTestTool
,
convert_float_to_uint16
from
paddle.fluid.framework
import
_current_expected_place
import
paddle.fluid.core
as
core
@
OpTestTool
.
skip_if
(
not
(
isinstance
(
_current_expected_place
(),
core
.
CPUPlace
)),
"GPU is not supported"
)
class
TestMKLDNNElementwiseSubOp
(
OpTest
):
def
setUp
(
self
):
self
.
op_type
=
"elementwise_sub"
self
.
init_dtype
()
self
.
init_input_output
()
self
.
init_kernel_type
()
self
.
init_axis
()
self
.
inputs
=
{
'X'
:
OpTest
.
np_dtype_to_fluid_dtype
(
self
.
x
),
'Y'
:
OpTest
.
np_dtype_to_fluid_dtype
(
self
.
y
)
}
self
.
attrs
=
{
'axis'
:
self
.
axis
,
'use_mkldnn'
:
self
.
use_mkldnn
}
self
.
outputs
=
{
'Out'
:
self
.
out
}
def
init_input_output
(
self
):
self
.
x
=
np
.
random
.
uniform
(
0.1
,
1
,
[
13
,
17
]).
astype
(
self
.
dtype
)
self
.
y
=
np
.
random
.
uniform
(
0.1
,
1
,
[
13
,
17
]).
astype
(
self
.
dtype
)
self
.
out
=
np
.
subtract
(
self
.
x
,
self
.
y
)
def
test_check_grad_normal
(
self
):
self
.
check_grad
([
'X'
,
'Y'
],
'Out'
)
def
test_check_grad_ignore_x
(
self
):
self
.
check_grad
([
'Y'
],
'Out'
,
no_grad_set
=
set
(
"X"
))
def
test_check_grad_ignore_y
(
self
):
self
.
check_grad
([
'X'
],
'Out'
,
no_grad_set
=
set
(
'Y'
))
def
init_axis
(
self
):
self
.
axis
=
-
1
def
init_kernel_type
(
self
):
self
.
use_mkldnn
=
True
def
init_dtype
(
self
):
self
.
dtype
=
np
.
float32
def
test_check_output
(
self
):
self
.
check_output
()
class
TestMKLDNNElementwiseSubOp2
(
TestMKLDNNElementwiseSubOp
):
def
init_input_output
(
self
):
self
.
x
=
np
.
random
.
random
((
100
,
)).
astype
(
self
.
dtype
)
self
.
y
=
np
.
random
.
random
((
100
,
)).
astype
(
self
.
dtype
)
self
.
out
=
np
.
subtract
(
self
.
x
,
self
.
y
)
class
TestMKLDNNElementwiseSubOp3
(
TestMKLDNNElementwiseSubOp
):
def
init_input_output
(
self
):
self
.
x
=
np
.
random
.
uniform
(
0.1
,
1
,
[
2
,
3
,
4
,
5
]).
astype
(
self
.
dtype
)
self
.
y
=
np
.
random
.
uniform
(
0.1
,
1
,
[
2
,
3
,
4
,
5
]).
astype
(
self
.
dtype
)
self
.
out
=
np
.
subtract
(
self
.
x
,
self
.
y
)
class
TestMKLDNNElementwiseSubOp4
(
TestMKLDNNElementwiseSubOp
):
def
init_input_output
(
self
):
self
.
x
=
np
.
random
.
uniform
(
1
,
2
,
[
2
,
3
,
4
,
32
]).
astype
(
self
.
dtype
)
self
.
y
=
np
.
random
.
uniform
(
1
,
2
,
[
4
,
32
]).
astype
(
self
.
dtype
)
self
.
out
=
np
.
subtract
(
self
.
x
,
self
.
y
)
class
TestMKLDNNElementwiseSubOp5
(
TestMKLDNNElementwiseSubOp
):
def
init_input_output
(
self
):
self
.
x
=
np
.
random
.
uniform
(
1
,
2
,
[
2
,
3
,
4
,
100
]).
astype
(
self
.
dtype
)
self
.
y
=
np
.
random
.
uniform
(
1
,
2
,
[
100
]).
astype
(
self
.
dtype
)
self
.
out
=
np
.
subtract
(
self
.
x
,
self
.
y
)
class
TestMKLDNNElementwiseSubOp_broadcast
(
TestMKLDNNElementwiseSubOp
):
def
init_input_output
(
self
):
self
.
x
=
np
.
random
.
rand
(
2
,
10
,
12
,
3
).
astype
(
self
.
dtype
)
self
.
y
=
np
.
random
.
rand
(
10
,
12
).
astype
(
self
.
dtype
)
self
.
out
=
self
.
x
-
self
.
y
.
reshape
(
1
,
10
,
12
,
1
)
def
init_axis
(
self
):
self
.
axis
=
1
class
TestElementwiseSubOp_xsize_lessthan_ysize_sub
(
TestMKLDNNElementwiseSubOp
):
def
init_input_output
(
self
):
self
.
x
=
np
.
random
.
rand
(
10
,
12
).
astype
(
self
.
dtype
)
self
.
y
=
np
.
random
.
rand
(
2
,
2
,
10
,
12
).
astype
(
self
.
dtype
)
self
.
out
=
self
.
x
-
self
.
y
def
init_axis
(
self
):
self
.
axis
=
2
def
test_check_grad_normal
(
self
):
pass
def
test_check_grad_ignore_y
(
self
):
pass
def
test_check_grad_ignore_x
(
self
):
pass
@
OpTestTool
.
skip_if_not_cpu_bf16
()
class
TestBf16
(
TestMKLDNNElementwiseSubOp
):
def
setUp
(
self
):
self
.
op_type
=
"elementwise_sub"
self
.
init_dtype
()
self
.
init_input_output
()
self
.
init_kernel_type
()
self
.
init_axis
()
self
.
x_bf16
=
convert_float_to_uint16
(
self
.
x
)
self
.
y_bf16
=
convert_float_to_uint16
(
self
.
y
)
self
.
inputs
=
{
'X'
:
self
.
x_bf16
,
'Y'
:
self
.
y_bf16
}
self
.
attrs
=
{
'axis'
:
self
.
axis
,
'use_mkldnn'
:
self
.
use_mkldnn
}
self
.
outputs
=
{
'Out'
:
convert_float_to_uint16
(
self
.
out
)}
def
init_dtype
(
self
):
self
.
dtype
=
np
.
float32
self
.
mkldnn_data_type
=
"bfloat16"
def
init_input_output
(
self
):
self
.
x
=
np
.
random
.
random
(
100
,
).
astype
(
self
.
dtype
)
self
.
y
=
np
.
random
.
random
(
100
,
).
astype
(
self
.
dtype
)
self
.
out
=
np
.
subtract
(
self
.
x
,
self
.
y
)
def
test_check_output
(
self
):
self
.
check_output_with_place
(
core
.
CPUPlace
())
def
test_check_grad_normal
(
self
):
self
.
check_grad_with_place
(
core
.
CPUPlace
(),
[
"X"
,
"Y"
],
"Out"
,
user_defined_grads
=
[
self
.
x
,
-
self
.
x
],
user_defined_grad_outputs
=
[
self
.
x_bf16
])
def
test_check_grad_ignore_x
(
self
):
self
.
check_grad_with_place
(
core
.
CPUPlace
(),
[
"Y"
],
"Out"
,
user_defined_grads
=
[
-
self
.
y
],
user_defined_grad_outputs
=
[
self
.
y_bf16
])
def
test_check_grad_ignore_y
(
self
):
self
.
check_grad_with_place
(
core
.
CPUPlace
(),
[
"X"
],
"Out"
,
user_defined_grads
=
[
self
.
x
],
user_defined_grad_outputs
=
[
self
.
x_bf16
])
class
TestBf16Broadcasting
(
TestBf16
):
def
init_input_output
(
self
):
self
.
x
=
np
.
random
.
uniform
(
1
,
2
,
[
2
,
3
,
4
,
100
]).
astype
(
self
.
dtype
)
self
.
y
=
np
.
random
.
uniform
(
1
,
2
,
[
100
]).
astype
(
self
.
dtype
)
self
.
out
=
np
.
subtract
(
self
.
x
,
self
.
y
)
def
compute_reduced_gradients
(
self
,
out_grads
):
part_sum
=
np
.
add
.
reduceat
(
out_grads
,
[
0
],
axis
=
0
)
part_sum
=
np
.
add
.
reduceat
(
part_sum
,
[
0
],
axis
=
1
)
part_sum
=
np
.
add
.
reduceat
(
part_sum
,
[
0
],
axis
=
2
)
return
-
part_sum
.
flatten
()
def
test_check_grad_normal
(
self
):
self
.
check_grad_with_place
(
core
.
CPUPlace
(),
[
"X"
,
"Y"
],
"Out"
,
user_defined_grads
=
[
self
.
x
,
self
.
compute_reduced_gradients
(
self
.
x
)],
user_defined_grad_outputs
=
[
self
.
x_bf16
])
def
test_check_grad_ignore_x
(
self
):
self
.
check_grad_with_place
(
core
.
CPUPlace
(),
[
"Y"
],
"Out"
,
user_defined_grads
=
[
self
.
compute_reduced_gradients
(
self
.
x
)],
user_defined_grad_outputs
=
[
self
.
x_bf16
])
class
TestInt8
(
TestMKLDNNElementwiseSubOp
):
def
init_kernel_type
(
self
):
self
.
use_mkldnn
=
True
self
.
_cpu_only
=
True
def
init_dtype
(
self
):
self
.
dtype
=
np
.
int8
def
init_input_output
(
self
):
self
.
x
=
np
.
random
.
randint
(
0
,
3
,
(
12
,
9
)).
astype
(
"int8"
)
self
.
y
=
np
.
random
.
randint
(
0
,
3
,
(
12
,
9
)).
astype
(
"int8"
)
self
.
out
=
np
.
subtract
(
self
.
x
,
self
.
y
)
def
init_scales
(
self
):
self
.
attrs
[
'Scale_x'
]
=
1.0
self
.
attrs
[
'Scale_y'
]
=
1.0
self
.
attrs
[
'Scale_out'
]
=
1.0
def
test_check_output
(
self
):
self
.
init_scales
()
self
.
check_output
()
def
test_check_grad_normal
(
self
):
pass
def
test_check_grad_ignore_x
(
self
):
pass
def
test_check_grad_ignore_y
(
self
):
pass
if
__name__
==
'__main__'
:
enable_static
()
unittest
.
main
()
# Copyright (c) 2021 PaddlePaddle Authors. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
from
__future__
import
print_function
import
unittest
import
numpy
as
np
from
paddle
import
enable_static
from
paddle.fluid.tests.unittests.op_test
import
OpTest
,
OpTestTool
,
convert_float_to_uint16
from
paddle.fluid.framework
import
_current_expected_place
import
paddle.fluid.core
as
core
@
OpTestTool
.
skip_if
(
not
(
isinstance
(
_current_expected_place
(),
core
.
CPUPlace
)),
"GPU is not supported"
)
class
TestMKLDNNElementwiseSubOp
(
OpTest
):
def
setUp
(
self
):
self
.
op_type
=
"elementwise_sub"
self
.
init_dtype
()
self
.
init_input_output
()
self
.
init_kernel_type
()
self
.
init_axis
()
self
.
inputs
=
{
'X'
:
OpTest
.
np_dtype_to_fluid_dtype
(
self
.
x
),
'Y'
:
OpTest
.
np_dtype_to_fluid_dtype
(
self
.
y
)
}
self
.
attrs
=
{
'axis'
:
self
.
axis
,
'use_mkldnn'
:
self
.
use_mkldnn
}
self
.
outputs
=
{
'Out'
:
self
.
out
}
def
init_input_output
(
self
):
self
.
x
=
np
.
random
.
uniform
(
0.1
,
1
,
[
13
,
17
]).
astype
(
self
.
dtype
)
self
.
y
=
np
.
random
.
uniform
(
0.1
,
1
,
[
13
,
17
]).
astype
(
self
.
dtype
)
self
.
out
=
np
.
subtract
(
self
.
x
,
self
.
y
)
def
test_check_grad_normal
(
self
):
self
.
check_grad
([
'X'
,
'Y'
],
'Out'
)
def
test_check_grad_ignore_x
(
self
):
self
.
check_grad
([
'Y'
],
'Out'
,
no_grad_set
=
set
(
"X"
))
def
test_check_grad_ignore_y
(
self
):
self
.
check_grad
([
'X'
],
'Out'
,
no_grad_set
=
set
(
'Y'
))
def
init_axis
(
self
):
self
.
axis
=
-
1
def
init_kernel_type
(
self
):
self
.
use_mkldnn
=
True
def
init_dtype
(
self
):
self
.
dtype
=
np
.
float32
def
test_check_output
(
self
):
self
.
check_output
()
class
TestMKLDNNElementwiseSubOp2
(
TestMKLDNNElementwiseSubOp
):
def
init_input_output
(
self
):
self
.
x
=
np
.
random
.
random
((
100
,
)).
astype
(
self
.
dtype
)
self
.
y
=
np
.
random
.
random
((
100
,
)).
astype
(
self
.
dtype
)
self
.
out
=
np
.
subtract
(
self
.
x
,
self
.
y
)
class
TestMKLDNNElementwiseSubOp3
(
TestMKLDNNElementwiseSubOp
):
def
init_input_output
(
self
):
self
.
x
=
np
.
random
.
uniform
(
0.1
,
1
,
[
2
,
3
,
4
,
5
]).
astype
(
self
.
dtype
)
self
.
y
=
np
.
random
.
uniform
(
0.1
,
1
,
[
2
,
3
,
4
,
5
]).
astype
(
self
.
dtype
)
self
.
out
=
np
.
subtract
(
self
.
x
,
self
.
y
)
class
TestMKLDNNElementwiseSubOp4
(
TestMKLDNNElementwiseSubOp
):
def
init_input_output
(
self
):
self
.
x
=
np
.
random
.
uniform
(
1
,
2
,
[
2
,
3
,
4
,
32
]).
astype
(
self
.
dtype
)
self
.
y
=
np
.
random
.
uniform
(
1
,
2
,
[
4
,
32
]).
astype
(
self
.
dtype
)
self
.
out
=
np
.
subtract
(
self
.
x
,
self
.
y
)
class
TestMKLDNNElementwiseSubOp5
(
TestMKLDNNElementwiseSubOp
):
def
init_input_output
(
self
):
self
.
x
=
np
.
random
.
uniform
(
1
,
2
,
[
2
,
3
,
4
,
100
]).
astype
(
self
.
dtype
)
self
.
y
=
np
.
random
.
uniform
(
1
,
2
,
[
100
]).
astype
(
self
.
dtype
)
self
.
out
=
np
.
subtract
(
self
.
x
,
self
.
y
)
class
TestMKLDNNElementwiseSubOp_broadcast
(
TestMKLDNNElementwiseSubOp
):
def
init_input_output
(
self
):
self
.
x
=
np
.
random
.
rand
(
2
,
10
,
12
,
3
).
astype
(
self
.
dtype
)
self
.
y
=
np
.
random
.
rand
(
10
,
12
).
astype
(
self
.
dtype
)
self
.
out
=
self
.
x
-
self
.
y
.
reshape
(
1
,
10
,
12
,
1
)
def
init_axis
(
self
):
self
.
axis
=
1
class
TestElementwiseSubOp_xsize_lessthan_ysize_sub
(
TestMKLDNNElementwiseSubOp
):
def
init_input_output
(
self
):
self
.
x
=
np
.
random
.
rand
(
10
,
12
).
astype
(
self
.
dtype
)
self
.
y
=
np
.
random
.
rand
(
2
,
2
,
10
,
12
).
astype
(
self
.
dtype
)
self
.
out
=
self
.
x
-
self
.
y
def
init_axis
(
self
):
self
.
axis
=
2
def
test_check_grad_normal
(
self
):
pass
def
test_check_grad_ignore_y
(
self
):
pass
def
test_check_grad_ignore_x
(
self
):
pass
@
OpTestTool
.
skip_if_not_cpu_bf16
()
class
TestBf16
(
TestMKLDNNElementwiseSubOp
):
def
setUp
(
self
):
self
.
op_type
=
"elementwise_sub"
self
.
init_dtype
()
self
.
init_input_output
()
self
.
init_kernel_type
()
self
.
init_axis
()
self
.
x_bf16
=
convert_float_to_uint16
(
self
.
x
)
self
.
y_bf16
=
convert_float_to_uint16
(
self
.
y
)
self
.
inputs
=
{
'X'
:
self
.
x_bf16
,
'Y'
:
self
.
y_bf16
}
self
.
attrs
=
{
'axis'
:
self
.
axis
,
'use_mkldnn'
:
self
.
use_mkldnn
}
self
.
outputs
=
{
'Out'
:
convert_float_to_uint16
(
self
.
out
)}
def
init_dtype
(
self
):
self
.
dtype
=
np
.
float32
self
.
mkldnn_data_type
=
"bfloat16"
def
init_input_output
(
self
):
self
.
x
=
np
.
random
.
random
(
100
,
).
astype
(
self
.
dtype
)
self
.
y
=
np
.
random
.
random
(
100
,
).
astype
(
self
.
dtype
)
self
.
out
=
np
.
subtract
(
self
.
x
,
self
.
y
)
def
test_check_output
(
self
):
self
.
check_output_with_place
(
core
.
CPUPlace
())
def
test_check_grad_normal
(
self
):
self
.
check_grad_with_place
(
core
.
CPUPlace
(),
[
"X"
,
"Y"
],
"Out"
,
user_defined_grads
=
[
self
.
x
,
-
self
.
x
],
user_defined_grad_outputs
=
[
self
.
x_bf16
])
def
test_check_grad_ignore_x
(
self
):
self
.
check_grad_with_place
(
core
.
CPUPlace
(),
[
"Y"
],
"Out"
,
user_defined_grads
=
[
-
self
.
y
],
user_defined_grad_outputs
=
[
self
.
y_bf16
])
def
test_check_grad_ignore_y
(
self
):
self
.
check_grad_with_place
(
core
.
CPUPlace
(),
[
"X"
],
"Out"
,
user_defined_grads
=
[
self
.
x
],
user_defined_grad_outputs
=
[
self
.
x_bf16
])
class
TestBf16Broadcasting
(
TestBf16
):
def
init_input_output
(
self
):
self
.
x
=
np
.
random
.
uniform
(
1
,
2
,
[
2
,
3
,
4
,
100
]).
astype
(
self
.
dtype
)
self
.
y
=
np
.
random
.
uniform
(
1
,
2
,
[
100
]).
astype
(
self
.
dtype
)
self
.
out
=
np
.
subtract
(
self
.
x
,
self
.
y
)
def
compute_reduced_gradients
(
self
,
out_grads
):
part_sum
=
np
.
add
.
reduceat
(
out_grads
,
[
0
],
axis
=
0
)
part_sum
=
np
.
add
.
reduceat
(
part_sum
,
[
0
],
axis
=
1
)
part_sum
=
np
.
add
.
reduceat
(
part_sum
,
[
0
],
axis
=
2
)
return
-
part_sum
.
flatten
()
def
test_check_grad_normal
(
self
):
self
.
check_grad_with_place
(
core
.
CPUPlace
(),
[
"X"
,
"Y"
],
"Out"
,
user_defined_grads
=
[
self
.
x
,
self
.
compute_reduced_gradients
(
self
.
x
)],
user_defined_grad_outputs
=
[
self
.
x_bf16
])
def
test_check_grad_ignore_x
(
self
):
self
.
check_grad_with_place
(
core
.
CPUPlace
(),
[
"Y"
],
"Out"
,
user_defined_grads
=
[
self
.
compute_reduced_gradients
(
self
.
x
)],
user_defined_grad_outputs
=
[
self
.
x_bf16
])
class
TestInt8
(
TestMKLDNNElementwiseSubOp
):
def
init_kernel_type
(
self
):
self
.
use_mkldnn
=
True
self
.
_cpu_only
=
True
def
init_dtype
(
self
):
self
.
dtype
=
np
.
int8
def
init_input_output
(
self
):
self
.
x
=
np
.
random
.
randint
(
0
,
3
,
(
12
,
9
)).
astype
(
"int8"
)
self
.
y
=
np
.
random
.
randint
(
0
,
3
,
(
12
,
9
)).
astype
(
"int8"
)
self
.
out
=
np
.
subtract
(
self
.
x
,
self
.
y
)
def
init_scales
(
self
):
self
.
attrs
[
'Scale_x'
]
=
1.0
self
.
attrs
[
'Scale_y'
]
=
1.0
self
.
attrs
[
'Scale_out'
]
=
1.0
def
test_check_output
(
self
):
self
.
init_scales
()
self
.
check_output
()
def
test_check_grad_normal
(
self
):
pass
def
test_check_grad_ignore_x
(
self
):
pass
def
test_check_grad_ignore_y
(
self
):
pass
if
__name__
==
'__main__'
:
enable_static
()
unittest
.
main
()
python/paddle/fluid/tests/unittests/mkldnn/test_fill_constant_mkldnn_op.py
浏览文件 @
c6c9c186
# Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
from
__future__
import
print_function
import
unittest
import
numpy
as
np
from
paddle.fluid.tests.unittests.op_test
import
OpTest
,
OpTestTool
import
paddle
@
OpTestTool
.
skip_if_not_cpu_bf16
()
class
TestFillConstant2DOneDNNOp
(
OpTest
):
def
setUp
(
self
):
self
.
op_type
=
"fill_constant"
self
.
dtype
=
np
.
float32
self
.
shape_tensor_list
=
None
self
.
shape_tensor
=
None
self
.
str_value
=
""
real_shape
=
[]
self
.
value
=
0.1
self
.
set_inputs
()
self
.
set_attrs
()
if
'value'
in
self
.
attrs
:
self
.
value
=
self
.
attrs
[
'value'
]
if
self
.
str_value
!=
""
:
self
.
value
=
float
(
self
.
str_value
)
if
'ValueTensor'
in
self
.
inputs
:
self
.
value
=
self
.
inputs
[
'ValueTensor'
]
if
'shape'
in
self
.
attrs
:
real_shape
=
self
.
attrs
[
'shape'
]
if
'ShapeTensor'
in
self
.
inputs
:
real_shape
=
list
(
self
.
inputs
[
'ShapeTensor'
])
if
'ShapeTensorList'
in
self
.
inputs
:
real_shape
=
[]
for
shape_tensor
in
self
.
inputs
[
'ShapeTensorList'
]:
real_shape
.
append
(
shape_tensor
[
1
].
item
())
self
.
outputs
=
{
'Out'
:
np
.
full
(
real_shape
,
self
.
value
)}
def
set_inputs
(
self
):
self
.
inputs
=
{}
def
set_attrs
(
self
):
self
.
attrs
=
{
'shape'
:
(
3
,
5
),
'use_mkldnn'
:
True
,
'value'
:
self
.
value
}
def
test_check_output
(
self
):
self
.
check_output
()
class
TestFillZerosLike4DShapeTensorPriorityOneDNNOp
(
TestFillConstant2DOneDNNOp
):
def
set_inputs
(
self
):
self
.
inputs
=
{
'ShapeTensor'
:
np
.
array
([
5
,
6
,
7
,
8
]).
astype
(
"int32"
)}
class
TestFillZerosLike4DShapeTensorListPriorityOneDNNOp
(
TestFillConstant2DOneDNNOp
):
def
set_inputs
(
self
):
shape
=
(
4
,
5
,
6
,
7
)
self
.
shape_tensor_list
=
[]
for
index
,
elem
in
enumerate
(
shape
):
self
.
shape_tensor_list
.
append
((
"x"
+
str
(
index
),
np
.
ones
(
(
1
)).
astype
(
'int32'
)
*
elem
))
self
.
inputs
=
{
'ShapeTensorList'
:
self
.
shape_tensor_list
}
class
TestFillZerosLike2DStringValueInfOneDNNOp
(
TestFillConstant2DOneDNNOp
):
def
set_attrs
(
self
):
self
.
str_value
=
"inf"
self
.
attrs
=
{
'shape'
:
(
10
,
13
),
'use_mkldnn'
:
True
,
'str_value'
:
"inf"
}
class
TestFillZerosLike2DStringValueMinusInfOneDNNOp
(
TestFillConstant2DOneDNNOp
):
def
set_attrs
(
self
):
self
.
str_value
=
"-inf"
self
.
attrs
=
{
'shape'
:
(
10
,
13
),
'use_mkldnn'
:
True
,
'str_value'
:
"-inf"
}
class
TestFillZerosLike2DStringValueFloatOneDNNOp
(
TestFillConstant2DOneDNNOp
):
def
set_attrs
(
self
):
self
.
str_value
=
"0.123"
self
.
attrs
=
{
'shape'
:
(
10
,
13
),
'use_mkldnn'
:
True
,
'str_value'
:
"0.123"
}
class
TestFillZerosLike2DValueTensorPriorityOneDNNOp
(
TestFillZerosLike2DStringValueFloatOneDNNOp
):
def
set_inputs
(
self
):
self
.
inputs
=
{
'ValueTensor'
:
np
.
atleast_1d
(
2.25
).
astype
(
"float32"
)}
if
__name__
==
"__main__"
:
paddle
.
enable_static
()
unittest
.
main
()
# Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
from
__future__
import
print_function
import
unittest
import
numpy
as
np
from
paddle.fluid.tests.unittests.op_test
import
OpTest
,
OpTestTool
import
paddle
@
OpTestTool
.
skip_if_not_cpu_bf16
()
class
TestFillConstant2DOneDNNOp
(
OpTest
):
def
setUp
(
self
):
self
.
op_type
=
"fill_constant"
self
.
dtype
=
np
.
float32
self
.
shape_tensor_list
=
None
self
.
shape_tensor
=
None
self
.
str_value
=
""
real_shape
=
[]
self
.
value
=
0.1
self
.
set_inputs
()
self
.
set_attrs
()
if
'value'
in
self
.
attrs
:
self
.
value
=
self
.
attrs
[
'value'
]
if
self
.
str_value
!=
""
:
self
.
value
=
float
(
self
.
str_value
)
if
'ValueTensor'
in
self
.
inputs
:
self
.
value
=
self
.
inputs
[
'ValueTensor'
]
if
'shape'
in
self
.
attrs
:
real_shape
=
self
.
attrs
[
'shape'
]
if
'ShapeTensor'
in
self
.
inputs
:
real_shape
=
list
(
self
.
inputs
[
'ShapeTensor'
])
if
'ShapeTensorList'
in
self
.
inputs
:
real_shape
=
[]
for
shape_tensor
in
self
.
inputs
[
'ShapeTensorList'
]:
real_shape
.
append
(
shape_tensor
[
1
].
item
())
self
.
outputs
=
{
'Out'
:
np
.
full
(
real_shape
,
self
.
value
)}
def
set_inputs
(
self
):
self
.
inputs
=
{}
def
set_attrs
(
self
):
self
.
attrs
=
{
'shape'
:
(
3
,
5
),
'use_mkldnn'
:
True
,
'value'
:
self
.
value
}
def
test_check_output
(
self
):
self
.
check_output
()
class
TestFillZerosLike4DShapeTensorPriorityOneDNNOp
(
TestFillConstant2DOneDNNOp
):
def
set_inputs
(
self
):
self
.
inputs
=
{
'ShapeTensor'
:
np
.
array
([
5
,
6
,
7
,
8
]).
astype
(
"int32"
)}
class
TestFillZerosLike4DShapeTensorListPriorityOneDNNOp
(
TestFillConstant2DOneDNNOp
):
def
set_inputs
(
self
):
shape
=
(
4
,
5
,
6
,
7
)
self
.
shape_tensor_list
=
[]
for
index
,
elem
in
enumerate
(
shape
):
self
.
shape_tensor_list
.
append
((
"x"
+
str
(
index
),
np
.
ones
(
(
1
)).
astype
(
'int32'
)
*
elem
))
self
.
inputs
=
{
'ShapeTensorList'
:
self
.
shape_tensor_list
}
class
TestFillZerosLike2DStringValueInfOneDNNOp
(
TestFillConstant2DOneDNNOp
):
def
set_attrs
(
self
):
self
.
str_value
=
"inf"
self
.
attrs
=
{
'shape'
:
(
10
,
13
),
'use_mkldnn'
:
True
,
'str_value'
:
"inf"
}
class
TestFillZerosLike2DStringValueMinusInfOneDNNOp
(
TestFillConstant2DOneDNNOp
):
def
set_attrs
(
self
):
self
.
str_value
=
"-inf"
self
.
attrs
=
{
'shape'
:
(
10
,
13
),
'use_mkldnn'
:
True
,
'str_value'
:
"-inf"
}
class
TestFillZerosLike2DStringValueFloatOneDNNOp
(
TestFillConstant2DOneDNNOp
):
def
set_attrs
(
self
):
self
.
str_value
=
"0.123"
self
.
attrs
=
{
'shape'
:
(
10
,
13
),
'use_mkldnn'
:
True
,
'str_value'
:
"0.123"
}
class
TestFillZerosLike2DValueTensorPriorityOneDNNOp
(
TestFillZerosLike2DStringValueFloatOneDNNOp
):
def
set_inputs
(
self
):
self
.
inputs
=
{
'ValueTensor'
:
np
.
atleast_1d
(
2.25
).
astype
(
"float32"
)}
if
__name__
==
"__main__"
:
paddle
.
enable_static
()
unittest
.
main
()
python/paddle/fluid/tests/unittests/sequence/test_sequence_first_step.py
浏览文件 @
c6c9c186
# Copyright (c) 2018 PaddlePaddle Authors. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import
paddle.fluid
as
fluid
from
paddle.fluid.framework
import
convert_np_dtype_to_dtype_
,
Program
,
program_guard
import
paddle.fluid.core
as
core
import
numpy
as
np
import
copy
import
unittest
import
sys
sys
.
path
.
append
(
"../"
)
from
op_test
import
OpTest
class
TestSequenceFirstStepOpError
(
unittest
.
TestCase
):
def
test_errors
(
self
):
with
program_guard
(
Program
(),
Program
()):
def
test_Variable
():
# the input must be Variable
input_data
=
np
.
random
.
randint
(
1
,
5
,
[
4
]).
astype
(
"int64"
)
fluid
.
layers
.
sequence_last_step
(
input_data
)
self
.
assertRaises
(
TypeError
,
test_Variable
)
def
test_input_dtype
():
# the dtype of input must be int64
type_data
=
fluid
.
layers
.
data
(
name
=
'type_data'
,
shape
=
[
7
,
1
],
append_batch_size
=
False
,
dtype
=
'int64'
,
lod_level
=
1
)
fluid
.
layers
.
sequence_last_step
(
type_data
)
self
.
assertRaises
(
TypeError
,
test_input_dtype
)
if
__name__
==
'__main__'
:
unittest
.
main
()
# Copyright (c) 2018 PaddlePaddle Authors. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import
paddle.fluid
as
fluid
from
paddle.fluid.framework
import
convert_np_dtype_to_dtype_
,
Program
,
program_guard
import
paddle.fluid.core
as
core
import
numpy
as
np
import
copy
import
unittest
import
sys
sys
.
path
.
append
(
"../"
)
from
op_test
import
OpTest
class
TestSequenceFirstStepOpError
(
unittest
.
TestCase
):
def
test_errors
(
self
):
with
program_guard
(
Program
(),
Program
()):
def
test_Variable
():
# the input must be Variable
input_data
=
np
.
random
.
randint
(
1
,
5
,
[
4
]).
astype
(
"int64"
)
fluid
.
layers
.
sequence_last_step
(
input_data
)
self
.
assertRaises
(
TypeError
,
test_Variable
)
def
test_input_dtype
():
# the dtype of input must be int64
type_data
=
fluid
.
layers
.
data
(
name
=
'type_data'
,
shape
=
[
7
,
1
],
append_batch_size
=
False
,
dtype
=
'int64'
,
lod_level
=
1
)
fluid
.
layers
.
sequence_last_step
(
type_data
)
self
.
assertRaises
(
TypeError
,
test_input_dtype
)
if
__name__
==
'__main__'
:
unittest
.
main
()
python/paddle/fluid/tests/unittests/sequence/test_sequence_last_step.py
浏览文件 @
c6c9c186
# Copyright (c) 2018 PaddlePaddle Authors. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import
paddle.fluid
as
fluid
from
paddle.fluid.framework
import
convert_np_dtype_to_dtype_
,
Program
,
program_guard
import
paddle.fluid.core
as
core
import
numpy
as
np
import
copy
import
unittest
import
sys
sys
.
path
.
append
(
"../"
)
from
op_test
import
OpTest
class
TestSequenceLastStepOpError
(
unittest
.
TestCase
):
def
test_errors
(
self
):
with
program_guard
(
Program
(),
Program
()):
def
test_Variable
():
# the input must be Variable
input_data
=
np
.
random
.
randint
(
1
,
5
,
[
4
]).
astype
(
"int64"
)
fluid
.
layers
.
sequence_last_step
(
input_data
)
self
.
assertRaises
(
TypeError
,
test_Variable
)
def
test_input_dtype
():
# the dtype of input must be int64
type_data
=
fluid
.
layers
.
data
(
name
=
'type_data'
,
shape
=
[
7
,
1
],
append_batch_size
=
False
,
dtype
=
'int64'
,
lod_level
=
1
)
fluid
.
layers
.
sequence_last_step
(
type_data
)
self
.
assertRaises
(
TypeError
,
test_input_dtype
)
if
__name__
==
'__main__'
:
unittest
.
main
()
# Copyright (c) 2018 PaddlePaddle Authors. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import
paddle.fluid
as
fluid
from
paddle.fluid.framework
import
convert_np_dtype_to_dtype_
,
Program
,
program_guard
import
paddle.fluid.core
as
core
import
numpy
as
np
import
copy
import
unittest
import
sys
sys
.
path
.
append
(
"../"
)
from
op_test
import
OpTest
class
TestSequenceLastStepOpError
(
unittest
.
TestCase
):
def
test_errors
(
self
):
with
program_guard
(
Program
(),
Program
()):
def
test_Variable
():
# the input must be Variable
input_data
=
np
.
random
.
randint
(
1
,
5
,
[
4
]).
astype
(
"int64"
)
fluid
.
layers
.
sequence_last_step
(
input_data
)
self
.
assertRaises
(
TypeError
,
test_Variable
)
def
test_input_dtype
():
# the dtype of input must be int64
type_data
=
fluid
.
layers
.
data
(
name
=
'type_data'
,
shape
=
[
7
,
1
],
append_batch_size
=
False
,
dtype
=
'int64'
,
lod_level
=
1
)
fluid
.
layers
.
sequence_last_step
(
type_data
)
self
.
assertRaises
(
TypeError
,
test_input_dtype
)
if
__name__
==
'__main__'
:
unittest
.
main
()
python/paddle/fluid/tests/unittests/test_lstm_cudnn_op.py
浏览文件 @
c6c9c186
此差异已折叠。
点击以展开。
python/paddle/fluid/tests/unittests/test_rnn_op.py
浏览文件 @
c6c9c186
# Copyright (c) 2018 PaddlePaddle Authors. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
from
__future__
import
print_function
import
unittest
import
numpy
as
np
import
math
import
paddle.fluid.core
as
core
import
paddle
import
paddle.fluid
as
fluid
import
paddle.fluid.layers
as
layers
import
random
import
sys
from
op_test
import
OpTest
sys
.
path
.
append
(
"./rnn"
)
from
rnn_numpy
import
SimpleRNN
,
LSTM
,
GRU
from
convert
import
get_params_for_net
random
.
seed
(
2
)
np
.
set_printoptions
(
threshold
=
np
.
inf
)
paddle
.
enable_static
()
class
TestRNNOp
(
OpTest
):
def
get_weight_names
(
self
):
weight_names
=
[]
for
i
in
range
(
self
.
num_layers
):
for
j
in
range
(
0
,
2
*
self
.
direction_num
):
weight_names
.
append
(
"{}.weight_{}"
.
format
(
i
,
j
))
for
i
in
range
(
self
.
num_layers
):
for
j
in
range
(
0
,
2
*
self
.
direction_num
):
weight_names
.
append
(
"{}.bias_{}"
.
format
(
i
,
j
))
return
weight_names
def
setUp
(
self
):
self
.
op_type
=
"rnn"
self
.
dtype
=
np
.
float32
if
core
.
is_compiled_with_rocm
()
else
np
.
float64
self
.
sequence_length
=
None
if
core
.
is_compiled_with_rocm
(
)
else
np
.
array
([
12
,
11
,
10
,
9
,
8
],
dtype
=
np
.
int32
)
self
.
num_layers
=
1
self
.
is_bidirec
=
False
self
.
mode
=
"LSTM"
self
.
is_test
=
False
self
.
dropout
=
0.0
self
.
set_attrs
()
self
.
direction_num
=
2
if
self
.
is_bidirec
else
1
direction
=
"bidirectional"
if
self
.
is_bidirec
else
"forward"
seq_length
=
12
batch_size
=
5
input_size
=
3
hidden_size
=
2
input
=
np
.
random
.
uniform
(
low
=-
0.1
,
high
=
0.1
,
size
=
(
seq_length
,
batch_size
,
input_size
)).
astype
(
self
.
dtype
)
if
self
.
sequence_length
is
not
None
:
input
[
11
][
1
:][:]
=
0
input
[
10
][
2
:][:]
=
0
input
[
9
][
3
:][:]
=
0
input
[
8
][
4
:][:]
=
0
rnn1
=
LSTM
(
input_size
,
hidden_size
,
num_layers
=
self
.
num_layers
,
time_major
=
True
,
direction
=
direction
,
dropout
=
self
.
dropout
,
dtype
=
self
.
dtype
)
flat_w
=
get_params_for_net
(
rnn1
)
output
,
(
last_hidden
,
last_cell
)
=
rnn1
(
input
,
sequence_length
=
self
.
sequence_length
)
if
core
.
is_compiled_with_rocm
():
def
rocm_rnn_get_place
():
places
=
[
core
.
CUDAPlace
(
0
)]
return
places
self
.
_get_places
=
rocm_rnn_get_place
init_h
=
np
.
zeros
((
self
.
num_layers
*
self
.
direction_num
,
batch_size
,
hidden_size
)).
astype
(
self
.
dtype
)
init_c
=
np
.
zeros
((
self
.
num_layers
*
self
.
direction_num
,
batch_size
,
hidden_size
)).
astype
(
self
.
dtype
)
state_out
=
np
.
ndarray
((
300
)).
astype
(
"uint8"
)
self
.
inputs
=
{
'Input'
:
input
,
'WeightList'
:
flat_w
,
'PreState'
:
[(
'init_h'
,
init_h
),
(
'init_c'
,
init_c
)],
'SequenceLength'
:
self
.
sequence_length
}
if
self
.
sequence_length
is
None
:
self
.
inputs
=
{
'Input'
:
input
,
'WeightList'
:
flat_w
,
'PreState'
:
[(
'init_h'
,
init_h
),
(
'init_c'
,
init_c
)],
}
self
.
attrs
=
{
'dropout_prob'
:
self
.
dropout
,
'is_bidirec'
:
self
.
is_bidirec
,
'input_size'
:
input_size
,
'hidden_size'
:
hidden_size
,
'num_layers'
:
self
.
num_layers
,
'mode'
:
self
.
mode
,
'is_test'
:
self
.
is_test
}
self
.
outputs
=
{
'Out'
:
output
,
"State"
:
[(
'last_hidden'
,
last_hidden
),
(
'last_cell'
,
last_cell
)],
'Reserve'
:
np
.
ndarray
((
400
)).
astype
(
"uint8"
),
'DropoutState'
:
state_out
}
def
test_output
(
self
):
self
.
check_output
(
no_check_set
=
[
'Reserve'
,
'DropoutState'
])
def
set_attrs
(
self
):
pass
def
test_grad
(
self
):
if
not
self
.
is_test
:
var_name_list
=
self
.
get_weight_names
()
grad_check_list
=
[
'Input'
,
'init_h'
,
'init_c'
]
grad_check_list
.
extend
(
var_name_list
)
self
.
check_grad
(
set
(
grad_check_list
),
[
'Out'
,
'last_hidden'
,
'last_cell'
])
class
TestRNNOp1
(
TestRNNOp
):
def
set_attrs
(
self
):
self
.
sequence_length
=
None
class
TestRNNOp2
(
TestRNNOp
):
def
set_attrs
(
self
):
self
.
sequence_length
=
None
self
.
is_bidirec
=
True
class
TestRNNOp3
(
TestRNNOp
):
def
set_attrs
(
self
):
self
.
is_test
=
True
self
.
sequence_length
=
None
class
TestRNNOp4
(
TestRNNOp
):
def
set_attrs
(
self
):
self
.
is_test
=
True
self
.
sequence_length
=
None
self
.
is_bidirec
=
True
class
TestRNNOp5
(
TestRNNOp
):
def
set_attrs
(
self
):
self
.
num_layers
=
2
class
TestRNNOp6
(
TestRNNOp
):
def
set_attrs
(
self
):
self
.
num_layers
=
2
self
.
is_bidirec
=
True
class
TestRNNOp7
(
TestRNNOp
):
def
set_attrs
(
self
):
self
.
num_layers
=
2
self
.
is_bidirec
=
True
self
.
is_test
=
True
class
TestRNNOp8
(
TestRNNOp
):
def
set_attrs
(
self
):
self
.
num_layers
=
2
self
.
is_bidirec
=
True
self
.
sequence_length
=
None
class
TestRNNOp9
(
TestRNNOp
):
def
set_attrs
(
self
):
self
.
num_layers
=
3
if
__name__
==
'__main__'
:
unittest
.
main
()
# Copyright (c) 2018 PaddlePaddle Authors. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
from
__future__
import
print_function
import
unittest
import
numpy
as
np
import
math
import
paddle.fluid.core
as
core
import
paddle
import
paddle.fluid
as
fluid
import
paddle.fluid.layers
as
layers
import
random
import
sys
from
op_test
import
OpTest
sys
.
path
.
append
(
"./rnn"
)
from
rnn_numpy
import
SimpleRNN
,
LSTM
,
GRU
from
convert
import
get_params_for_net
random
.
seed
(
2
)
np
.
set_printoptions
(
threshold
=
np
.
inf
)
paddle
.
enable_static
()
class
TestRNNOp
(
OpTest
):
def
get_weight_names
(
self
):
weight_names
=
[]
for
i
in
range
(
self
.
num_layers
):
for
j
in
range
(
0
,
2
*
self
.
direction_num
):
weight_names
.
append
(
"{}.weight_{}"
.
format
(
i
,
j
))
for
i
in
range
(
self
.
num_layers
):
for
j
in
range
(
0
,
2
*
self
.
direction_num
):
weight_names
.
append
(
"{}.bias_{}"
.
format
(
i
,
j
))
return
weight_names
def
setUp
(
self
):
self
.
op_type
=
"rnn"
self
.
dtype
=
np
.
float32
if
core
.
is_compiled_with_rocm
()
else
np
.
float64
self
.
sequence_length
=
None
if
core
.
is_compiled_with_rocm
(
)
else
np
.
array
([
12
,
11
,
10
,
9
,
8
],
dtype
=
np
.
int32
)
self
.
num_layers
=
1
self
.
is_bidirec
=
False
self
.
mode
=
"LSTM"
self
.
is_test
=
False
self
.
dropout
=
0.0
self
.
set_attrs
()
self
.
direction_num
=
2
if
self
.
is_bidirec
else
1
direction
=
"bidirectional"
if
self
.
is_bidirec
else
"forward"
seq_length
=
12
batch_size
=
5
input_size
=
3
hidden_size
=
2
input
=
np
.
random
.
uniform
(
low
=-
0.1
,
high
=
0.1
,
size
=
(
seq_length
,
batch_size
,
input_size
)).
astype
(
self
.
dtype
)
if
self
.
sequence_length
is
not
None
:
input
[
11
][
1
:][:]
=
0
input
[
10
][
2
:][:]
=
0
input
[
9
][
3
:][:]
=
0
input
[
8
][
4
:][:]
=
0
rnn1
=
LSTM
(
input_size
,
hidden_size
,
num_layers
=
self
.
num_layers
,
time_major
=
True
,
direction
=
direction
,
dropout
=
self
.
dropout
,
dtype
=
self
.
dtype
)
flat_w
=
get_params_for_net
(
rnn1
)
output
,
(
last_hidden
,
last_cell
)
=
rnn1
(
input
,
sequence_length
=
self
.
sequence_length
)
if
core
.
is_compiled_with_rocm
():
def
rocm_rnn_get_place
():
places
=
[
core
.
CUDAPlace
(
0
)]
return
places
self
.
_get_places
=
rocm_rnn_get_place
init_h
=
np
.
zeros
((
self
.
num_layers
*
self
.
direction_num
,
batch_size
,
hidden_size
)).
astype
(
self
.
dtype
)
init_c
=
np
.
zeros
((
self
.
num_layers
*
self
.
direction_num
,
batch_size
,
hidden_size
)).
astype
(
self
.
dtype
)
state_out
=
np
.
ndarray
((
300
)).
astype
(
"uint8"
)
self
.
inputs
=
{
'Input'
:
input
,
'WeightList'
:
flat_w
,
'PreState'
:
[(
'init_h'
,
init_h
),
(
'init_c'
,
init_c
)],
'SequenceLength'
:
self
.
sequence_length
}
if
self
.
sequence_length
is
None
:
self
.
inputs
=
{
'Input'
:
input
,
'WeightList'
:
flat_w
,
'PreState'
:
[(
'init_h'
,
init_h
),
(
'init_c'
,
init_c
)],
}
self
.
attrs
=
{
'dropout_prob'
:
self
.
dropout
,
'is_bidirec'
:
self
.
is_bidirec
,
'input_size'
:
input_size
,
'hidden_size'
:
hidden_size
,
'num_layers'
:
self
.
num_layers
,
'mode'
:
self
.
mode
,
'is_test'
:
self
.
is_test
}
self
.
outputs
=
{
'Out'
:
output
,
"State"
:
[(
'last_hidden'
,
last_hidden
),
(
'last_cell'
,
last_cell
)],
'Reserve'
:
np
.
ndarray
((
400
)).
astype
(
"uint8"
),
'DropoutState'
:
state_out
}
def
test_output
(
self
):
self
.
check_output
(
no_check_set
=
[
'Reserve'
,
'DropoutState'
])
def
set_attrs
(
self
):
pass
def
test_grad
(
self
):
if
not
self
.
is_test
:
var_name_list
=
self
.
get_weight_names
()
grad_check_list
=
[
'Input'
,
'init_h'
,
'init_c'
]
grad_check_list
.
extend
(
var_name_list
)
self
.
check_grad
(
set
(
grad_check_list
),
[
'Out'
,
'last_hidden'
,
'last_cell'
])
class
TestRNNOp1
(
TestRNNOp
):
def
set_attrs
(
self
):
self
.
sequence_length
=
None
class
TestRNNOp2
(
TestRNNOp
):
def
set_attrs
(
self
):
self
.
sequence_length
=
None
self
.
is_bidirec
=
True
class
TestRNNOp3
(
TestRNNOp
):
def
set_attrs
(
self
):
self
.
is_test
=
True
self
.
sequence_length
=
None
class
TestRNNOp4
(
TestRNNOp
):
def
set_attrs
(
self
):
self
.
is_test
=
True
self
.
sequence_length
=
None
self
.
is_bidirec
=
True
class
TestRNNOp5
(
TestRNNOp
):
def
set_attrs
(
self
):
self
.
num_layers
=
2
class
TestRNNOp6
(
TestRNNOp
):
def
set_attrs
(
self
):
self
.
num_layers
=
2
self
.
is_bidirec
=
True
class
TestRNNOp7
(
TestRNNOp
):
def
set_attrs
(
self
):
self
.
num_layers
=
2
self
.
is_bidirec
=
True
self
.
is_test
=
True
class
TestRNNOp8
(
TestRNNOp
):
def
set_attrs
(
self
):
self
.
num_layers
=
2
self
.
is_bidirec
=
True
self
.
sequence_length
=
None
class
TestRNNOp9
(
TestRNNOp
):
def
set_attrs
(
self
):
self
.
num_layers
=
3
if
__name__
==
'__main__'
:
unittest
.
main
()
python/paddle/fluid/transpiler/memory_optimization_transpiler.py
浏览文件 @
c6c9c186
...
...
@@ -21,7 +21,7 @@ def memory_optimize(input_program,
level
=
0
,
skip_grads
=
True
):
"""
:api_attr: Static Graph
:api_attr: Static Graph
This API is deprecated since 1.6. Please do not use it. The better
memory optimization strategies are enabled by default.
...
...
@@ -43,7 +43,7 @@ def memory_optimize(input_program,
def
release_memory
(
input_program
,
skip_opt_set
=
None
):
"""
:api_attr: Static Graph
:api_attr: Static Graph
This API is deprecated since 1.6. Please do not use it. The better
memory optimization strategies are enabled by default.
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录