Class: DNN::Layers::Pool2D

Inherits:
Layer
  • Object
show all
Includes:
Conv2DUtils
Defined in:
lib/dnn/core/layers/cnn_layers.rb

Overview

Super class of all pooling2D class.

Direct Known Subclasses

AvgPool2D, MaxPool2D

Instance Attribute Summary collapse

Attributes inherited from Layer

#input_shape, #output_shape

Instance Method Summary collapse

Methods included from Conv2DUtils

calc_conv2d_out_size, calc_conv2d_padding_size, calc_conv2d_transpose_out_size, calc_conv2d_transpose_padding_size, col2im, col2im_cpu, col2im_gpu, im2col, im2col_cpu, im2col_gpu, zero_padding, zero_padding_bwd

Methods inherited from Layer

#<<, #built?, #call, call, #clean, #forward, from_hash

Constructor Details

#initialize(pool_size, strides: nil, padding: false) ⇒ Pool2D

Returns a new instance of Pool2D.

Parameters:

  • pool_size (Array | Integer)

    Pooling size. Pooling size is of the form [height, width].

  • strides (Array | Integer | NilClass) (defaults to: nil)

    Stride length. Stride length is of the form [height, width]. If you set nil, treat pool_size as strides.

  • padding (Array | Boolean) (defaults to: false)

    Padding size or whether to padding. Padding size is of the form [height, width].



334
335
336
337
338
339
340
341
342
343
# File 'lib/dnn/core/layers/cnn_layers.rb', line 334

def initialize(pool_size, strides: nil, padding: false)
  super()
  @pool_size = pool_size.is_a?(Integer) ? [pool_size, pool_size] : pool_size
  @strides = if strides
               strides.is_a?(Integer) ? [strides, strides] : strides
             else
               @pool_size.clone
             end
  @padding = padding.is_a?(Integer) ? [padding, padding] : padding
end

Instance Attribute Details

#paddingObject (readonly)

Returns the value of attribute padding.



328
329
330
# File 'lib/dnn/core/layers/cnn_layers.rb', line 328

def padding
  @padding
end

#pool_sizeObject (readonly)

Returns the value of attribute pool_size.



326
327
328
# File 'lib/dnn/core/layers/cnn_layers.rb', line 326

def pool_size
  @pool_size
end

#stridesObject (readonly)

Returns the value of attribute strides.



327
328
329
# File 'lib/dnn/core/layers/cnn_layers.rb', line 327

def strides
  @strides
end

Instance Method Details

#build(input_shape) ⇒ Object



345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
# File 'lib/dnn/core/layers/cnn_layers.rb', line 345

def build(input_shape)
  unless input_shape.length == 3
    raise DNNShapeError, "Input shape is #{input_shape}. But input shape must be 3 dimensional."
  end
  prev_h, prev_w = input_shape[0..1]
  @num_channel = input_shape[2]
  @pad_size = if @padding == true
                calc_conv2d_padding_size(prev_h, prev_w, *@pool_size, @strides)
              elsif @padding.is_a?(Array)
                @padding
              else
                [0, 0]
              end
  @out_size = calc_conv2d_out_size(prev_h, prev_w, *@pool_size, *@pad_size, @strides)
  super
end

#compute_output_shapeObject



362
363
364
# File 'lib/dnn/core/layers/cnn_layers.rb', line 362

def compute_output_shape
  [*@out_size, @num_channel]
end

#load_hash(hash) ⇒ Object



372
373
374
# File 'lib/dnn/core/layers/cnn_layers.rb', line 372

def load_hash(hash)
  initialize(hash[:pool_size], strides: hash[:strides], padding: hash[:padding])
end

#to_hashObject



366
367
368
369
370
# File 'lib/dnn/core/layers/cnn_layers.rb', line 366

def to_hash
  super(pool_size: @pool_size,
        strides: @strides,
        padding: @padding)
end