Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
机器未来
Paddle
提交
0b2ec49f
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看板
未验证
提交
0b2ec49f
编写于
7月 10, 2020
作者:
W
wangchaochaohu
提交者:
GitHub
7月 10, 2020
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
refine the linspace Op for API 2.0 test=develop (#25284)
上级
e528392d
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
38 addition
and
125 deletion
+38
-125
python/paddle/fluid/layers/tensor.py
python/paddle/fluid/layers/tensor.py
+16
-17
python/paddle/fluid/tests/unittests/test_linspace.py
python/paddle/fluid/tests/unittests/test_linspace.py
+20
-16
python/paddle/tensor/creation.py
python/paddle/tensor/creation.py
+2
-92
未找到文件。
python/paddle/fluid/layers/tensor.py
浏览文件 @
0b2ec49f
...
@@ -1387,7 +1387,7 @@ def range(start, end, step, dtype):
...
@@ -1387,7 +1387,7 @@ def range(start, end, step, dtype):
return
out
return
out
def
linspace
(
start
,
stop
,
num
,
dtype
):
def
linspace
(
start
,
stop
,
num
,
dtype
=
None
,
name
=
None
):
"""
"""
This OP return fixed number of evenly spaced values within a given interval.
This OP return fixed number of evenly spaced values within a given interval.
...
@@ -1398,7 +1398,10 @@ def linspace(start, stop, num, dtype):
...
@@ -1398,7 +1398,10 @@ def linspace(start, stop, num, dtype):
or a tensor of shape [1] with input data type float32, float64.
or a tensor of shape [1] with input data type float32, float64.
num(int|Variable): The input :attr:`num` is given num of the sequence. It is an int scalar,
\
num(int|Variable): The input :attr:`num` is given num of the sequence. It is an int scalar,
\
or a tensor of shape [1] with type int32.
or a tensor of shape [1] with type int32.
dtype(string): The data type of output tensor, it could be 'float32' and 'float64'.
dtype(np.dtype|core.VarDesc.VarType|str): The data type of output tensor, it could be 'float32' and 'float64'.
Default: if None, the data type is `float32`.
name(str, optional): Normally there is no need for user to set this property.
For more information, please refer to :ref:`api_guide_Name`.Default: None.
Returns:
Returns:
Variable, the output data type will be float32, float64.: The 1-D tensor with fixed number of evenly spaced values,
\
Variable, the output data type will be float32, float64.: The 1-D tensor with fixed number of evenly spaced values,
\
...
@@ -1413,27 +1416,23 @@ def linspace(start, stop, num, dtype):
...
@@ -1413,27 +1416,23 @@ def linspace(start, stop, num, dtype):
data = fluid.layers.linspace(0, 10, 1, 'float32') # [0.0]
data = fluid.layers.linspace(0, 10, 1, 'float32') # [0.0]
"""
"""
helper
=
LayerHelper
(
"linspace"
,
**
locals
())
if
dtype
is
None
:
dtype
=
'float32'
check_type
(
start
,
'start'
,
(
Variable
,
float
,
int
),
linspace
)
check_type
(
stop
,
'stop'
,
(
Variable
,
float
,
int
),
linspace
)
check_type
(
num
,
'num'
,
(
Variable
,
float
,
int
),
linspace
)
if
not
isinstance
(
start
,
Variable
):
if
not
isinstance
(
start
,
Variable
):
start
=
fill_constant
([
1
],
dtype
,
start
)
start
=
fill_constant
([
1
],
dtype
,
start
)
else
:
check_variable_and_dtype
(
start
,
"start"
,
[
"float32"
,
"float64"
],
"linspace"
)
if
not
isinstance
(
stop
,
Variable
):
if
not
isinstance
(
stop
,
Variable
):
stop
=
fill_constant
([
1
],
dtype
,
stop
)
stop
=
fill_constant
([
1
],
dtype
,
stop
)
else
:
check_variable_and_dtype
(
stop
,
"stop"
,
[
"float32"
,
"float64"
],
"linspace"
)
if
not
isinstance
(
num
,
Variable
):
if
not
isinstance
(
num
,
Variable
):
num
=
fill_constant
([
1
],
'int32'
,
num
)
num
=
fill_constant
([
1
],
'int32'
,
num
)
else
:
if
in_dygraph_mode
():
check_variable_and_dtype
(
num
,
"num"
,
[
"int32"
],
"linspace"
)
return
core
.
ops
.
linspace
(
start
,
stop
,
num
)
helper
=
LayerHelper
(
"linspace"
,
**
locals
())
check_dtype
(
start
.
dtype
,
'start'
,
[
'float32'
,
'float64'
],
'linspace'
)
check_dtype
(
stop
.
dtype
,
'stop'
,
[
'float32'
,
'float64'
],
'linspace'
)
check_dtype
(
num
.
dtype
,
'num'
,
[
'int32'
,
'int64'
],
'linspace'
)
check_dtype
(
dtype
,
'dtype'
,
[
'float32'
,
'float64'
],
'linspace'
)
out
=
helper
.
create_variable_for_type_inference
(
dtype
=
start
.
dtype
)
out
=
helper
.
create_variable_for_type_inference
(
dtype
=
start
.
dtype
)
...
...
python/paddle/fluid/tests/unittests/test_linspace.py
浏览文件 @
0b2ec49f
...
@@ -20,6 +20,7 @@ from op_test import OpTest
...
@@ -20,6 +20,7 @@ from op_test import OpTest
import
paddle
import
paddle
import
paddle.fluid
as
fluid
import
paddle.fluid
as
fluid
from
paddle.fluid
import
compiler
,
Program
,
program_guard
from
paddle.fluid
import
compiler
,
Program
,
program_guard
from
paddle.fluid
import
core
class
TestLinspaceOpCommonCase
(
OpTest
):
class
TestLinspaceOpCommonCase
(
OpTest
):
...
@@ -71,33 +72,36 @@ class TestLinspaceOpNumOneCase(OpTest):
...
@@ -71,33 +72,36 @@ class TestLinspaceOpNumOneCase(OpTest):
class
TestLinspaceAPI
(
unittest
.
TestCase
):
class
TestLinspaceAPI
(
unittest
.
TestCase
):
def
test_out
(
self
):
def
test_dtype
(
self
):
with
program_guard
(
fluid
.
Program
()):
out_1
=
paddle
.
linspace
(
0
,
10
,
5
,
dtype
=
'float32'
)
out_1
=
fluid
.
data
(
name
=
"out_1"
,
shape
=
[
5
],
dtype
=
"float32"
)
out_2
=
paddle
.
linspace
(
0
,
10
,
5
,
dtype
=
np
.
float32
)
out_2
=
paddle
.
tensor
.
linspace
(
0
,
10
,
5
,
dtype
=
'float32'
,
out
=
out_1
)
out_3
=
paddle
.
linspace
(
0
,
10
,
5
,
dtype
=
core
.
VarDesc
.
VarType
.
FP32
)
exe
=
fluid
.
Executor
(
place
=
fluid
.
CPUPlace
())
exe
=
fluid
.
Executor
(
place
=
fluid
.
CPUPlace
())
ipt
=
{
'out_1'
:
np
.
random
.
random
([
5
]).
astype
(
'float32'
)}
res_1
,
res_2
,
res_3
=
exe
.
run
(
fluid
.
default_main_program
(),
res_1
,
res_2
=
exe
.
run
(
fluid
.
default_main_program
(),
fetch_list
=
[
out_1
,
out_2
,
out_3
])
feed
=
ipt
,
assert
np
.
array_equal
(
res_1
,
res_2
)
fetch_list
=
[
out_1
,
out_2
])
assert
np
.
array_equal
(
res_1
,
res_2
)
def
test_name
(
self
):
def
test_name
(
self
):
with
fluid
.
program_guard
(
fluid
.
Program
()):
with
paddle
.
program_guard
(
paddle
.
Program
()):
out
=
paddle
.
linspace
(
out
=
paddle
.
linspace
(
0
,
10
,
5
,
dtype
=
'float32'
,
name
=
'linspace_res'
)
0
,
10
,
5
,
dtype
=
'float32'
,
name
=
'linspace_res'
)
assert
'linspace_res'
in
out
.
name
assert
'linspace_res'
in
out
.
name
def
test_imperative
(
self
):
with
paddle
.
imperative
.
guard
():
out
=
paddle
.
linspace
(
0
,
10
,
5
,
dtype
=
'float32'
)
np_out
=
np
.
linspace
(
0
,
10
,
5
,
dtype
=
'float32'
)
self
.
assertEqual
((
out
.
numpy
()
==
np_out
).
all
(),
True
)
class
TestLinspaceOpError
(
unittest
.
TestCase
):
class
TestLinspaceOpError
(
unittest
.
TestCase
):
def
test_errors
(
self
):
def
test_errors
(
self
):
with
program_guard
(
Program
(),
Program
()):
with
program_guard
(
Program
(),
Program
()):
# for ci coverage
# The device of fill_constant must be in 'cpu', 'gpu' or None
def
test_device_value
():
paddle
.
linspace
(
0
,
10
,
1
,
dtype
=
"float32"
,
device
=
'xxxpu'
)
self
.
assertRaises
(
ValueError
,
test_device_value
)
def
test_dtype
():
fluid
.
layers
.
linspace
(
0
,
10
,
1
,
dtype
=
"int32"
)
self
.
assertRaises
(
TypeError
,
test_dtype
)
def
test_start_type
():
def
test_start_type
():
fluid
.
layers
.
linspace
([
0
],
10
,
1
,
dtype
=
"float32"
)
fluid
.
layers
.
linspace
([
0
],
10
,
1
,
dtype
=
"float32"
)
...
...
python/paddle/tensor/creation.py
浏览文件 @
0b2ec49f
...
@@ -27,8 +27,8 @@ from ..fluid.layers import crop_tensor #DEFINE_ALIAS
...
@@ -27,8 +27,8 @@ from ..fluid.layers import crop_tensor #DEFINE_ALIAS
from
..fluid.layers
import
diag
#DEFINE_ALIAS
from
..fluid.layers
import
diag
#DEFINE_ALIAS
from
..fluid.layers
import
eye
#DEFINE_ALIAS
from
..fluid.layers
import
eye
#DEFINE_ALIAS
from
..fluid.layers
import
fill_constant
#DEFINE_ALIAS
from
..fluid.layers
import
fill_constant
#DEFINE_ALIAS
from
..fluid.layers
import
create_tensor
#DEFINE_ALIAS
from
..fluid.layers
import
create_tensor
#DEFINE_ALIAS
from
..fluid.layers
import
linspace
#DEFINE_ALIAS
__all__
=
[
__all__
=
[
'create_tensor'
,
'create_tensor'
,
...
@@ -65,8 +65,7 @@ def full_like(x, fill_value, dtype=None, name=None):
...
@@ -65,8 +65,7 @@ def full_like(x, fill_value, dtype=None, name=None):
Args:
Args:
x(Variable): The input tensor which specifies shape and data type. The data type can be bool, float16, float32, float64, int32, int64.
x(Variable): The input tensor which specifies shape and data type. The data type can be bool, float16, float32, float64, int32, int64.
fill_value(bool|float|int|Variable): The value to fill the tensor with. Default value is 0.
fill_value(bool|float|int|Variable): The value to fill the tensor with. Note: this value shouldn't exceed the range of the output data type.
Note: this value shouldn't exceed the range of the output data type.
dtype(np.dtype|core.VarDesc.VarType|str, optional): The data type of output. The data type can be one
dtype(np.dtype|core.VarDesc.VarType|str, optional): The data type of output. The data type can be one
of bool, float16, float32, float64, int32, int64. The default value is None, which means the output
of bool, float16, float32, float64, int32, int64. The default value is None, which means the output
data type is the same as input.
data type is the same as input.
...
@@ -112,95 +111,6 @@ def full_like(x, fill_value, dtype=None, name=None):
...
@@ -112,95 +111,6 @@ def full_like(x, fill_value, dtype=None, name=None):
return
out
return
out
def
linspace
(
start
,
stop
,
num
,
dtype
,
out
=
None
,
device
=
None
,
name
=
None
):
"""
:alias_main: paddle.linspace
:alias: paddle.linspace,paddle.tensor.linspace,paddle.tensor.creation.linspace
This OP return fixed number of evenly spaced values within a given interval.
**NOTICE**: The output of this OP has no gradient.
Args:
start(float|Variable): The input :attr:`start` is start variable of range. It is a float scalar,
\
or a tensor of shape [1] with input data type float32, float64.
stop(float|Variable): The input :attr:`stop` is start variable of range. It is a float scalar,
\
or a tensor of shape [1] with input data type float32, float64.
num(int|Variable): The input :attr:`num` is given num of the sequence. It is an int scalar,
\
or a tensor of shape [1] with type int32.
dtype(string): The data type of output tensor, it could be 'float32' and 'float64'.
out (Variable, optional): Optional output which can be any created
Variable that meets the requirements to store the result of operation.
if out is None, a new Varibale will be create to store the result. Default: None.
device (string, optional): Which device to run the operator. The :attr:`device` must be
None, 'cpu', 'gpu'. If :attr:`device` is None, it will be choose the device that the user set in
the paddle program. Default: None.
name(str, optional): Normally there is no need for user to set this property.
For more information, please refer to :ref:`api_guide_Name`.Default: None.
Returns:
Variable, the output data type will be float32, float64.: The 1-D tensor with fixed number of evenly spaced values,
\
the data shape of this tensor is :math:`[num]` . If the :attr:`num` is set 1, the output tensor just has
\
the value with input :attr:`start`.
Examples:
.. code-block:: python
import paddle
data = paddle.linspace(0, 10, 5, dtype='float32') # [0.0, 2.5, 5.0, 7.5, 10.0]
data = paddle.linspace(0, 10, 1, dtype='float32') # [0.0]
"""
helper
=
LayerHelper
(
"linspace"
,
**
locals
())
if
not
isinstance
(
start
,
Variable
):
start
=
fill_constant
([
1
],
dtype
,
start
)
if
not
isinstance
(
stop
,
Variable
):
stop
=
fill_constant
([
1
],
dtype
,
stop
)
if
not
isinstance
(
num
,
Variable
):
num
=
fill_constant
([
1
],
'int32'
,
num
)
if
out
is
None
:
out
=
helper
.
create_variable_for_type_inference
(
dtype
=
start
.
dtype
)
else
:
check_dtype
(
out
.
dtype
,
out
.
name
,
convert_dtype
(
start
.
dtype
),
'linspace'
,
"The out data type '%s' in linspace must be the same with '%s' seted by parameter 'dtype'."
%
(
out
.
dtype
,
dtype
))
if
name
:
warning
.
warn
(
"The output Variable name of the paddle.tensor.linspace operation can only be given by parameter out or name.
\
When parameter out and name are set at the same time, out has a higher priority than name.
\
Finally, the output Variable name is same as the out name %s."
%
out
.
name
,
category
=
UserWarning
,
stacklevel
=
2
)
if
device
is
not
None
:
if
device
not
in
[
'cpu'
,
'gpu'
]:
raise
ValueError
(
"The value of 'device' in linspace operation must be cpu or gpu, but received %s."
%
(
device
))
else
:
with
device_guard
(
device
):
helper
.
append_op
(
type
=
'linspace'
,
inputs
=
{
'Start'
:
start
,
'Stop'
:
stop
,
'Num'
:
num
},
outputs
=
{
'Out'
:
[
out
]})
else
:
helper
.
append_op
(
type
=
'linspace'
,
inputs
=
{
'Start'
:
start
,
'Stop'
:
stop
,
'Num'
:
num
},
outputs
=
{
'Out'
:
[
out
]})
return
out
def
ones
(
shape
,
dtype
=
None
,
out
=
None
,
device
=
None
):
def
ones
(
shape
,
dtype
=
None
,
out
=
None
,
device
=
None
):
"""
"""
:alias_main: paddle.ones
:alias_main: paddle.ones
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录