Class: Chainer::Functions::Noise::Dropout
- Inherits:
-
Chainer::FunctionNode
- Object
- Chainer::FunctionNode
- Chainer::Functions::Noise::Dropout
- Defined in:
- lib/chainer/functions/noise/dropout.rb
Instance Attribute Summary collapse
-
#mask ⇒ Object
readonly
Returns the value of attribute mask.
Attributes inherited from Chainer::FunctionNode
Class Method Summary collapse
-
.dropout(x, ratio: 0.5) ⇒ Chainer::Variable
Drops elements of input variable randomly.
Instance Method Summary collapse
- #backward(x, gy) ⇒ Object
- #forward(x) ⇒ Object
-
#initialize(dropout_ratio) ⇒ Dropout
constructor
A new instance of Dropout.
Methods inherited from Chainer::FunctionNode
#apply, #backward_accumulate, #forward_cpu, #get_retained_inputs, #get_retained_outputs, #label, #output_data, #retain_inputs, #retain_outputs, #unchain
Constructor Details
#initialize(dropout_ratio) ⇒ Dropout
Returns a new instance of Dropout.
19 20 21 22 23 24 |
# File 'lib/chainer/functions/noise/dropout.rb', line 19 def initialize(dropout_ratio) if dropout_ratio < 0 || dropout_ratio >= 1.0 raise 'dropout_ratio must be in the range [0, 1)' end @dropout_ratio = dropout_ratio end |
Instance Attribute Details
#mask ⇒ Object (readonly)
Returns the value of attribute mask.
5 6 7 |
# File 'lib/chainer/functions/noise/dropout.rb', line 5 def mask @mask end |
Class Method Details
.dropout(x, ratio: 0.5) ⇒ Chainer::Variable
Drops elements of input variable randomly.
This function drops input elements randomly with probability ‘ratio` and scales the remaining elements by factor `1 / (1 - ratio)`. In testing mode, it does nothing and just returns `x`.
15 16 17 |
# File 'lib/chainer/functions/noise/dropout.rb', line 15 def self.dropout(x, ratio: 0.5) Chainer.configuration.train ? self.new(ratio).apply([x])[0] : Chainer::Variable.as_variable(x) end |
Instance Method Details
#backward(x, gy) ⇒ Object
38 39 40 |
# File 'lib/chainer/functions/noise/dropout.rb', line 38 def backward(x, gy) DropoutGrad.new(@mask).apply(gy) end |
#forward(x) ⇒ Object
26 27 28 29 30 31 32 33 34 35 36 |
# File 'lib/chainer/functions/noise/dropout.rb', line 26 def forward(x) unless self.instance_variable_defined?(:@mask) scale = x[0].class[*[1.0 / (1 - @dropout_ratio)]][0] flag = x[0].class.new(*x[0].shape).rand >= @dropout_ratio @mask = x[0].class.zeros(*x[0].shape) @mask[flag] = 1 @mask *= scale end [x[0] * @mask] end |