Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Oneflow-Inc
oneflow
提交
8edb7e5f
O
oneflow
项目概览
Oneflow-Inc
/
oneflow
上一次同步 接近 3 年
通知
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,发现更多精彩内容 >>
未验证
提交
8edb7e5f
编写于
11月 02, 2021
作者:
X
Xiaoyu Xu
提交者:
GitHub
11月 02, 2021
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'master' into fea/graph_op_debug
上级
7a4151e5
8b94ac9b
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
58 addition
and
53 deletion
+58
-53
oneflow/core/autograd/gradient_funcs/reshape.cpp
oneflow/core/autograd/gradient_funcs/reshape.cpp
+10
-5
oneflow/core/common/just.h
oneflow/core/common/just.h
+48
-48
未找到文件。
oneflow/core/autograd/gradient_funcs/reshape.cpp
浏览文件 @
8edb7e5f
...
...
@@ -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
();
}
};
...
...
oneflow/core/common/just.h
浏览文件 @
8edb7e5f
...
...
@@ -90,62 +90,62 @@ typename std::remove_const<typename std::remove_reference<T>::type>::type&& Remo
#if defined(__GNUC__) || defined(__CUDACC__) || defined(__clang__)
#define JUST(...) \
::oneflow::private_details::RemoveRValConst(({ \
auto&& value_to_check_ = __JustStackCheckWrapper__(__VA_ARGS__); \
if (!::oneflow::private_details::JustIsOk(value_to_check_)) { \
return ::oneflow::private_details::JustErrorAddStackFrame( \
::oneflow::private_details::JustGetError(value_to_check_), __FILE__, __LINE__, \
__FUNCTION__, OF_PP_STRINGIZE(__VA_ARGS__)); \
} \
std::forward<decltype(
value_to_check_)>(value_to_check_);
\
#define JUST(...)
\
::oneflow::private_details::RemoveRValConst(({
\
auto&&
_just_
value_to_check_ = __JustStackCheckWrapper__(__VA_ARGS__); \
if (!::oneflow::private_details::JustIsOk(
_just_
value_to_check_)) { \
return ::oneflow::private_details::JustErrorAddStackFrame(
\
::oneflow::private_details::JustGetError(
_just_
value_to_check_), __FILE__, __LINE__, \
__FUNCTION__, OF_PP_STRINGIZE(__VA_ARGS__));
\
}
\
std::forward<decltype(
_just_value_to_check_)>(_just_value_to_check_);
\
})).Data_YouAreNotAllowedToCallThisFuncOutsideThisFile()
#define CHECK_JUST(...) \
([&](const char*
func_name) {
\
auto&& value_to_check_ = __JustStackCheckWrapper__(__VA_ARGS__); \
if (!::oneflow::private_details::JustIsOk(value_to_check_)) { \
LOG(FATAL) << ::oneflow::GetFormatedSerializedError( \
::oneflow::private_details::JustErrorAddStackFrame( \
::oneflow::private_details::JustGetError(value_to_check_), __FILE__, __LINE__, \
func_name, OF_PP_STRINGIZE(__VA_ARGS__)));
\
} \
return std::forward<decltype(
value_to_check_)>(value_to_check_);
\
})(__FUNCTION__) \
#define CHECK_JUST(...)
\
([&](const char*
_just_closure_func_name_) {
\
auto&&
_just_
value_to_check_ = __JustStackCheckWrapper__(__VA_ARGS__); \
if (!::oneflow::private_details::JustIsOk(
_just_
value_to_check_)) { \
LOG(FATAL) << ::oneflow::GetFormatedSerializedError(
\
::oneflow::private_details::JustErrorAddStackFrame(
\
::oneflow::private_details::JustGetError(
_just_
value_to_check_), __FILE__, __LINE__, \
_just_closure_func_name_, OF_PP_STRINGIZE(__VA_ARGS__)));
\
}
\
return std::forward<decltype(
_just_value_to_check_)>(_just_value_to_check_);
\
})(__FUNCTION__)
\
.Data_YouAreNotAllowedToCallThisFuncOutsideThisFile()
#define JUST_MSG(value, ...) \
::oneflow::private_details::RemoveRValConst(({ \
auto&& value_to_check_ = (value); \
if (!::oneflow::private_details::JustIsOk(value_to_check_)) { \
return ::oneflow::private_details::JustErrorAddMessage( \
::oneflow::Error(::oneflow::private_details::JustGetError(value_to_check_)) \
.AddStackFrame(__FILE__, __LINE__, __FUNCTION__), \
OF_PP_STRINGIZE(value), ": ", __VA_ARGS__); \
} \
std::forward<decltype(
value_to_check_)>(value_to_check_);
\
#define JUST_MSG(value, ...)
\
::oneflow::private_details::RemoveRValConst(({
\
auto&&
_just_
value_to_check_ = (value); \
if (!::oneflow::private_details::JustIsOk(
_just_
value_to_check_)) { \
return ::oneflow::private_details::JustErrorAddMessage(
\
::oneflow::Error(::oneflow::private_details::JustGetError(
_just_
value_to_check_)) \
.AddStackFrame(__FILE__, __LINE__, __FUNCTION__),
\
OF_PP_STRINGIZE(value), ": ", __VA_ARGS__);
\
}
\
std::forward<decltype(
_just_value_to_check_)>(_just_value_to_check_);
\
})).Data_YouAreNotAllowedToCallThisFuncOutsideThisFile()
#define CHECK_JUST_MSG(value, ...) \
([&](const char*
func_name) {
\
auto&& value_to_check_ = (value); \
if (!::oneflow::private_details::JustIsOk(value_to_check_)) { \
LOG(FATAL) << ::oneflow::GetFormatedSerializedError( \
::oneflow::private_details::JustErrorAddMessage( \
::oneflow::Error(::oneflow::private_details::JustGetError(value_to_check_)) \
.AddStackFrame(__FILE__, __LINE__,
func_name),
\
OF_PP_STRINGIZE(value), ": ", __VA_ARGS__) \
.error_proto()); \
} \
return std::forward<decltype(
value_to_check_)>(value_to_check_);
\
})(__FUNCTION__) \
#define CHECK_JUST_MSG(value, ...)
\
([&](const char*
_just_closure_func_name_) {
\
auto&&
_just_
value_to_check_ = (value); \
if (!::oneflow::private_details::JustIsOk(
_just_
value_to_check_)) { \
LOG(FATAL) << ::oneflow::GetFormatedSerializedError(
\
::oneflow::private_details::JustErrorAddMessage(
\
::oneflow::Error(::oneflow::private_details::JustGetError(
_just_
value_to_check_)) \
.AddStackFrame(__FILE__, __LINE__,
_just_closure_func_name_),
\
OF_PP_STRINGIZE(value), ": ", __VA_ARGS__)
\
.error_proto());
\
}
\
return std::forward<decltype(
_just_value_to_check_)>(_just_value_to_check_);
\
})(__FUNCTION__)
\
.Data_YouAreNotAllowedToCallThisFuncOutsideThisFile()
#define JUST_OPT(...) \
::oneflow::private_details::RemoveRValConst(({ \
auto&& value_to_check_ = __JustStackCheckWrapper__(__VA_ARGS__); \
if (!value_to_check_.has_value()) { return NullOpt; } \
std::forward<decltype(
value_to_check_)>(value_to_check_);
\
#define JUST_OPT(...)
\
::oneflow::private_details::RemoveRValConst(({
\
auto&&
_just_
value_to_check_ = __JustStackCheckWrapper__(__VA_ARGS__); \
if (!
_just_
value_to_check_.has_value()) { return NullOpt; } \
std::forward<decltype(
_just_value_to_check_)>(_just_value_to_check_);
\
})).Data_YouAreNotAllowedToCallThisFuncOutsideThisFile()
#else
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录