class DNN::Layers::MaxPool2D

Public Instance Methods

backward_node(dy) click to toggle source
# File lib/dnn/core/layers/cnn_layers.rb, line 389
def backward_node(dy)
  dmax = Xumo::SFloat.zeros(dy.size * @pool_size.reduce(:*))
  dmax[@max_index.flatten] = dy.flatten
  dcol = dmax.reshape(dy.shape[0..2].reduce(:*), @pool_size.reduce(:*) * dy.shape[3])
  dx = col2im(dcol, @x_shape, *@out_size, *@pool_size, @strides)
  @padding ? zero_padding_bwd(dx, @pad_size) : dx
end
forward_node(x) click to toggle source
# File lib/dnn/core/layers/cnn_layers.rb, line 380
def forward_node(x)
  x = zero_padding(x, @pad_size) if @padding
  @x_shape = x.shape
  col = im2col(x, *@out_size, *@pool_size, @strides)
  col = col.reshape(x.shape[0] * @out_size.reduce(:*), @pool_size.reduce(:*), x.shape[3])
  @max_index = col.max_index(1)
  col.max(1).reshape(x.shape[0], *@out_size, x.shape[3])
end