Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
s920243400
PaddleDetection
提交
bb546cf1
P
PaddleDetection
项目概览
s920243400
/
PaddleDetection
与 Fork 源项目一致
Fork自
PaddlePaddle / PaddleDetection
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
PaddleDetection
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
bb546cf1
编写于
9月 21, 2017
作者:
H
hedaoyuan
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Bug fix.
上级
659f2f71
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
9 addition
and
13 deletion
+9
-13
paddle/operators/gemm_conv2d_op.h
paddle/operators/gemm_conv2d_op.h
+9
-13
未找到文件。
paddle/operators/gemm_conv2d_op.h
浏览文件 @
bb546cf1
...
...
@@ -75,8 +75,6 @@ class GemmConv2DKernel : public framework::OpKernel {
framework
::
DDim
output_matrix_shape
=
{
output_channels
,
output_height
*
output_width
};
auto
device_context
=
context
.
device_context
();
// convolution operator: im2col + gemm
int
in_step
=
input_channels
/
groups
;
int
out_step
=
output_channels
/
groups
;
...
...
@@ -87,13 +85,13 @@ class GemmConv2DKernel : public framework::OpKernel {
// im2col
Tensor
in_slice
=
in_batch
.
Slice
<
T
>
(
g
*
in_step
,
(
g
+
1
)
*
in_step
);
im2col
(
in_slice
,
col
,
strides
[
0
],
strides
[
1
],
paddings
[
0
],
paddings
[
1
],
device_context
);
context
.
device_context
()
);
// gemm
Tensor
out_slice
=
out_batch
.
Slice
<
T
>
(
g
*
out_step
,
(
g
+
1
)
*
out_step
);
Tensor
filter_slice
=
filter
.
Slice
<
T
>
(
g
*
out_step
,
(
g
+
1
)
*
out_step
);
math
::
matmul
<
Place
,
T
>
(
device_context
,
filter_slice
,
false
,
col_matrix
,
false
,
T
(
1.0
),
&
out_slice
,
T
(
0.0
));
math
::
matmul
<
Place
,
T
>
(
context
.
device_context
(),
filter_slice
,
false
,
col_matrix
,
false
,
T
(
1.0
),
&
out_slice
,
T
(
0.0
));
}
}
}
...
...
@@ -159,8 +157,6 @@ class GemmConvGrad2DKernel : public framework::OpKernel {
filter
.
numel
()
/
filter
.
dims
()[
0
]};
filter
.
Resize
(
filter_matrix_shape
);
auto
device_context
=
context
.
device_context
();
// convolution backward input operator: gemm + col2im
// convolution backward weight operator: im2col + gemm
int
in_step
=
input_channels
/
groups
;
...
...
@@ -182,7 +178,7 @@ class GemmConvGrad2DKernel : public framework::OpKernel {
out_grad_batch
.
Slice
<
T
>
(
g
*
out_step
,
(
g
+
1
)
*
out_step
);
Tensor
filter_slice
=
filter
.
Slice
<
T
>
(
g
*
out_step
,
(
g
+
1
)
*
out_step
);
math
::
matmul
<
Place
,
T
>
(
device_context
,
filter_slice
,
true
,
math
::
matmul
<
Place
,
T
>
(
context
.
device_context
()
,
filter_slice
,
true
,
out_grad_slice
,
false
,
T
(
1.0
),
&
col_matrix
,
T
(
0.0
));
...
...
@@ -190,7 +186,7 @@ class GemmConvGrad2DKernel : public framework::OpKernel {
Tensor
in_grad_slice
=
in_grad_batch
.
Slice
<
T
>
(
g
*
in_step
,
(
g
+
1
)
*
in_step
);
col2im
(
in_grad_slice
,
col
,
strides
[
0
],
strides
[
1
],
paddings
[
0
],
paddings
[
1
],
device_context
);
paddings
[
1
],
context
.
device_context
()
);
}
}
}
...
...
@@ -212,14 +208,14 @@ class GemmConvGrad2DKernel : public framework::OpKernel {
out_grad_batch
.
Slice
<
T
>
(
g
*
out_step
,
(
g
+
1
)
*
out_step
);
Tensor
in_slice
=
in_batch
.
Slice
<
T
>
(
g
*
in_step
,
(
g
+
1
)
*
in_step
);
im2col
(
in_slice
,
col
,
strides
[
0
],
strides
[
1
],
paddings
[
0
],
paddings
[
1
],
device_context
);
paddings
[
1
],
context
.
device_context
()
);
// gemm
Tensor
filter_grad_slice
=
filter_grad_
.
Slice
<
T
>
(
g
*
out_step
,
(
g
+
1
)
*
out_step
);
math
::
matmul
<
Place
,
T
>
(
device_context
,
out_grad_slice
,
fals
e
,
col_matrix
,
true
,
T
(
1.0
),
&
filter_grad_slice
,
T
(
1.0
));
math
::
matmul
<
Place
,
T
>
(
context
.
device_context
(),
out_grad_slic
e
,
false
,
col_matrix
,
true
,
T
(
1.0
)
,
&
filter_grad_slice
,
T
(
1.0
));
}
}
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录