Skip to content

Commit 2ad9d8d

Browse files
authored
update all pooling from function to class (#507)
* update all pooling from function to class * fix codacy
1 parent b785301 commit 2ad9d8d

File tree

2 files changed

+85
-107
lines changed

2 files changed

+85
-107
lines changed

docs/modules/layers.rst

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -571,19 +571,19 @@ Pooling layer for any dimensions and any pooling functions.
571571

572572
1D Max pooling
573573
^^^^^^^^^^^^^^^^^^^
574-
.. autofunction:: MaxPool1d
574+
.. autoclass:: MaxPool1d
575575

576576
1D Mean pooling
577577
^^^^^^^^^^^^^^^^^^^
578-
.. autofunction:: MeanPool1d
578+
.. autoclass:: MeanPool1d
579579

580580
2D Max pooling
581581
^^^^^^^^^^^^^^^^^^^
582-
.. autofunction:: MaxPool2d
582+
.. autoclass:: MaxPool2d
583583

584584
2D Mean pooling
585585
^^^^^^^^^^^^^^^^^^^
586-
.. autofunction:: MeanPool2d
586+
.. autoclass:: MeanPool2d
587587

588588
3D Max pooling
589589
^^^^^^^^^^^^^^^^^^^

tensorlayer/layers/pooling.py

Lines changed: 81 additions & 103 deletions
Original file line numberDiff line numberDiff line change
@@ -70,13 +70,13 @@ def __init__(
7070
logging.info("PoolLayer %s: ksize:%s strides:%s padding:%s pool:%s" % (name, str(ksize), str(strides), padding, pool.__name__))
7171

7272
self.inputs = prev_layer.outputs
73-
73+
# operation (customized)
7474
self.outputs = pool(self.inputs, ksize=ksize, strides=strides, padding=padding, name=name)
75+
# update layer (customized)
7576
self.all_layers.append(self.outputs)
7677

7778

78-
@deprecated_alias(net='prev_layer', end_support_version=1.9) # TODO remove this line for the 1.9 release
79-
def maxpool1d(prev_layer, filter_size=3, strides=2, padding='valid', data_format='channels_last', name=None):
79+
class MaxPool1d(Layer):
8080
"""Max pooling for 1D signal [batch, length, channel]. Wrapper for `tf.layers.max_pooling1d <https://www.tensorflow.org/api_docs/python/tf/layers/max_pooling1d>`__ .
8181
8282
Parameters
@@ -97,23 +97,20 @@ def maxpool1d(prev_layer, filter_size=3, strides=2, padding='valid', data_format
9797
name : str
9898
A unique layer name.
9999
100-
Returns
101-
-------
102-
:class:`Layer`
103-
A max pooling 1-D layer with a output rank as 3.
104-
105100
"""
106-
logging.info("MaxPool1d %s: filter_size:%s strides:%s padding:%s" % (name, str(filter_size), str(strides), str(padding)))
107-
outputs = tf.layers.max_pooling1d(prev_layer.outputs, filter_size, strides, padding=padding, data_format=data_format, name=name)
108101

109-
net_new = copy.copy(prev_layer)
110-
net_new.outputs = outputs
111-
net_new.all_layers.extend([outputs])
112-
return net_new
102+
@deprecated_alias(net='prev_layer', end_support_version=1.9) # TODO remove this line for the 1.9 release
103+
def __init__(self, prev_layer, filter_size=3, strides=2, padding='valid', data_format='channels_last', name='maxpool1d'):
104+
super(MaxPool1d, self).__init__(prev_layer=prev_layer, name=name)
105+
logging.info("MaxPool1d %s: filter_size:%s strides:%s padding:%s" % (name, str(filter_size), str(strides), str(padding)))
106+
self.inputs = prev_layer.outputs
107+
# operation (customized)
108+
self.outputs = tf.layers.max_pooling1d(self.inputs, filter_size, strides, padding=padding, data_format=data_format, name=name)
109+
# update layer (customized)
110+
self.all_layers.append(self.outputs)
113111

114112

115-
@deprecated_alias(net='prev_layer', end_support_version=1.9) # TODO remove this line for the 1.9 release
116-
def meanpool1d(prev_layer, filter_size=3, strides=2, padding='valid', data_format='channels_last', name=None):
113+
class MeanPool1d(Layer):
117114
"""Mean pooling for 1D signal [batch, length, channel]. Wrapper for `tf.layers.average_pooling1d <https://www.tensorflow.org/api_docs/python/tf/layers/average_pooling1d>`__ .
118115
119116
Parameters
@@ -134,24 +131,28 @@ def meanpool1d(prev_layer, filter_size=3, strides=2, padding='valid', data_forma
134131
name : str
135132
A unique layer name.
136133
137-
Returns
138-
-------
139-
:class:`Layer`
140-
A mean pooling 1-D layer with a output rank as 3.
141-
142134
"""
143-
logging.info("MeanPool1d %s: filter_size:%s strides:%s padding:%s" % (name, str(filter_size), str(strides), str(padding)))
144-
outputs = tf.layers.average_pooling1d(prev_layer.outputs, filter_size, strides, padding=padding, data_format=data_format, name=name)
135+
# logging.info("MeanPool1d %s: filter_size:%s strides:%s padding:%s" % (name, str(filter_size), str(strides), str(padding)))
136+
# outputs = tf.layers.average_pooling1d(prev_layer.outputs, filter_size, strides, padding=padding, data_format=data_format, name=name)
137+
#
138+
# net_new = copy.copy(prev_layer)
139+
# net_new.outputs = outputs
140+
# net_new.all_layers.extend([outputs])
141+
# return net_new
142+
@deprecated_alias(net='prev_layer', end_support_version=1.9) # TODO remove this line for the 1.9 release
143+
def __init__(self, prev_layer, filter_size=3, strides=2, padding='valid', data_format='channels_last', name='meanpool1d'):
144+
super(MeanPool1d, self).__init__(prev_layer=prev_layer, name=name)
145+
logging.info("MeanPool1d %s: filter_size:%s strides:%s padding:%s" % (name, str(filter_size), str(strides), str(padding)))
145146

146-
net_new = copy.copy(prev_layer)
147-
net_new.outputs = outputs
148-
net_new.all_layers.extend([outputs])
149-
return net_new
147+
# operation (customized)
148+
self.outputs = tf.layers.average_pooling1d(prev_layer.outputs, filter_size, strides, padding=padding, data_format=data_format, name=name)
149+
150+
# update layer (customized)
151+
self.all_layers.append(self.outputs)
150152

151153

152-
@deprecated_alias(net='prev_layer', end_support_version=1.9) # TODO remove this line for the 1.9 release
153-
def maxpool2d(prev_layer, filter_size=(3, 3), strides=(2, 2), padding='SAME', name='maxpool'):
154-
"""Max pooling for 2D image [batch, height, width, channel]. Wrapper for :class:`PoolLayer`.
154+
class MaxPool2d(Layer):
155+
"""Max pooling for 2D image [batch, height, width, channel].
155156
156157
Parameters
157158
-----------
@@ -166,33 +167,31 @@ def maxpool2d(prev_layer, filter_size=(3, 3), strides=(2, 2), padding='SAME', na
166167
name : str
167168
A unique layer name.
168169
169-
Returns
170-
-------
171-
:class:`Layer`
172-
A max pooling 2-D layer with a output rank as 4.
173-
174170
"""
175-
if strides is None:
176-
strides = filter_size
177-
if tf.__version__ > '1.5':
178-
outputs = tf.layers.max_pooling2d(prev_layer.outputs, filter_size, strides, padding=padding, data_format='channels_last', name=name)
179-
net_new = copy.copy(prev_layer)
180-
net_new.outputs = outputs
181-
net_new.all_layers.extend([outputs])
182-
return net_new
183-
else:
184171

185-
assert len(strides) == 2, "len(strides) should be 2, MaxPool2d and PoolLayer are different."
172+
@deprecated_alias(net='prev_layer', end_support_version=1.9) # TODO remove this line for the 1.9 release
173+
def __init__(self, prev_layer, filter_size=(3, 3), strides=(2, 2), padding='SAME', name='maxpool2d'):
174+
if strides is None:
175+
strides = filter_size
186176

187-
prev_layer = PoolLayer(
188-
prev_layer, ksize=[1, filter_size[0], filter_size[1], 1], strides=[1, strides[0], strides[1], 1], padding=padding, pool=tf.nn.max_pool, name=name)
189-
190-
return prev_layer
177+
super(MaxPool2d, self).__init__(prev_layer=prev_layer, name=name)
178+
logging.info("MaxPool2d %s: filter_size:%s strides:%s padding:%s" % (name, str(filter_size), str(strides), str(padding)))
179+
self.inputs = prev_layer.outputs
180+
# operation (customized)
181+
if tf.__version__ > '1.5':
182+
self.outputs = tf.layers.max_pooling2d(self.inputs, filter_size, strides, padding=padding, data_format='channels_last', name=name)
183+
else:
184+
if len(strides) == 2:
185+
raise Exception("len(strides) should be 2.")
186+
ksize = [1, filter_size[0], filter_size[1], 1]
187+
strides = [1, strides[0], strides[1], 1]
188+
self.outputs = tf.nn.max_pool(self.inputs, ksize=ksize, strides=strides, padding=padding, name=name)
189+
# update layer (customized)
190+
self.all_layers.append(self.outputs)
191191

192192

193-
@deprecated_alias(net='prev_layer', end_support_version=1.9) # TODO remove this line for the 1.9 release
194-
def meanpool2d(prev_layer, filter_size=(3, 3), strides=(2, 2), padding='SAME', name='meanpool'):
195-
"""Mean pooling for 2D image [batch, height, width, channel]. Wrapper for :class:`PoolLayer`.
193+
class MeanPool2d(Layer):
194+
"""Mean pooling for 2D image [batch, height, width, channel].
196195
197196
Parameters
198197
-----------
@@ -207,27 +206,27 @@ def meanpool2d(prev_layer, filter_size=(3, 3), strides=(2, 2), padding='SAME', n
207206
name : str
208207
A unique layer name.
209208
210-
Returns
211-
-------
212-
:class:`Layer`
213-
A mean pooling 2-D layer with a output rank as 4.
214-
215209
"""
216-
if strides is None:
217-
strides = filter_size
218-
if tf.__version__ > '1.5':
219-
outputs = tf.layers.average_pooling2d(prev_layer.outputs, filter_size, strides, padding=padding, data_format='channels_last', name=name)
220-
net_new = copy.copy(prev_layer)
221-
net_new.outputs = outputs
222-
net_new.all_layers.extend([outputs])
223-
return net_new
224-
else:
225210

226-
assert len(strides) == 2, "len(strides) should be 2, MeanPool2d and PoolLayer are different."
211+
@deprecated_alias(net='prev_layer', end_support_version=1.9) # TODO remove this line for the 1.9 release
212+
def __init__(self, prev_layer, filter_size=(3, 3), strides=(2, 2), padding='SAME', name='meanpool2d'):
213+
if strides is None:
214+
strides = filter_size
227215

228-
prev_layer = PoolLayer(
229-
prev_layer, ksize=[1, filter_size[0], filter_size[1], 1], strides=[1, strides[0], strides[1], 1], padding=padding, pool=tf.nn.avg_pool, name=name)
230-
return prev_layer
216+
super(MeanPool2d, self).__init__(prev_layer=prev_layer, name=name)
217+
logging.info("MeanPool2d %s: filter_size:%s strides:%s padding:%s" % (name, str(filter_size), str(strides), str(padding)))
218+
self.inputs = prev_layer.outputs
219+
# operation (customized)
220+
if tf.__version__ > '1.5':
221+
self.outputs = tf.layers.average_pooling2d(self.inputs, filter_size, strides, padding=padding, data_format='channels_last', name=name)
222+
else:
223+
if len(strides) == 2:
224+
raise Exception("len(strides) should be 2.")
225+
ksize = [1, filter_size[0], filter_size[1], 1]
226+
strides = [1, strides[0], strides[1], 1]
227+
self.outputs = tf.nn.avg_pool(self.inputs, ksize=ksize, strides=strides, padding=padding, name=name)
228+
# update layer (customized)
229+
self.all_layers.append(self.outputs)
231230

232231

233232
# def maxpool3d(net, filter_size=(3, 3, 3), strides=(2, 2, 2), padding='valid', data_format='channels_last', name='maxpool3d'):
@@ -261,13 +260,11 @@ class MaxPool3d(Layer):
261260

262261
@deprecated_alias(layer='prev_layer', end_support_version=1.9) # TODO remove this line for the 1.9 release
263262
def __init__(self, prev_layer, filter_size=(3, 3, 3), strides=(2, 2, 2), padding='valid', data_format='channels_last', name='maxpool3d'):
264-
265263
super(MaxPool3d, self).__init__(prev_layer=prev_layer, name=name)
266264
logging.info("MaxPool3d %s: filter_size:%s strides:%s padding:%s" % (name, str(filter_size), str(strides), str(padding)))
267-
265+
# operation (customized)
268266
self.inputs = prev_layer.outputs
269-
270-
self.outputs = tf.layers.max_pooling3d(prev_layer.outputs, filter_size, strides, padding=padding, data_format=data_format, name=name)
267+
self.outputs = tf.layers.max_pooling3d(self.inputs, filter_size, strides, padding=padding, data_format=data_format, name=name)
271268
# update layer (customized)
272269
self.all_layers.append(self.outputs)
273270

@@ -338,12 +335,9 @@ class GlobalMaxPool1d(Layer):
338335
def __init__(self, prev_layer, name='globalmaxpool1d'):
339336
super(GlobalMaxPool1d, self).__init__(prev_layer=prev_layer, name=name)
340337
logging.info("GlobalMaxPool1d %s" % name)
341-
342338
self.inputs = prev_layer.outputs
343-
344339
# operation (customized)
345-
self.outputs = tf.reduce_max(prev_layer.outputs, axis=1, name=name)
346-
340+
self.outputs = tf.reduce_max(self.inputs, axis=1, name=name)
347341
# update layer (customized)
348342
self.all_layers.append(self.outputs)
349343

@@ -370,12 +364,9 @@ class GlobalMeanPool1d(Layer):
370364
def __init__(self, prev_layer, name='globalmeanpool1d'):
371365
super(GlobalMeanPool1d, self).__init__(prev_layer=prev_layer, name=name)
372366
logging.info("GlobalMeanPool1d %s" % name)
373-
374367
self.inputs = prev_layer.outputs
375-
376368
# operation (customized)
377-
self.outputs = tf.reduce_mean(prev_layer.outputs, axis=1, name=name)
378-
369+
self.outputs = tf.reduce_mean(self.inputs, axis=1, name=name)
379370
# update layer (customized)
380371
self.all_layers.append(self.outputs)
381372

@@ -402,12 +393,9 @@ class GlobalMaxPool2d(Layer):
402393
def __init__(self, prev_layer, name='globalmaxpool2d'):
403394
super(GlobalMaxPool2d, self).__init__(prev_layer=prev_layer, name=name)
404395
logging.info("GlobalMaxPool2d %s" % name)
405-
406396
self.inputs = prev_layer.outputs
407-
408397
# operation (customized)
409-
self.outputs = tf.reduce_max(prev_layer.outputs, axis=[1, 2], name=name)
410-
398+
self.outputs = tf.reduce_max(self.inputs, axis=[1, 2], name=name)
411399
# update layer (customized)
412400
self.all_layers.append(self.outputs)
413401

@@ -434,12 +422,9 @@ class GlobalMeanPool2d(Layer):
434422
def __init__(self, prev_layer, name='globalmeanpool2d'):
435423
super(GlobalMeanPool2d, self).__init__(prev_layer=prev_layer, name=name)
436424
logging.info("GlobalMeanPool2d %s" % name)
437-
438425
self.inputs = prev_layer.outputs
439-
440426
# operation (customized)
441-
self.outputs = tf.reduce_mean(prev_layer.outputs, axis=[1, 2], name=name)
442-
427+
self.outputs = tf.reduce_mean(self.inputs, axis=[1, 2], name=name)
443428
# update layer (customized)
444429
self.all_layers.append(self.outputs)
445430

@@ -465,15 +450,11 @@ class GlobalMaxPool3d(Layer):
465450
@deprecated_alias(layer='prev_layer', end_support_version=1.9) # TODO remove this line for the 1.9 release
466451
def __init__(self, prev_layer, name='globalmaxpool3d'):
467452
super(GlobalMaxPool3d, self).__init__(prev_layer=prev_layer, name=name)
468-
469453
self.inputs = prev_layer.outputs
470-
471454
# print out info (customized)
472455
logging.info("GlobalMaxPool3d %s" % name)
473-
474456
# operation (customized)
475-
self.outputs = tf.reduce_max(prev_layer.outputs, axis=[1, 2, 3], name=name)
476-
457+
self.outputs = tf.reduce_max(self.inputs, axis=[1, 2, 3], name=name)
477458
# update layer (customized)
478459
self.all_layers.append(self.outputs)
479460

@@ -500,18 +481,15 @@ class GlobalMeanPool3d(Layer):
500481
def __init__(self, prev_layer, name='globalmeanpool3d'):
501482
super(GlobalMeanPool3d, self).__init__(prev_layer=prev_layer, name=name)
502483
logging.info("GlobalMeanPool3d %s" % name)
503-
504484
self.inputs = prev_layer.outputs
505-
506485
# operation (customized)
507-
self.outputs = tf.reduce_mean(prev_layer.outputs, axis=[1, 2, 3], name=name)
508-
486+
self.outputs = tf.reduce_mean(self.inputs, axis=[1, 2, 3], name=name)
509487
# update layer (customized)
510488
self.all_layers.append(self.outputs)
511489

512490

513491
# Alias
514-
MaxPool1d = maxpool1d
515-
MaxPool2d = maxpool2d
516-
MeanPool1d = meanpool1d
517-
MeanPool2d = meanpool2d
492+
# MaxPool1d = maxpool1d
493+
# MaxPool2d = maxpool2d
494+
# MeanPool1d = meanpool1d
495+
# MeanPool2d = meanpool2d

0 commit comments

Comments
 (0)