From a61af846c1ad5533268fcadcb9e4c67b8b239070 Mon Sep 17 00:00:00 2001 From: wangpeng54 Date: Fri, 21 Apr 2017 15:15:45 -0700 Subject: [PATCH 1/9] wrap for resize layer --- .../paddle/trainer_config_helpers/layers.py | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/python/paddle/trainer_config_helpers/layers.py b/python/paddle/trainer_config_helpers/layers.py index f906126d87941..5297c816f6ad0 100755 --- a/python/paddle/trainer_config_helpers/layers.py +++ b/python/paddle/trainer_config_helpers/layers.py @@ -75,6 +75,7 @@ 'bilinear_interp_layer', 'trans_layer', 'rotate_layer', + 'resize_layer', 'sum_to_one_norm_layer', 'get_output_layer', 'LayerType', @@ -165,6 +166,7 @@ class LayerType(object): SCALING_LAYER = 'scaling' TRANS_LAYER = 'trans' ROTATE_LAYER = 'rotate' + RESIZE_LAYER = 'resize' OUT_PROD_LAYER = 'out_prod' FEATURE_MAP_EXPAND_LAYER = 'featmap_expand' @@ -1875,6 +1877,39 @@ def rotate_layer(input, height, width, name=None, layer_attr=None): size=l.config.size) +@wrap_name_default() +@layer_support() +def resize_layer(input, size, name=None, layer_attr=None): + """ + A layer for resize a minibatch matrix from (input_batch_num x input_size) + to (output_batch_num x size). The output_batch_num will be reset to + (( input_batch_num x input_size ) / size). + + The example usage is: + + .. code-block:: python + + resize = resize_layer(input=layer, size=size) + + :param input: Input layer. + :type input: LayerOutput + :size: The size of each output item in the minibatch. + :param name: Layer name. + :type name: basestring + :param layer_attr: extra layer attributes. + :type layer_attr: ExtraLayerAttribute + :return: LayerOutput object. + :rtype: LayerOutput + """ + Layer( + name=name, + type=LayerType.RESIZE_LAYER, + size=size, + inputs=[input.name], + **ExtraAttr.to_kwargs(layer_attr)) + return LayerOutput(name, LayerType.RESIZE_LAYER, parents=[input], size=size) + + @wrap_name_default() @layer_support() def cos_sim(a, b, scale=1, size=1, name=None, layer_attr=None): From e6745f92d3ddbf7b9e288878a70d32cbd7ab7bc7 Mon Sep 17 00:00:00 2001 From: wangpeng54 Date: Mon, 8 May 2017 11:45:46 -0700 Subject: [PATCH 2/9] add test for resize --- doc/api/v2/config/layer.rst | 5 ++++ .../tests/configs/file_list.sh | 2 +- .../configs/protostr/test_resize.protostr | 28 +++++++++++++++++++ .../tests/configs/test_resize_layer.py | 7 +++++ 4 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 python/paddle/trainer_config_helpers/tests/configs/protostr/test_resize.protostr create mode 100644 python/paddle/trainer_config_helpers/tests/configs/test_resize_layer.py diff --git a/doc/api/v2/config/layer.rst b/doc/api/v2/config/layer.rst index 154cfe24432f3..0961be3c64085 100644 --- a/doc/api/v2/config/layer.rst +++ b/doc/api/v2/config/layer.rst @@ -268,6 +268,11 @@ seq_reshape .. autoclass:: paddle.v2.layer.seq_reshape :noindex: +resize +----------- +.. autoclass:: paddle.v2.layer.resize + :noindex: + Math Layers =========== diff --git a/python/paddle/trainer_config_helpers/tests/configs/file_list.sh b/python/paddle/trainer_config_helpers/tests/configs/file_list.sh index c5dc8e1aab08d..27b82fe5df266 100755 --- a/python/paddle/trainer_config_helpers/tests/configs/file_list.sh +++ b/python/paddle/trainer_config_helpers/tests/configs/file_list.sh @@ -5,6 +5,6 @@ last_first_seq test_expand_layer test_ntm_layers test_hsigmoid img_layers img_trans_layers util_layers simple_rnn_layers unused_layers test_cost_layers test_rnn_group shared_fc shared_lstm shared_gru test_cost_layers_with_weight test_spp_layer test_bilinear_interp test_maxout test_bi_grumemory math_ops -test_seq_concat_reshape test_pad test_smooth_l1) +test_seq_concat_reshape test_pad test_smooth_l1 test_resize) export whole_configs=(test_split_datasource) diff --git a/python/paddle/trainer_config_helpers/tests/configs/protostr/test_resize.protostr b/python/paddle/trainer_config_helpers/tests/configs/protostr/test_resize.protostr new file mode 100644 index 0000000000000..8eb7d9dca133b --- /dev/null +++ b/python/paddle/trainer_config_helpers/tests/configs/protostr/test_resize.protostr @@ -0,0 +1,28 @@ +type: "nn" +layers { + name: "input" + type: "data" + size: 300 + active_type: "" + height: 100 + width: 3 +} +layers { + name: "__resize_0__" + type: "resize" + size: 100 + active_type: "" + inputs { + input_layer_name: "input" + } +} +input_layer_names: "input" +output_layer_names: "__resize_0__" +sub_models { + name: "root" + layer_names: "input" + layer_names: "__resize_0__" + input_layer_names: "input" + output_layer_names: "__resize_0__" + is_recurrent_layer_group: false +} diff --git a/python/paddle/trainer_config_helpers/tests/configs/test_resize_layer.py b/python/paddle/trainer_config_helpers/tests/configs/test_resize_layer.py new file mode 100644 index 0000000000000..dfa32b9bb4bf7 --- /dev/null +++ b/python/paddle/trainer_config_helpers/tests/configs/test_resize_layer.py @@ -0,0 +1,7 @@ +from paddle.trainer_config_helpers import * + +data = data_layer(name='input', size=300, height=100, width=3) + +resize = resize_layer(input=data, size=100) + +outputs(resize) \ No newline at end of file From 60735c4baac8843cc11c4a68baad715ed21f6e90 Mon Sep 17 00:00:00 2001 From: wangpeng54 Date: Sat, 13 May 2017 18:29:16 -0700 Subject: [PATCH 3/9] python test --- .../configs/test_config_parser_for_non_file_config.py | 7 +++++-- .../trainer_config_helpers/tests/configs/test_resize.py | 8 ++++++++ 2 files changed, 13 insertions(+), 2 deletions(-) create mode 100644 python/paddle/trainer_config_helpers/tests/configs/test_resize.py diff --git a/python/paddle/trainer_config_helpers/tests/configs/test_config_parser_for_non_file_config.py b/python/paddle/trainer_config_helpers/tests/configs/test_config_parser_for_non_file_config.py index 9b791a0222dd6..fa71c4c7e9f36 100644 --- a/python/paddle/trainer_config_helpers/tests/configs/test_config_parser_for_non_file_config.py +++ b/python/paddle/trainer_config_helpers/tests/configs/test_config_parser_for_non_file_config.py @@ -17,6 +17,8 @@ import re import getopt +from paddle.trainer.config_parser import * + def main(print_whole_config, globals, locals): ''' @@ -34,10 +36,11 @@ def main(print_whole_config, globals, locals): cmdstr = cmdstr + importstr + """def configs():\n""" + functionstr #cmdstr = cmdstr + """def configs():\n""" + importstr + functionstr + if print_whole_config: - cmdstr = cmdstr + """print parse_config(configs, "")""" + cmdstr = cmdstr + """\nprint parse_config(configs, "")""" else: - cmdstr = cmdstr + """print parse_config(configs, "").model_config""" + cmdstr = cmdstr + """\nprint parse_config(configs, "").model_config""" exec (cmdstr, globals, locals) diff --git a/python/paddle/trainer_config_helpers/tests/configs/test_resize.py b/python/paddle/trainer_config_helpers/tests/configs/test_resize.py new file mode 100644 index 0000000000000..1b82931110d02 --- /dev/null +++ b/python/paddle/trainer_config_helpers/tests/configs/test_resize.py @@ -0,0 +1,8 @@ +from paddle.trainer_config_helpers import * + +settings(batch_size=1) + +data = data_layer(name='input', size=300, height=100, width=3) +resize = resize_layer(input=data, size=100) + +outputs(resize) From 75cd91cc64b847b6fa5f244bb244871406156830 Mon Sep 17 00:00:00 2001 From: wangpeng54 Date: Fri, 2 Jun 2017 15:24:24 -0700 Subject: [PATCH 4/9] change test helper layer name " --- .../tests/configs/protostr/test_resize.protostr | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/python/paddle/trainer_config_helpers/tests/configs/protostr/test_resize.protostr b/python/paddle/trainer_config_helpers/tests/configs/protostr/test_resize.protostr index 8eb7d9dca133b..61645eef4450a 100644 --- a/python/paddle/trainer_config_helpers/tests/configs/protostr/test_resize.protostr +++ b/python/paddle/trainer_config_helpers/tests/configs/protostr/test_resize.protostr @@ -8,7 +8,7 @@ layers { width: 3 } layers { - name: "__resize_0__" + name: "__resize_layer_0__" type: "resize" size: 100 active_type: "" @@ -17,12 +17,12 @@ layers { } } input_layer_names: "input" -output_layer_names: "__resize_0__" +output_layer_names: "__resize_layer_0__" sub_models { name: "root" layer_names: "input" - layer_names: "__resize_0__" + layer_names: "__resize_layer_0__" input_layer_names: "input" - output_layer_names: "__resize_0__" + output_layer_names: "__resize_layer_0__" is_recurrent_layer_group: false } From 6d74b9f0f3fe7d684a0c01de4a56d5dc485e1d65 Mon Sep 17 00:00:00 2001 From: wangpeng54 Date: Fri, 2 Jun 2017 15:43:47 -0700 Subject: [PATCH 5/9] fix hook --- .../tests/configs/test_config_parser_for_non_file_config.py | 6 ++---- .../trainer_config_helpers/tests/configs/test_resize.py | 1 + 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/python/paddle/trainer_config_helpers/tests/configs/test_config_parser_for_non_file_config.py b/python/paddle/trainer_config_helpers/tests/configs/test_config_parser_for_non_file_config.py index fa71c4c7e9f36..967bc46543837 100644 --- a/python/paddle/trainer_config_helpers/tests/configs/test_config_parser_for_non_file_config.py +++ b/python/paddle/trainer_config_helpers/tests/configs/test_config_parser_for_non_file_config.py @@ -19,7 +19,6 @@ from paddle.trainer.config_parser import * - def main(print_whole_config, globals, locals): ''' this test will all test_config.py @@ -35,12 +34,11 @@ def main(print_whole_config, globals, locals): functionstr = functionstr + " " + line cmdstr = cmdstr + importstr + """def configs():\n""" + functionstr - #cmdstr = cmdstr + """def configs():\n""" + importstr + functionstr if print_whole_config: - cmdstr = cmdstr + """\nprint parse_config(configs, "")""" + cmdstr = cmdstr + """print parse_config(configs, "")""" else: - cmdstr = cmdstr + """\nprint parse_config(configs, "").model_config""" + cmdstr = cmdstr + """print parse_config(configs, "").model_config""" exec (cmdstr, globals, locals) diff --git a/python/paddle/trainer_config_helpers/tests/configs/test_resize.py b/python/paddle/trainer_config_helpers/tests/configs/test_resize.py index 1b82931110d02..d3fbd10b825cd 100644 --- a/python/paddle/trainer_config_helpers/tests/configs/test_resize.py +++ b/python/paddle/trainer_config_helpers/tests/configs/test_resize.py @@ -6,3 +6,4 @@ resize = resize_layer(input=data, size=100) outputs(resize) + From 32feb590c2583a43423734210005cea257c73c0c Mon Sep 17 00:00:00 2001 From: wangpeng54 Date: Fri, 2 Jun 2017 16:32:15 -0700 Subject: [PATCH 6/9] add enter --- .../trainer_config_helpers/tests/configs/test_resize_layer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/paddle/trainer_config_helpers/tests/configs/test_resize_layer.py b/python/paddle/trainer_config_helpers/tests/configs/test_resize_layer.py index dfa32b9bb4bf7..943cf9b0ba8c4 100644 --- a/python/paddle/trainer_config_helpers/tests/configs/test_resize_layer.py +++ b/python/paddle/trainer_config_helpers/tests/configs/test_resize_layer.py @@ -4,4 +4,4 @@ resize = resize_layer(input=data, size=100) -outputs(resize) \ No newline at end of file +outputs(resize) From 38d121d2c8438bd190bad3f3253f6947f2848173 Mon Sep 17 00:00:00 2001 From: wangpeng54 Date: Fri, 2 Jun 2017 16:44:00 -0700 Subject: [PATCH 7/9] fix pre commit --- .../tests/configs/test_config_parser_for_non_file_config.py | 3 ++- .../paddle/trainer_config_helpers/tests/configs/test_resize.py | 1 - 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/python/paddle/trainer_config_helpers/tests/configs/test_config_parser_for_non_file_config.py b/python/paddle/trainer_config_helpers/tests/configs/test_config_parser_for_non_file_config.py index 967bc46543837..26ecc1cb10649 100644 --- a/python/paddle/trainer_config_helpers/tests/configs/test_config_parser_for_non_file_config.py +++ b/python/paddle/trainer_config_helpers/tests/configs/test_config_parser_for_non_file_config.py @@ -19,6 +19,7 @@ from paddle.trainer.config_parser import * + def main(print_whole_config, globals, locals): ''' this test will all test_config.py @@ -40,7 +41,7 @@ def main(print_whole_config, globals, locals): else: cmdstr = cmdstr + """print parse_config(configs, "").model_config""" - exec (cmdstr, globals, locals) + exec(cmdstr, globals, locals) if __name__ == '__main__': diff --git a/python/paddle/trainer_config_helpers/tests/configs/test_resize.py b/python/paddle/trainer_config_helpers/tests/configs/test_resize.py index d3fbd10b825cd..1b82931110d02 100644 --- a/python/paddle/trainer_config_helpers/tests/configs/test_resize.py +++ b/python/paddle/trainer_config_helpers/tests/configs/test_resize.py @@ -6,4 +6,3 @@ resize = resize_layer(input=data, size=100) outputs(resize) - From 72aa084b2d5483043a1ed59d82704ee8b29c846f Mon Sep 17 00:00:00 2001 From: wangpeng54 Date: Fri, 2 Jun 2017 16:52:52 -0700 Subject: [PATCH 8/9] fix hook --- .../tests/configs/test_config_parser_for_non_file_config.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/paddle/trainer_config_helpers/tests/configs/test_config_parser_for_non_file_config.py b/python/paddle/trainer_config_helpers/tests/configs/test_config_parser_for_non_file_config.py index 26ecc1cb10649..b690df49ca4b0 100644 --- a/python/paddle/trainer_config_helpers/tests/configs/test_config_parser_for_non_file_config.py +++ b/python/paddle/trainer_config_helpers/tests/configs/test_config_parser_for_non_file_config.py @@ -41,7 +41,7 @@ def main(print_whole_config, globals, locals): else: cmdstr = cmdstr + """print parse_config(configs, "").model_config""" - exec(cmdstr, globals, locals) + exec (cmdstr, globals, locals) if __name__ == '__main__': From 230322872ee0b718e60e0ecc33ce4714a7b2b5d3 Mon Sep 17 00:00:00 2001 From: wangpeng54 Date: Fri, 2 Jun 2017 17:46:22 -0700 Subject: [PATCH 9/9] rm redundent file --- .../tests/configs/test_resize_layer.py | 7 ------- 1 file changed, 7 deletions(-) delete mode 100644 python/paddle/trainer_config_helpers/tests/configs/test_resize_layer.py diff --git a/python/paddle/trainer_config_helpers/tests/configs/test_resize_layer.py b/python/paddle/trainer_config_helpers/tests/configs/test_resize_layer.py deleted file mode 100644 index 943cf9b0ba8c4..0000000000000 --- a/python/paddle/trainer_config_helpers/tests/configs/test_resize_layer.py +++ /dev/null @@ -1,7 +0,0 @@ -from paddle.trainer_config_helpers import * - -data = data_layer(name='input', size=300, height=100, width=3) - -resize = resize_layer(input=data, size=100) - -outputs(resize)