Dropout layer

class layers.dropout_layer.Dropout_layer(prob, input_shape=None, **kwargs)[source]

Bases: NumPyNet.layers.base.BaseLayer

Dropout Layer

Drop a random selection of input pixels. This helps avoid overfitting.

Parameters
  • prob (float,) – probability for each entry to be set to zero. It Ranges 0. to 1.

  • input_shape (tuple (default=None)) – Shape of the input in the format (batch, w, h, c), None is used when the layer is part of a Network model.

Example

>>> import os
>>>
>>> import pylab as plt
>>> from PIL import Image
>>>
>>> np.random.seed(123)
>>>
>>> img_2_float = lambda im : ((im - im.min()) * (1./(im.max() - im.min()) * 1.)).astype(float)
>>> float_2_img = lambda im : ((im - im.min()) * (1./(im.max() - im.min()) * 255.)).astype(np.uint8)
>>>
>>> filename = os.path.join(os.path.dirname(__file__), '..', '..', 'data', 'dog.jpg')
>>> inpt = np.asarray(Image.open(filename), dtype=float)
>>> inpt.setflags(write=1)
>>> inpt = img_2_float(inpt)
>>>
>>> inpt = np.expand_dims(inpt, axis=0)
>>>
>>> prob = 0.1
>>>
>>> layer = Dropout_layer(input_shape=inpt.shape, prob=prob)
>>>
>>> # FORWARD
>>>
>>> layer.forward(inpt)
>>> forward_out = layer.output
>>>
>>> print(layer)
>>>
>>> # BACKWARD
>>>
>>> delta = np.ones(shape=inpt.shape, dtype=float)
>>> layer.delta = np.ones(shape=layer.out_shape, dtype=float)
>>> layer.backward(delta)
>>>
>>> # Visualitations
>>>
>>> fig, (ax1, ax2, ax3) = plt.subplots(nrows=1, ncols=3, figsize=(10, 5))
>>> fig.subplots_adjust(left=0.1, right=0.95, top=0.95, bottom=0.15)
>>>
>>> fig.suptitle('Dropout Layer Drop Probability : {}'.format(prob))
>>> # Shown first image of the batch
>>> ax1.imshow(float_2_img(inpt[0]))
>>> ax1.set_title('Original image')
>>> ax1.axis('off')
>>>
>>> ax2.imshow(float_2_img(layer.output[0]))
>>> ax2.set_title('Forward')
>>> ax2.axis('off')
>>>
>>> ax3.imshow(float_2_img(delta[0]))
>>> ax3.set_title('Backward')
>>> ax3.axis('off')
>>>
>>> fig.tight_layout()
>>> plt.show()
../../_images/dropout_prob10.png

References

  • TODO

backward(delta=None)[source]

Backward function of the Dropout layer Given the same mask as the layer it backprogates delta only to those pixel which values has not been set to zero in the forward function

Parameters

delta (array-like) – delta array of shape (batch, w, h, c). Global delta to be backpropagated.

Return type

self

forward(inpt)[source]

Forward function of the Dropout layer It create a random mask for every input in the batch and set to zero the chosen values. Other pixels are scaled with the inverse of (1 - prob)

Parameters

inpt (array-like) – Input batch of images in format (batch, in_w, in_h, in _c)

Return type

self

property out_shape

Get the output shape

Returns

out_shape – Tuple as (batch, out_w, out_h, out_c)

Return type

tuple