提交 b4ba35ca 编写于 作者: H hedaoyuan

Add groups test.

上级 1dd639eb
...@@ -15,43 +15,53 @@ class TestConv2dOp(OpTest): ...@@ -15,43 +15,53 @@ class TestConv2dOp(OpTest):
filter_width = 3 filter_width = 3
stride = 1 stride = 1
padding = 0 padding = 0
groups = 3
output_height = (input_height - filter_height + 2 * padding output_height = (input_height - filter_height + 2 * padding
) / stride + 1 ) / stride + 1
output_width = (input_width - filter_width + 2 * padding) / stride + 1 output_width = (input_width - filter_width + 2 * padding) / stride + 1
input = np.random.random((batch_size, input_channels, input_height, input = np.random.random((batch_size, input_channels, input_height,
input_width)).astype("float32") input_width)).astype("float32")
filter = np.random.random( filter = np.random.random(
(output_channels, input_channels, filter_height, (output_channels, input_channels / groups, filter_height,
filter_width)).astype("float32") filter_width)).astype("float32")
output = np.ndarray( output = np.ndarray(
(batch_size, output_channels, output_height, output_width)) (batch_size, output_channels, output_height, output_width))
self.inputs = {'Input': input, 'Filter': filter} self.inputs = {'Input': input, 'Filter': filter}
self.attrs = {'strides': [1, 1], 'paddings': [0, 0]} self.attrs = {'strides': [1, 1], 'paddings': [0, 0], 'groups': groups}
output_group_channels = output_channels / groups
input_group_channels = input_channels / groups
for batchid in xrange(batch_size): for batchid in xrange(batch_size):
for channelid in xrange(output_channels): for group in xrange(groups):
for rowid in xrange(output_height): for outchannelid in range(group * output_group_channels,
for colid in xrange(output_width): (group + 1) * output_group_channels):
start_h = (rowid * stride) - padding for rowid in xrange(output_height):
start_w = (colid * stride) - padding for colid in xrange(output_width):
output_value = 0.0 start_h = (rowid * stride) - padding
for inchannelid in xrange(input_channels): start_w = (colid * stride) - padding
for frowid in xrange(filter_height): output_value = 0.0
for fcolid in xrange(filter_width): for inchannelid in range(
input_value = 0.0 group * input_group_channels,
inrowid = start_h + frowid (group + 1) * input_group_channels):
incolid = start_w + fcolid for frowid in xrange(filter_height):
if ((inrowid >= 0 and for fcolid in xrange(filter_width):
inrowid < input_height) and input_value = 0.0
(incolid >= 0 and inrowid = start_h + frowid
incolid < input_width)): incolid = start_w + fcolid
input_value = input[batchid][ if ((inrowid >= 0 and
inchannelid][inrowid][incolid] inrowid < input_height) and
filter_value = filter[channelid][ (incolid >= 0 and
inchannelid][frowid][fcolid] incolid < input_width)):
output_value += input_value * filter_value input_value = input[batchid][
output[batchid][channelid][rowid][colid] = output_value inchannelid][inrowid][incolid]
filter_value = filter[outchannelid][
inchannelid % input_group_channels][
frowid][fcolid]
output_value += input_value * filter_value
output[batchid][outchannelid][rowid][
colid] = output_value
self.outputs = {'Output': output} self.outputs = {'Output': output}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册