Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Oneflow-Inc
oneflow
提交
8b94ac9b
O
oneflow
项目概览
Oneflow-Inc
/
oneflow
上一次同步 2 年多
通知
13
Star
2733
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
O
oneflow
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
未验证
提交
8b94ac9b
编写于
11月 02, 2021
作者:
L
Luyang
提交者:
GitHub
11月 02, 2021
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
restruct reshape gradient funcs (#6634)
* restruct * refine
上级
21caffd9
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
10 addition
and
5 deletion
+10
-5
oneflow/core/autograd/gradient_funcs/reshape.cpp
oneflow/core/autograd/gradient_funcs/reshape.cpp
+10
-5
未找到文件。
oneflow/core/autograd/gradient_funcs/reshape.cpp
浏览文件 @
8b94ac9b
...
...
@@ -24,7 +24,11 @@ limitations under the License.
namespace
oneflow
{
namespace
one
{
class
ReshapeOpExprGrad
:
public
OpExprGradFunction
<
AutoGradCaptureState
>
{
struct
ReshapeCaptureState
:
public
AutoGradCaptureState
{
DimVector
input_shape_vec
;
};
class
ReshapeOpExprGrad
:
public
OpExprGradFunction
<
ReshapeCaptureState
>
{
public:
Maybe
<
void
>
Init
(
const
OpExpr
&
op
)
override
{
const
auto
*
fw_op_expr
=
dynamic_cast
<
const
UserOpExpr
*>
(
&
op
);
...
...
@@ -32,17 +36,18 @@ class ReshapeOpExprGrad : public OpExprGradFunction<AutoGradCaptureState> {
return
Maybe
<
void
>::
Ok
();
}
Maybe
<
void
>
Capture
(
AutoGrad
CaptureState
*
ctx
,
const
TensorTuple
&
inputs
,
Maybe
<
void
>
Capture
(
Reshape
CaptureState
*
ctx
,
const
TensorTuple
&
inputs
,
const
TensorTuple
&
outputs
,
const
AttrMap
&
attrs
)
const
override
{
ctx
->
SaveTensorForBackward
(
inputs
.
at
(
0
)
);
ctx
->
input_shape_vec
=
inputs
.
at
(
0
)
->
shape
()
->
dim_vec
(
);
return
Maybe
<
void
>::
Ok
();
}
Maybe
<
void
>
Apply
(
const
AutoGrad
CaptureState
*
ctx
,
const
TensorTuple
&
out_grads
,
Maybe
<
void
>
Apply
(
const
Reshape
CaptureState
*
ctx
,
const
TensorTuple
&
out_grads
,
TensorTuple
*
in_grads
)
const
override
{
const
auto
&
saved_tensors
=
ctx
->
SavedTensors
();
in_grads
->
resize
(
1
);
in_grads
->
at
(
0
)
=
JUST
(
functional
::
ReshapeLike
(
out_grads
.
at
(
0
),
saved_tensors
.
at
(
0
)));
Shape
shape
(
ctx
->
input_shape_vec
);
in_grads
->
at
(
0
)
=
JUST
(
functional
::
Reshape
(
out_grads
.
at
(
0
),
shape
));
return
Maybe
<
void
>::
Ok
();
}
};
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录