Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Crayon鑫
Paddle
提交
c0a76c40
P
Paddle
项目概览
Crayon鑫
/
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看板
提交
c0a76c40
编写于
10月 04, 2017
作者:
Y
Yi Wang
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'develop' of
https://github.com/paddlepaddle/paddle
into paddle_only_cpu
上级
5f51d0af
eed2c1e1
变更
3
显示空白变更内容
内联
并排
Showing
3 changed file
with
22 addition
and
22 deletion
+22
-22
paddle/operators/sgd_op.cc
paddle/operators/sgd_op.cc
+16
-16
paddle/operators/sgd_op.h
paddle/operators/sgd_op.h
+4
-4
python/paddle/v2/framework/tests/test_sgd_op.py
python/paddle/v2/framework/tests/test_sgd_op.py
+2
-2
未找到文件。
paddle/operators/sgd_op.cc
浏览文件 @
c0a76c40
...
...
@@ -23,22 +23,22 @@ class SGDOp : public framework::OperatorWithKernel {
protected:
void
InferShape
(
framework
::
InferShapeContextBase
*
ctx
)
const
override
{
PADDLE_ENFORCE
(
ctx
->
HasInput
(
"
p
aram"
),
"Input(
p
aram) of SGDOp should not be null."
);
PADDLE_ENFORCE
(
ctx
->
HasInput
(
"
g
rad"
),
"Input(
g
rad) of SGDOp should not be null."
);
PADDLE_ENFORCE
(
ctx
->
HasInput
(
"
learning_r
ate"
),
"Input(
learning_r
ate) of SGDOp should not be null."
);
PADDLE_ENFORCE
(
ctx
->
HasOutput
(
"
param_o
ut"
),
"Output(
param_o
ut) of SGDOp should not be null."
);
PADDLE_ENFORCE
(
ctx
->
HasInput
(
"
P
aram"
),
"Input(
P
aram) of SGDOp should not be null."
);
PADDLE_ENFORCE
(
ctx
->
HasInput
(
"
G
rad"
),
"Input(
G
rad) of SGDOp should not be null."
);
PADDLE_ENFORCE
(
ctx
->
HasInput
(
"
LearningR
ate"
),
"Input(
LearningR
ate) of SGDOp should not be null."
);
PADDLE_ENFORCE
(
ctx
->
HasOutput
(
"
ParamO
ut"
),
"Output(
ParamO
ut) of SGDOp should not be null."
);
auto
lr_dims
=
ctx
->
GetInputDim
(
"
learning_r
ate"
);
auto
lr_dims
=
ctx
->
GetInputDim
(
"
LearningR
ate"
);
PADDLE_ENFORCE_EQ
(
framework
::
product
(
lr_dims
),
1
,
"Learning rate should have 1 element"
);
auto
param_dim
=
ctx
->
GetInputDim
(
"
p
aram"
);
PADDLE_ENFORCE_EQ
(
param_dim
,
ctx
->
GetInputDim
(
"
g
rad"
),
auto
param_dim
=
ctx
->
GetInputDim
(
"
P
aram"
);
PADDLE_ENFORCE_EQ
(
param_dim
,
ctx
->
GetInputDim
(
"
G
rad"
),
"Two input of SGD Op's dimension must be same."
);
ctx
->
SetOutputDim
(
"
param_o
ut"
,
param_dim
);
ctx
->
SetOutputDim
(
"
ParamO
ut"
,
param_dim
);
}
};
...
...
@@ -46,10 +46,10 @@ class SGDOpMaker : public framework::OpProtoAndCheckerMaker {
public:
SGDOpMaker
(
framework
::
OpProto
*
proto
,
framework
::
OpAttrChecker
*
op_checker
)
:
OpProtoAndCheckerMaker
(
proto
,
op_checker
)
{
AddInput
(
"
param"
,
"i
nput parameter"
);
AddInput
(
"
learning_rate"
,
"learning rate of sgd
"
);
AddInput
(
"
grad"
,
"i
nput gradient"
);
AddOutput
(
"
param_o
ut"
,
"output parameter"
);
AddInput
(
"
Param"
,
"I
nput parameter"
);
AddInput
(
"
LearningRate"
,
"Learning rate of SGD
"
);
AddInput
(
"
Grad"
,
"I
nput gradient"
);
AddOutput
(
"
ParamO
ut"
,
"output parameter"
);
AddComment
(
R"DOC(
Simplest sgd algorithm.
...
...
paddle/operators/sgd_op.h
浏览文件 @
c0a76c40
...
...
@@ -28,10 +28,10 @@ template <typename Place, typename T>
class
SGDOpKernel
:
public
framework
::
OpKernel
<
T
>
{
public:
void
Compute
(
const
framework
::
ExecutionContext
&
ctx
)
const
override
{
auto
param
=
ctx
.
Input
<
Tensor
>
(
"
p
aram"
);
auto
grad
=
ctx
.
Input
<
Tensor
>
(
"
g
rad"
);
auto
param_out
=
ctx
.
Output
<
Tensor
>
(
"
param_o
ut"
);
float
lr
=
ctx
.
Input
<
Tensor
>
(
"
learning_r
ate"
)
->
data
<
float
>
()[
0
];
auto
param
=
ctx
.
Input
<
Tensor
>
(
"
P
aram"
);
auto
grad
=
ctx
.
Input
<
Tensor
>
(
"
G
rad"
);
auto
param_out
=
ctx
.
Output
<
Tensor
>
(
"
ParamO
ut"
);
float
lr
=
ctx
.
Input
<
Tensor
>
(
"
LearningR
ate"
)
->
data
<
float
>
()[
0
];
param_out
->
mutable_data
<
T
>
(
ctx
.
GetPlace
());
...
...
python/paddle/v2/framework/tests/test_sgd_op.py
浏览文件 @
c0a76c40
...
...
@@ -10,8 +10,8 @@ class TestSGDOp(OpTest):
g
=
np
.
random
.
random
((
102
,
105
)).
astype
(
"float32"
)
lr
=
np
.
array
([
0.1
]).
astype
(
"float32"
)
self
.
inputs
=
{
'
param'
:
w
,
'grad'
:
g
,
'learning_r
ate'
:
lr
}
self
.
outputs
=
{
'
param_o
ut'
:
w
-
lr
*
g
}
self
.
inputs
=
{
'
Param'
:
w
,
'Grad'
:
g
,
'LearningR
ate'
:
lr
}
self
.
outputs
=
{
'
ParamO
ut'
:
w
-
lr
*
g
}
def
test_check_output
(
self
):
self
.
check_output
()
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录