Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
BaiXuePrincess
Paddle
提交
a06f099d
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看板
提交
a06f099d
编写于
10月 09, 2017
作者:
L
Luo Tao
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
refine comment of interp_op
上级
5b862fed
变更
2
显示空白变更内容
内联
并排
Showing
2 changed file
with
28 addition
and
21 deletion
+28
-21
paddle/operators/interp_op.cc
paddle/operators/interp_op.cc
+25
-18
python/paddle/v2/framework/tests/test_interp_op.py
python/paddle/v2/framework/tests/test_interp_op.py
+3
-3
未找到文件。
paddle/operators/interp_op.cc
浏览文件 @
a06f099d
...
@@ -30,27 +30,26 @@ class InterpOp : public NetOp {
...
@@ -30,27 +30,26 @@ class InterpOp : public NetOp {
"Input(Y) of InterpOp should not be null."
);
"Input(Y) of InterpOp should not be null."
);
PADDLE_ENFORCE_NE
(
Input
(
"W"
),
framework
::
kEmptyVarName
,
PADDLE_ENFORCE_NE
(
Input
(
"W"
),
framework
::
kEmptyVarName
,
"Input(W) of InterpOp should not be null."
);
"Input(W) of InterpOp should not be null."
);
PADDLE_ENFORCE_NE
(
Output
(
"
Minus
Out"
),
framework
::
kEmptyVarName
,
PADDLE_ENFORCE_NE
(
Output
(
"
Sub
Out"
),
framework
::
kEmptyVarName
,
"Output(
Minus
Out) of InterpOp should not be null."
);
"Output(
Sub
Out) of InterpOp should not be null."
);
PADDLE_ENFORCE_NE
(
Output
(
"MulOut"
),
framework
::
kEmptyVarName
,
PADDLE_ENFORCE_NE
(
Output
(
"MulOut"
),
framework
::
kEmptyVarName
,
"Output(MulOut) of InterpOp should not be null."
);
"Output(MulOut) of InterpOp should not be null."
);
PADDLE_ENFORCE_NE
(
Output
(
"Out"
),
framework
::
kEmptyVarName
,
PADDLE_ENFORCE_NE
(
Output
(
"Out"
),
framework
::
kEmptyVarName
,
"Output(Out) of InterpOp should not be null."
);
"Output(Out) of InterpOp should not be null."
);
//
Minus
Out = X - Y
//
Sub
Out = X - Y
auto
x
=
Input
(
"X"
);
auto
x
=
Input
(
"X"
);
auto
y
=
Input
(
"Y"
);
auto
y
=
Input
(
"Y"
);
auto
minus_out
=
Output
(
"MinusOut"
);
auto
sub_out
=
Output
(
"SubOut"
);
AppendOp
(
framework
::
OpRegistry
::
CreateOp
(
"elementwise_sub"
,
AppendOp
(
framework
::
OpRegistry
::
CreateOp
(
{{
"X"
,
{
x
}},
{
"Y"
,
{
y
}}},
"elementwise_sub"
,
{{
"X"
,
{
x
}},
{
"Y"
,
{
y
}}},
{{
"Out"
,
{
sub_out
}}},
{}));
{{
"Out"
,
{
minus_out
}}},
{}));
// MulOut =
Minus
Out * W = (X - Y) * W
// MulOut =
Sub
Out * W = (X - Y) * W
auto
w
=
Input
(
"W"
);
auto
w
=
Input
(
"W"
);
auto
mul_out
=
Output
(
"MulOut"
);
auto
mul_out
=
Output
(
"MulOut"
);
AppendOp
(
framework
::
OpRegistry
::
CreateOp
(
AppendOp
(
framework
::
OpRegistry
::
CreateOp
(
"elementwise_mul"
,
{{
"X"
,
{
minus_out
}},
{
"Y"
,
{
w
}}},
"elementwise_mul"
,
{{
"X"
,
{
sub_out
}},
{
"Y"
,
{
w
}}},
{{
"Out"
,
{
mul_out
}}},
{{
"
Out"
,
{
mul_out
}}},
{{
"
axis"
,
0
}}));
{{
"axis"
,
0
}}));
// Out = MulOut + Y = (X - Y) * W + Y = X * W + Y * (1 - W)
// Out = MulOut + Y = (X - Y) * W + Y = X * W + Y * (1 - W)
AppendOp
(
framework
::
OpRegistry
::
CreateOp
(
"elementwise_add"
,
AppendOp
(
framework
::
OpRegistry
::
CreateOp
(
"elementwise_add"
,
...
@@ -65,18 +64,26 @@ class InterpOpMaker : public framework::OpProtoAndCheckerMaker {
...
@@ -65,18 +64,26 @@ class InterpOpMaker : public framework::OpProtoAndCheckerMaker {
public:
public:
InterpOpMaker
(
framework
::
OpProto
*
proto
,
framework
::
OpAttrChecker
*
op_checker
)
InterpOpMaker
(
framework
::
OpProto
*
proto
,
framework
::
OpAttrChecker
*
op_checker
)
:
OpProtoAndCheckerMaker
(
proto
,
op_checker
)
{
:
OpProtoAndCheckerMaker
(
proto
,
op_checker
)
{
AddInput
(
"X"
,
"A 2-D Tensor, the first input of interp_op"
);
AddInput
(
"X"
,
AddInput
(
"Y"
,
"A 2-D Tensor, the second input of interp_op"
);
"(Tensor), 2-D Matrix of shape [batch_size, data_dim]"
AddInput
(
"W"
,
"A 1-D Tensor, the interpolated values"
);
"containing data samples, the first input of interp_op"
);
AddOutput
(
"MinusOut"
,
AddInput
(
"Y"
,
"A 2-D Tensor, the intermediate outputs, saving X - Y."
)
"(Tensor), 2-D Matrix of shape `[batch_size, data_dim]`"
"containing data samples, the second input of interp_op"
);
AddInput
(
"W"
,
"(Tensor), 1-D Vector of shape [batch_size],"
"the interpolated values in the half-open interval [0.0, 1.0)"
);
AddOutput
(
"SubOut"
,
"(Tensor), the intermediate subtraction outputs, saving X - Y."
)
.
AsIntermediate
();
.
AsIntermediate
();
AddOutput
(
"MulOut"
,
AddOutput
(
"MulOut"
,
"
A 2-D Tensor, the intermediate
outputs,"
"
(Tensor), the intermediate multiplication
outputs,"
"saving the
mul mul of (X - Y) and W
"
)
"saving the
elementwise multiplication of (X - Y) and W.
"
)
.
AsIntermediate
();
.
AsIntermediate
();
AddOutput
(
"Out"
,
AddOutput
(
"Out"
,
"A 2-D Tensor, the output of interp_op, same shape with X"
);
"(Tensor), the output of interp_op, same shape with X,"
"returns the first-dimensional piecewise linear interpolant "
"between X and Y"
);
AddComment
(
R"DOC(
AddComment
(
R"DOC(
Linear Interpolation with two inputs, used in NEURAL TURING MACHINE.
Linear Interpolation with two inputs, used in NEURAL TURING MACHINE.
...
...
python/paddle/v2/framework/tests/test_interp_op.py
浏览文件 @
a06f099d
...
@@ -10,12 +10,12 @@ class TestInterpOp(OpTest):
...
@@ -10,12 +10,12 @@ class TestInterpOp(OpTest):
y
=
np
.
random
.
random
((
2
,
3
)).
astype
(
"float32"
)
y
=
np
.
random
.
random
((
2
,
3
)).
astype
(
"float32"
)
w
=
np
.
random
.
random
(
2
).
astype
(
"float32"
)
w
=
np
.
random
.
random
(
2
).
astype
(
"float32"
)
minus
_out
=
x
-
y
sub
_out
=
x
-
y
mul_out
=
minus
_out
*
w
.
reshape
(
2
,
1
)
mul_out
=
sub
_out
*
w
.
reshape
(
2
,
1
)
out
=
mul_out
+
y
out
=
mul_out
+
y
self
.
inputs
=
{
'X'
:
x
,
'Y'
:
y
,
'W'
:
w
}
self
.
inputs
=
{
'X'
:
x
,
'Y'
:
y
,
'W'
:
w
}
self
.
outputs
=
{
'Out'
:
out
,
'
MinusOut'
:
minus
_out
,
'MulOut'
:
mul_out
}
self
.
outputs
=
{
'Out'
:
out
,
'
SubOut'
:
sub
_out
,
'MulOut'
:
mul_out
}
def
test_check_output
(
self
):
def
test_check_output
(
self
):
self
.
check_output
()
self
.
check_output
()
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录