From eb6c1bdcbf6093888f2b443fdb49f836f3352316 Mon Sep 17 00:00:00 2001 From: Joe Yearsley Date: Tue, 13 Mar 2018 07:23:18 +0000 Subject: Update core.py Added `data_format` to flatten to allow changing of it during inference time. --- tensorflow/python/layers/core.py | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/tensorflow/python/layers/core.py b/tensorflow/python/layers/core.py index 9879e5020f..5f89e3c0c3 100644 --- a/tensorflow/python/layers/core.py +++ b/tensorflow/python/layers/core.py @@ -268,7 +268,14 @@ def dropout(inputs, @tf_export('layers.Flatten') class Flatten(keras_layers.Flatten, base.Layer): """Flattens an input tensor while preserving the batch axis (axis 0). - + + Arguments: + data_format: A string, one of `channels_last` (default) or `channels_first`. + The ordering of the dimensions in the inputs. + `channels_last` corresponds to inputs with shape + `(batch, ..., channels)` while `channels_first` corresponds to + inputs with shape `(batch, channels, ...)`. + Examples: ``` @@ -285,11 +292,16 @@ class Flatten(keras_layers.Flatten, base.Layer): @tf_export('layers.flatten') -def flatten(inputs, name=None): +def flatten(inputs, data_format='channels_last', name=None): """Flattens an input tensor while preserving the batch axis (axis 0). Arguments: inputs: Tensor input. + data_format: A string, one of `channels_last` (default) or `channels_first`. + The ordering of the dimensions in the inputs. + `channels_last` corresponds to inputs with shape + `(batch, height, width, channels)` while `channels_first` corresponds to + inputs with shape `(batch, channels, height, width)`. name: The name of the layer (string). Returns: @@ -307,7 +319,7 @@ def flatten(inputs, name=None): # now `y` has shape `(None, None)` ``` """ - layer = Flatten(name=name) + layer = Flatten(data_format=data_format, name=name) return layer.apply(inputs) -- cgit v1.2.3 From dd928d5ae31dd0484e5e4a96c6322adecc4e511b Mon Sep 17 00:00:00 2001 From: josephyearsley Date: Sun, 18 Mar 2018 19:24:10 +0000 Subject: Added Flatten Test --- tensorflow/python/layers/core_test.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/tensorflow/python/layers/core_test.py b/tensorflow/python/layers/core_test.py index d26f3f4789..0d019897aa 100644 --- a/tensorflow/python/layers/core_test.py +++ b/tensorflow/python/layers/core_test.py @@ -476,6 +476,22 @@ class FlattenTest(test.TestCase): shape = core_layers.Flatten().compute_output_shape((None, 3, None)) self.assertEqual(shape.as_list(), [None, None]) + def testDataFormat(self): + np_input_channels_last = np.arange(3, 7).reshape([1, 2, 3, 2]) + + with self.test_session() as sess: + x = array_ops.placeholder(shape=(1, 2, 3, 2), dtype='float32') + y = core_layers.Flatten(data_format='channels_last')(x) + np_output_cl = sess.run(y, feed_dict={x: np_input_channels_last}) + + x = array_ops.placeholder(shape=(1, 2, 3, 2), dtype='float32') + y = core_layers.Flatten(data_format='channels_first')(x) + np_input_channels_first = np.transpose(np_input_channels_last, + [0, 3, 1, 2]) + np_output_cf = sess.run(y, feed_dict={x: np_input_channels_first}) + + self.assertEqual(np_output_cl, np_output_cf) + def testFunctionalFlatten(self): x = array_ops.placeholder(shape=(None, 2, 3), dtype='float32') y = core_layers.flatten(x, name='flatten') -- cgit v1.2.3 From 579aecd2de1f0582858f83e3c8da2a8dbb57993b Mon Sep 17 00:00:00 2001 From: josephyearsley Date: Sun, 18 Mar 2018 20:08:59 +0000 Subject: added dtype to test --- tensorflow/python/layers/core_test.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tensorflow/python/layers/core_test.py b/tensorflow/python/layers/core_test.py index 0d019897aa..31f3a4e0b0 100644 --- a/tensorflow/python/layers/core_test.py +++ b/tensorflow/python/layers/core_test.py @@ -477,7 +477,7 @@ class FlattenTest(test.TestCase): self.assertEqual(shape.as_list(), [None, None]) def testDataFormat(self): - np_input_channels_last = np.arange(3, 7).reshape([1, 2, 3, 2]) + np_input_channels_last = np.arange(12, dtype='float32').reshape([1, 2, 3, 2]) with self.test_session() as sess: x = array_ops.placeholder(shape=(1, 2, 3, 2), dtype='float32') -- cgit v1.2.3 From 76964f315f7c52d63ce6578d87278a96c7394ece Mon Sep 17 00:00:00 2001 From: josephyearsley Date: Sun, 18 Mar 2018 22:01:21 +0000 Subject: pylint compliance --- tensorflow/python/layers/core.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tensorflow/python/layers/core.py b/tensorflow/python/layers/core.py index 5f89e3c0c3..5919fa543e 100644 --- a/tensorflow/python/layers/core.py +++ b/tensorflow/python/layers/core.py @@ -268,14 +268,14 @@ def dropout(inputs, @tf_export('layers.Flatten') class Flatten(keras_layers.Flatten, base.Layer): """Flattens an input tensor while preserving the batch axis (axis 0). - + Arguments: data_format: A string, one of `channels_last` (default) or `channels_first`. The ordering of the dimensions in the inputs. `channels_last` corresponds to inputs with shape `(batch, ..., channels)` while `channels_first` corresponds to inputs with shape `(batch, channels, ...)`. - + Examples: ``` -- cgit v1.2.3 From 110baa57112a95c2644896ce6ff75894e1ae61c7 Mon Sep 17 00:00:00 2001 From: josephyearsley Date: Sun, 18 Mar 2018 23:10:55 +0000 Subject: Extended to N-dims --- tensorflow/python/layers/core_test.py | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/tensorflow/python/layers/core_test.py b/tensorflow/python/layers/core_test.py index 31f3a4e0b0..d5b8a0ff65 100644 --- a/tensorflow/python/layers/core_test.py +++ b/tensorflow/python/layers/core_test.py @@ -476,15 +476,31 @@ class FlattenTest(test.TestCase): shape = core_layers.Flatten().compute_output_shape((None, 3, None)) self.assertEqual(shape.as_list(), [None, None]) - def testDataFormat(self): - np_input_channels_last = np.arange(12, dtype='float32').reshape([1, 2, 3, 2]) + def testDataFormat5d(self): + np_input_channels_last = np.arange(120, dtype='float32').reshape([1, 5, 4, 3, 2]) with self.test_session() as sess: - x = array_ops.placeholder(shape=(1, 2, 3, 2), dtype='float32') + x = array_ops.placeholder(shape=(1, 5, 4, 3, 2), dtype='float32') y = core_layers.Flatten(data_format='channels_last')(x) np_output_cl = sess.run(y, feed_dict={x: np_input_channels_last}) - x = array_ops.placeholder(shape=(1, 2, 3, 2), dtype='float32') + x = array_ops.placeholder(shape=(1, 2, 5, 4, 3), dtype='float32') + y = core_layers.Flatten(data_format='channels_first')(x) + np_input_channels_first = np.transpose(np_input_channels_last, + [0, 4, 1, 2, 3]) + np_output_cf = sess.run(y, feed_dict={x: np_input_channels_first}) + + self.assertEqual(np_output_cl, np_output_cf) + + def testDataFormat4d(self): + np_input_channels_last = np.arange(24, dtype='float32').reshape([1, 4, 3, 2]) + + with self.test_session() as sess: + x = array_ops.placeholder(shape=(1, 4, 3, 2), dtype='float32') + y = core_layers.Flatten(data_format='channels_last')(x) + np_output_cl = sess.run(y, feed_dict={x: np_input_channels_last}) + + x = array_ops.placeholder(shape=(1, 2, 4, 3), dtype='float32') y = core_layers.Flatten(data_format='channels_first')(x) np_input_channels_first = np.transpose(np_input_channels_last, [0, 3, 1, 2]) -- cgit v1.2.3 From 4de591a03a9bd49a05d67fe48f9358dbdac51561 Mon Sep 17 00:00:00 2001 From: josephyearsley Date: Sat, 30 Jun 2018 08:14:40 +0100 Subject: Fixed Pylint Issues --- tensorflow/python/layers/core_test.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/tensorflow/python/layers/core_test.py b/tensorflow/python/layers/core_test.py index d5b8a0ff65..8ad0e8c4ba 100644 --- a/tensorflow/python/layers/core_test.py +++ b/tensorflow/python/layers/core_test.py @@ -477,7 +477,8 @@ class FlattenTest(test.TestCase): self.assertEqual(shape.as_list(), [None, None]) def testDataFormat5d(self): - np_input_channels_last = np.arange(120, dtype='float32').reshape([1, 5, 4, 3, 2]) + np_input_channels_last = np.arange(120, dtype='float32').reshape( + [1, 5, 4, 3, 2]) with self.test_session() as sess: x = array_ops.placeholder(shape=(1, 5, 4, 3, 2), dtype='float32') @@ -493,7 +494,8 @@ class FlattenTest(test.TestCase): self.assertEqual(np_output_cl, np_output_cf) def testDataFormat4d(self): - np_input_channels_last = np.arange(24, dtype='float32').reshape([1, 4, 3, 2]) + np_input_channels_last = np.arange(24, dtype='float32').reshape( + [1, 4, 3, 2]) with self.test_session() as sess: x = array_ops.placeholder(shape=(1, 4, 3, 2), dtype='float32') -- cgit v1.2.3 From 46fc7a9530e9c8f6bf909de8df8c97e4b38a99a5 Mon Sep 17 00:00:00 2001 From: josephyearsley Date: Mon, 23 Jul 2018 23:06:48 +0100 Subject: Fixed Tests --- tensorflow/python/layers/core_test.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tensorflow/python/layers/core_test.py b/tensorflow/python/layers/core_test.py index 8ad0e8c4ba..22ed75dda7 100644 --- a/tensorflow/python/layers/core_test.py +++ b/tensorflow/python/layers/core_test.py @@ -491,7 +491,7 @@ class FlattenTest(test.TestCase): [0, 4, 1, 2, 3]) np_output_cf = sess.run(y, feed_dict={x: np_input_channels_first}) - self.assertEqual(np_output_cl, np_output_cf) + self.assertAllEqual(np_output_cl, np_output_cf) def testDataFormat4d(self): np_input_channels_last = np.arange(24, dtype='float32').reshape( @@ -508,7 +508,7 @@ class FlattenTest(test.TestCase): [0, 3, 1, 2]) np_output_cf = sess.run(y, feed_dict={x: np_input_channels_first}) - self.assertEqual(np_output_cl, np_output_cf) + self.assertAllEqual(np_output_cl, np_output_cf) def testFunctionalFlatten(self): x = array_ops.placeholder(shape=(None, 2, 3), dtype='float32') -- cgit v1.2.3 From da930ea7fd16c903346ff36f5f57548dbea98bdc Mon Sep 17 00:00:00 2001 From: josephyearsley Date: Tue, 21 Aug 2018 08:17:29 +0100 Subject: Updated golden --- tensorflow/tools/api/golden/v1/tensorflow.pbtxt | 4 ---- 1 file changed, 4 deletions(-) diff --git a/tensorflow/tools/api/golden/v1/tensorflow.pbtxt b/tensorflow/tools/api/golden/v1/tensorflow.pbtxt index 509ceff9df..e65ffeb12e 100644 --- a/tensorflow/tools/api/golden/v1/tensorflow.pbtxt +++ b/tensorflow/tools/api/golden/v1/tensorflow.pbtxt @@ -832,10 +832,6 @@ tf_module { name: "broadcast_static_shape" argspec: "args=[\'shape_x\', \'shape_y\'], varargs=None, keywords=None, defaults=None" } - member_method { - name: "broadcast_to" - argspec: "args=[\'input\', \'shape\', \'name\'], varargs=None, keywords=None, defaults=[\'None\'], " - } member_method { name: "case" argspec: "args=[\'pred_fn_pairs\', \'default\', \'exclusive\', \'strict\', \'name\'], varargs=None, keywords=None, defaults=[\'None\', \'False\', \'False\', \'case\'], " -- cgit v1.2.3 From 459accb2b7bdea542415f3a744cbe9e348f847d6 Mon Sep 17 00:00:00 2001 From: josephyearsley Date: Tue, 21 Aug 2018 21:02:13 +0100 Subject: Updated layers --- tensorflow/tools/api/golden/v1/tensorflow.layers.pbtxt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tensorflow/tools/api/golden/v1/tensorflow.layers.pbtxt b/tensorflow/tools/api/golden/v1/tensorflow.layers.pbtxt index df74c32e1f..5d9ea2e5a3 100644 --- a/tensorflow/tools/api/golden/v1/tensorflow.layers.pbtxt +++ b/tensorflow/tools/api/golden/v1/tensorflow.layers.pbtxt @@ -122,7 +122,7 @@ tf_module { } member_method { name: "flatten" - argspec: "args=[\'inputs\', \'name\'], varargs=None, keywords=None, defaults=[\'None\'], " + argspec: "args=[\'inputs\', \'data_format\', \'name\'], varargs=None, keywords=None, defaults=[\'channels_last\', \'None\'], " } member_method { name: "max_pooling1d" -- cgit v1.2.3 From a58135a6a9637db0908c88f39df22b69bafaec3d Mon Sep 17 00:00:00 2001 From: Joe Yearsley Date: Sat, 25 Aug 2018 16:04:34 +0100 Subject: Updated protobuf --- tensorflow/tools/api/golden/v1/tensorflow.pbtxt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tensorflow/tools/api/golden/v1/tensorflow.pbtxt b/tensorflow/tools/api/golden/v1/tensorflow.pbtxt index e65ffeb12e..509ceff9df 100644 --- a/tensorflow/tools/api/golden/v1/tensorflow.pbtxt +++ b/tensorflow/tools/api/golden/v1/tensorflow.pbtxt @@ -832,6 +832,10 @@ tf_module { name: "broadcast_static_shape" argspec: "args=[\'shape_x\', \'shape_y\'], varargs=None, keywords=None, defaults=None" } + member_method { + name: "broadcast_to" + argspec: "args=[\'input\', \'shape\', \'name\'], varargs=None, keywords=None, defaults=[\'None\'], " + } member_method { name: "case" argspec: "args=[\'pred_fn_pairs\', \'default\', \'exclusive\', \'strict\', \'name\'], varargs=None, keywords=None, defaults=[\'None\', \'False\', \'False\', \'case\'], " -- cgit v1.2.3 From 8e87c649fc290c758c4240bf202de0c7f0f3a4ad Mon Sep 17 00:00:00 2001 From: Joe Yearsley Date: Sat, 29 Sep 2018 17:38:44 +0100 Subject: Updated v2 --- tensorflow/tools/api/golden/v2/tensorflow.layers.pbtxt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tensorflow/tools/api/golden/v2/tensorflow.layers.pbtxt b/tensorflow/tools/api/golden/v2/tensorflow.layers.pbtxt index df74c32e1f..5fd6ba1192 100644 --- a/tensorflow/tools/api/golden/v2/tensorflow.layers.pbtxt +++ b/tensorflow/tools/api/golden/v2/tensorflow.layers.pbtxt @@ -122,8 +122,8 @@ tf_module { } member_method { name: "flatten" - argspec: "args=[\'inputs\', \'name\'], varargs=None, keywords=None, defaults=[\'None\'], " - } + argspec: "args=[\'inputs\', \'data_format\', \'name\'], varargs=None, keywords=None, defaults=[\'channels_last\', \'None\'], " +} member_method { name: "max_pooling1d" argspec: "args=[\'inputs\', \'pool_size\', \'strides\', \'padding\', \'data_format\', \'name\'], varargs=None, keywords=None, defaults=[\'valid\', \'channels_last\', \'None\'], " -- cgit v1.2.3 From 32059ed204ecbee7828057d23a1c1daf561c87fd Mon Sep 17 00:00:00 2001 From: Joe Yearsley Date: Sat, 29 Sep 2018 17:42:52 +0100 Subject: Update tensorflow.layers.pbtxt --- tensorflow/tools/api/golden/v2/tensorflow.layers.pbtxt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tensorflow/tools/api/golden/v2/tensorflow.layers.pbtxt b/tensorflow/tools/api/golden/v2/tensorflow.layers.pbtxt index 5fd6ba1192..5d9ea2e5a3 100644 --- a/tensorflow/tools/api/golden/v2/tensorflow.layers.pbtxt +++ b/tensorflow/tools/api/golden/v2/tensorflow.layers.pbtxt @@ -122,8 +122,8 @@ tf_module { } member_method { name: "flatten" - argspec: "args=[\'inputs\', \'data_format\', \'name\'], varargs=None, keywords=None, defaults=[\'channels_last\', \'None\'], " -} + argspec: "args=[\'inputs\', \'data_format\', \'name\'], varargs=None, keywords=None, defaults=[\'channels_last\', \'None\'], " + } member_method { name: "max_pooling1d" argspec: "args=[\'inputs\', \'pool_size\', \'strides\', \'padding\', \'data_format\', \'name\'], varargs=None, keywords=None, defaults=[\'valid\', \'channels_last\', \'None\'], " -- cgit v1.2.3 From 1a56a3299e904d5a3352a3a15e4cf7401f72bbc3 Mon Sep 17 00:00:00 2001 From: joe yearsley Date: Tue, 2 Oct 2018 16:33:37 +0100 Subject: Updated ordering for kwargs --- tensorflow/python/layers/core.py | 6 +++--- tensorflow/tools/api/golden/v1/tensorflow.layers.pbtxt | 2 +- tensorflow/tools/api/golden/v2/tensorflow.layers.pbtxt | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/tensorflow/python/layers/core.py b/tensorflow/python/layers/core.py index 5919fa543e..e06e9aba4a 100644 --- a/tensorflow/python/layers/core.py +++ b/tensorflow/python/layers/core.py @@ -292,17 +292,17 @@ class Flatten(keras_layers.Flatten, base.Layer): @tf_export('layers.flatten') -def flatten(inputs, data_format='channels_last', name=None): +def flatten(inputs, name=None, data_format='channels_last'): """Flattens an input tensor while preserving the batch axis (axis 0). Arguments: inputs: Tensor input. + name: The name of the layer (string). data_format: A string, one of `channels_last` (default) or `channels_first`. The ordering of the dimensions in the inputs. `channels_last` corresponds to inputs with shape `(batch, height, width, channels)` while `channels_first` corresponds to inputs with shape `(batch, channels, height, width)`. - name: The name of the layer (string). Returns: Reshaped tensor. @@ -319,7 +319,7 @@ def flatten(inputs, data_format='channels_last', name=None): # now `y` has shape `(None, None)` ``` """ - layer = Flatten(data_format=data_format, name=name) + layer = Flatten(name=name, data_format=data_format) return layer.apply(inputs) diff --git a/tensorflow/tools/api/golden/v1/tensorflow.layers.pbtxt b/tensorflow/tools/api/golden/v1/tensorflow.layers.pbtxt index 5d9ea2e5a3..0c24e9c7dd 100644 --- a/tensorflow/tools/api/golden/v1/tensorflow.layers.pbtxt +++ b/tensorflow/tools/api/golden/v1/tensorflow.layers.pbtxt @@ -122,7 +122,7 @@ tf_module { } member_method { name: "flatten" - argspec: "args=[\'inputs\', \'data_format\', \'name\'], varargs=None, keywords=None, defaults=[\'channels_last\', \'None\'], " + argspec: "args=[\'inputs\', \'name\', \'data_format\'], varargs=None, keywords=None, defaults=[\'None\', \'channels_last\'], " } member_method { name: "max_pooling1d" diff --git a/tensorflow/tools/api/golden/v2/tensorflow.layers.pbtxt b/tensorflow/tools/api/golden/v2/tensorflow.layers.pbtxt index 5d9ea2e5a3..0c24e9c7dd 100644 --- a/tensorflow/tools/api/golden/v2/tensorflow.layers.pbtxt +++ b/tensorflow/tools/api/golden/v2/tensorflow.layers.pbtxt @@ -122,7 +122,7 @@ tf_module { } member_method { name: "flatten" - argspec: "args=[\'inputs\', \'data_format\', \'name\'], varargs=None, keywords=None, defaults=[\'channels_last\', \'None\'], " + argspec: "args=[\'inputs\', \'name\', \'data_format\'], varargs=None, keywords=None, defaults=[\'None\', \'channels_last\'], " } member_method { name: "max_pooling1d" -- cgit v1.2.3