Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
csdn_franckjun
Paddle
提交
17babe4d
P
Paddle
项目概览
csdn_franckjun
/
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看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
17babe4d
编写于
4月 02, 2020
作者:
W
wangchaochaohu
提交者:
GitHub
4月 02, 2020
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
add full op API (#23112)
上级
bfb07aaf
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
242 addition
and
23 deletion
+242
-23
python/paddle/__init__.py
python/paddle/__init__.py
+1
-1
python/paddle/fluid/tests/unittests/test_full_op.py
python/paddle/fluid/tests/unittests/test_full_op.py
+139
-0
python/paddle/tensor/__init__.py
python/paddle/tensor/__init__.py
+1
-1
python/paddle/tensor/creation.py
python/paddle/tensor/creation.py
+100
-21
python/setup.py.in
python/setup.py.in
+1
-0
未找到文件。
python/paddle/__init__.py
浏览文件 @
17babe4d
...
@@ -52,7 +52,7 @@ import paddle.nn
...
@@ -52,7 +52,7 @@ import paddle.nn
# from .tensor.creation import zeros_like #DEFINE_ALIAS
# from .tensor.creation import zeros_like #DEFINE_ALIAS
# from .tensor.creation import arrange #DEFINE_ALIAS
# from .tensor.creation import arrange #DEFINE_ALIAS
# from .tensor.creation import eye #DEFINE_ALIAS
# from .tensor.creation import eye #DEFINE_ALIAS
# from .tensor.creation import full
#DEFINE_ALIAS
from
.tensor.creation
import
full
#DEFINE_ALIAS
# from .tensor.creation import linspace #DEFINE_ALIAS
# from .tensor.creation import linspace #DEFINE_ALIAS
# from .tensor.creation import full_like #DEFINE_ALIAS
# from .tensor.creation import full_like #DEFINE_ALIAS
# from .tensor.creation import triu #DEFINE_ALIAS
# from .tensor.creation import triu #DEFINE_ALIAS
...
...
python/paddle/fluid/tests/unittests/test_full_op.py
0 → 100644
浏览文件 @
17babe4d
# 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
from
op_test
import
OpTest
import
paddle.fluid.core
as
core
from
paddle.fluid.op
import
Operator
import
paddle.fluid
as
fluid
import
paddle.tensor
as
tensor
from
paddle.fluid
import
compiler
,
Program
,
program_guard
# Test python API
class
TestFullAPI
(
unittest
.
TestCase
):
def
test_api
(
self
):
positive_2_int32
=
fluid
.
layers
.
fill_constant
([
1
],
"int32"
,
2
)
positive_2_int64
=
fluid
.
layers
.
fill_constant
([
1
],
"int64"
,
2
)
shape_tensor_int32
=
fluid
.
data
(
name
=
"shape_tensor_int32"
,
shape
=
[
2
],
dtype
=
"int32"
)
shape_tensor_int64
=
fluid
.
data
(
name
=
"shape_tensor_int64"
,
shape
=
[
2
],
dtype
=
"int64"
)
out_1
=
tensor
.
full
(
shape
=
[
1
,
2
],
dtype
=
"float32"
,
fill_value
=
1.1
,
device
=
'gpu'
)
out_2
=
tensor
.
full
(
shape
=
[
1
,
positive_2_int32
],
dtype
=
"float32"
,
fill_value
=
1.1
,
device
=
'cpu'
)
out_3
=
tensor
.
full
(
shape
=
[
1
,
positive_2_int64
],
dtype
=
"float32"
,
fill_value
=
1.1
,
device
=
'gpu'
)
out_4
=
tensor
.
full
(
shape
=
shape_tensor_int32
,
dtype
=
"float32"
,
fill_value
=
1.2
,
out
=
out_3
)
out_5
=
tensor
.
full
(
shape
=
shape_tensor_int64
,
dtype
=
"float32"
,
fill_value
=
1.1
,
device
=
'gpu'
,
stop_gradient
=
False
)
out_6
=
tensor
.
full
(
shape
=
shape_tensor_int64
,
dtype
=
np
.
float32
,
fill_value
=
1.1
)
exe
=
fluid
.
Executor
(
place
=
fluid
.
CPUPlace
())
res_1
,
res_2
,
res_3
,
res_4
,
res_5
,
res_6
=
exe
.
run
(
fluid
.
default_main_program
(),
feed
=
{
"shape_tensor_int32"
:
np
.
array
([
1
,
2
]).
astype
(
"int32"
),
"shape_tensor_int64"
:
np
.
array
([
1
,
2
]).
astype
(
"int64"
),
},
fetch_list
=
[
out_1
,
out_2
,
out_3
,
out_4
,
out_5
,
out_6
])
assert
np
.
array_equal
(
res_1
,
np
.
full
([
1
,
2
],
1.1
,
dtype
=
"float32"
))
assert
np
.
array_equal
(
res_2
,
np
.
full
([
1
,
2
],
1.1
,
dtype
=
"float32"
))
assert
np
.
array_equal
(
res_3
,
np
.
full
([
1
,
2
],
1.2
,
dtype
=
"float32"
))
assert
np
.
array_equal
(
res_4
,
np
.
full
([
1
,
2
],
1.2
,
dtype
=
"float32"
))
assert
np
.
array_equal
(
res_5
,
np
.
full
([
1
,
2
],
1.1
,
dtype
=
"float32"
))
assert
np
.
array_equal
(
res_6
,
np
.
full
([
1
,
2
],
1.1
,
dtype
=
"float32"
))
class
TestFullOpError
(
unittest
.
TestCase
):
def
test_errors
(
self
):
with
program_guard
(
Program
(),
Program
()):
#for ci coverage
x1
=
fluid
.
layers
.
data
(
name
=
'x1'
,
shape
=
[
1
],
dtype
=
"int16"
)
self
.
assertRaises
(
ValueError
,
tensor
.
full
,
shape
=
[
1
],
fill_value
=
5
,
dtype
=
'uint4'
)
self
.
assertRaises
(
TypeError
,
tensor
.
full
,
shape
=
[
1
],
fill_value
=
5
,
dtype
=
'int16'
,
out
=
x1
)
# The argument dtype of full must be one of bool, float16,
#float32, float64, int32 or int64
x2
=
fluid
.
layers
.
data
(
name
=
'x2'
,
shape
=
[
1
],
dtype
=
"int32"
)
self
.
assertRaises
(
TypeError
,
tensor
.
full
,
shape
=
[
1
],
fill_value
=
5
,
dtype
=
'uint8'
)
# The argument shape's type of full_op must be list, tuple or Variable.
def
test_shape_type
():
tensor
.
full
(
shape
=
1
,
dtype
=
"float32"
,
fill_value
=
1
)
self
.
assertRaises
(
TypeError
,
test_shape_type
)
# The argument shape's size of full_op must not be 0.
def
test_shape_size
():
tensor
.
full
(
shape
=
[],
dtype
=
"float32"
,
fill_value
=
1
)
self
.
assertRaises
(
AssertionError
,
test_shape_size
)
# The shape dtype of full op must be int32 or int64.
def
test_shape_tensor_dtype
():
shape
=
fluid
.
data
(
name
=
"shape_tensor"
,
shape
=
[
2
],
dtype
=
"float32"
)
tensor
.
full
(
shape
=
shape
,
dtype
=
"float32"
,
fill_value
=
1
)
self
.
assertRaises
(
TypeError
,
test_shape_tensor_dtype
)
def
test_shape_tensor_list_dtype
():
shape
=
fluid
.
data
(
name
=
"shape_tensor_list"
,
shape
=
[
1
],
dtype
=
"bool"
)
tensor
.
full
(
shape
=
[
shape
,
2
],
dtype
=
"float32"
,
fill_value
=
1
)
self
.
assertRaises
(
TypeError
,
test_shape_tensor_list_dtype
)
if
__name__
==
"__main__"
:
unittest
.
main
()
python/paddle/tensor/__init__.py
浏览文件 @
17babe4d
...
@@ -29,7 +29,7 @@
...
@@ -29,7 +29,7 @@
# from .creation import zeros_like #DEFINE_ALIAS
# from .creation import zeros_like #DEFINE_ALIAS
# from .creation import arrange #DEFINE_ALIAS
# from .creation import arrange #DEFINE_ALIAS
# from .creation import eye #DEFINE_ALIAS
# from .creation import eye #DEFINE_ALIAS
# from .creation import full
#DEFINE_ALIAS
from
.creation
import
full
#DEFINE_ALIAS
# from .creation import linspace #DEFINE_ALIAS
# from .creation import linspace #DEFINE_ALIAS
# from .creation import full_like #DEFINE_ALIAS
# from .creation import full_like #DEFINE_ALIAS
# from .creation import triu #DEFINE_ALIAS
# from .creation import triu #DEFINE_ALIAS
...
...
python/paddle/tensor/creation.py
浏览文件 @
17babe4d
...
@@ -13,24 +13,103 @@
...
@@ -13,24 +13,103 @@
# limitations under the License.
# limitations under the License.
# TODO: define functions to get create a tensor
# TODO: define functions to get create a tensor
# __all__ = ['create_tensor',
# 'create_lod_tensor',
from
__future__
import
print_function
# 'create_random_int_lodtensor',
from
..fluid.framework
import
Variable
# 'crop_tensor',
from
..fluid.initializer
import
Constant
# 'diag', 'eye',
from
..fluid.layer_helper
import
LayerHelper
# 'fill_constant',
from
..fluid.data_feeder
import
check_variable_and_dtype
,
check_type
,
check_dtype
,
convert_dtype
# 'get_tensor_from_selected_rows',
from
..fluid.framework
import
convert_np_dtype_to_dtype_
,
in_dygraph_mode
,
_varbase_creator
,
device_guard
# 'linspace',
from
..fluid.layers
import
fill_constant
# 'ones',
# 'ones_like',
__all__
=
[
# 'range',
'create_tensor'
,
# 'zeros',
# 'create_lod_tensor',
# 'zeros_like',
# 'create_random_int_lodtensor',
# 'arrange',
# 'crop_tensor',
# 'eye',
# 'diag', 'eye',
# 'full',
# 'fill_constant',
# 'linspace',
# 'get_tensor_from_selected_rows',
# 'full_like',
# 'linspace',
# 'triu',
# 'ones',
# 'tril',
# 'ones_like',
# 'meshgrid']
# 'range',
# 'zeros',
# 'zeros_like',
# 'arrange',
# 'eye',
'full'
,
# 'linspace',
# 'full_like',
# 'triu',
# 'tril',
# 'meshgrid'
]
def
full
(
shape
,
fill_value
,
out
=
None
,
dtype
=
None
,
device
=
None
,
stop_gradient
=
True
,
name
=
None
):
"""
This function return a Tensor with the `fill_value` which size is same as `shape`
Args:
shape(list|tuple|Variable): Shape of the Tensor to be created.
The data type is ``int32`` or ``int64`` . If ``shape`` is a list or tuple,
the elements of it should be integers or Tensors with shape [1].
If ``shape`` is an Variable, it should be an 1-D Tensor .
value(float): The constant value used to initialize the Tensor to be created.
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.
dtype(np.dtype|core.VarDesc.VarType|str, optional): Data type of the output tensor
which can be float16, float32, float64, int32, int64, if dytpe is `None`, the data
type of created tensor is `float32`
device(str, optional): This parameter specifies that the Tensor is created
on the GPU or CPU.
stop_gradient(bool, optional): Indicating if we stop gradient from current(out) Variable,
default value is True.
name(str, optional): The default value is None. Normally there is no need for user to set this
property. For more information, please refer to :ref:`api_guide_Name`.
Examples:
.. code-block:: python
import paddle.tensor as tensor
import paddle.fluid as fluid
data1 = tensor.full(shape=[2,1], full_value=0, dtype='int64') # data1=[[0],[0]]
data2 = tensor.full(shape=[2,1], full_value=5, dtype='int64', device='gpu') # data2=[[5],[5]]
# attr shape is a list which contains Variable Tensor.
positive_2 = fluid.layers.fill_constant([1], "int32", 2)
data3 = tensor.full(shape=[1, positive_2], dtype='float32', full_value=1.5) # data3=[1.5, 1.5]
# attr shape is an Variable Tensor.
shape = fluid.layers.fill_constant([1,2], "int32", 2) # shape=[2,2]
data4 = tensor.full(shape=shape, dtype='bool', full_value=True) # data4=[[True,True],[True,True]]
"""
helper
=
LayerHelper
(
"full"
,
**
locals
())
if
dtype
is
None
:
dtype
=
'float32'
check_dtype
(
dtype
,
'create data type'
,
[
'bool'
,
'float16'
,
'float32'
,
'float64'
,
'int32'
,
'int64'
],
'full'
)
check_type
(
shape
,
'shape'
,
(
Variable
,
list
,
tuple
),
'full'
)
if
out
is
None
:
out
=
helper
.
create_variable_for_type_inference
(
dtype
=
dtype
)
out
.
stop_gradient
=
stop_gradient
with
device_guard
(
device
):
out
=
fill_constant
(
shape
=
shape
,
dtype
=
dtype
,
value
=
fill_value
,
out
=
out
)
return
out
python/setup.py.in
浏览文件 @
17babe4d
...
@@ -113,6 +113,7 @@ packages=['paddle',
...
@@ -113,6 +113,7 @@ packages=['paddle',
'paddle.reader',
'paddle.reader',
'paddle.distributed',
'paddle.distributed',
'paddle.fluid',
'paddle.fluid',
'paddle.tensor',
'paddle.fluid.dygraph',
'paddle.fluid.dygraph',
'paddle.fluid.dygraph.dygraph_to_static',
'paddle.fluid.dygraph.dygraph_to_static',
'paddle.fluid.proto',
'paddle.fluid.proto',
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录