Class: DNN::Layers::Dropout

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

Instance Attribute Summary collapse

Attributes inherited from Layer

#input_shape, #learning_phase

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Layer

#build, #built?, #output_shape

Constructor Details

#initialize(dropout_ratio = 0.5, seed: rand(1 << 31), use_scale: true) ⇒ Dropout

Returns a new instance of Dropout.



276
277
278
279
280
281
282
# File 'lib/dnn/core/layers.rb', line 276

def initialize(dropout_ratio = 0.5, seed: rand(1 << 31), use_scale: true)
  super()
  @dropout_ratio = dropout_ratio
  @seed = seed
  @use_scale = use_scale
  @mask = nil
end

Instance Attribute Details

#dropout_ratio ⇒ Float

Returns dropout ratio.

Returns:

  • (Float) —

    dropout ratio.



268
269
270
# File 'lib/dnn/core/layers.rb', line 268

def dropout_ratio
  @dropout_ratio
end

#use_scale ⇒ Float (readonly)

Returns Use 'weight scaling inference rule'.

Returns:

  • (Float) —

    Use 'weight scaling inference rule'.



270
271
272
# File 'lib/dnn/core/layers.rb', line 270

def use_scale
  @use_scale
end

Class Method Details

.from_hash(hash) ⇒ Object



272
273
274
# File 'lib/dnn/core/layers.rb', line 272

def self.from_hash(hash)
  self.new(hash[:dropout_ratio], seed: hash[:seed], use_scale: hash[:use_scale])
end

Instance Method Details

#backward(dy) ⇒ Object



295
296
297
298
# File 'lib/dnn/core/layers.rb', line 295

def backward(dy)
  dy[@mask] = 0
  dy
end

#forward(x) ⇒ Object



284
285
286
287
288
289
290
291
292
293
# File 'lib/dnn/core/layers.rb', line 284

def forward(x)
  if learning_phase
    Xumo::SFloat.srand(@seed)
    @mask = Xumo::SFloat.ones(*x.shape).rand < @dropout_ratio
    x[@mask] = 0
  else
    x *= (1 - @dropout_ratio) if @use_scale
  end
  x
end

#to_hash ⇒ Object



300
301
302
# File 'lib/dnn/core/layers.rb', line 300

def to_hash
  super({dropout_ratio: @dropout_ratio, seed: @seed, use_scale: @use_scale})
end