Class: DNN::Layers::Connection
- Inherits:
-
HasParamLayer
- Object
- Layer
- HasParamLayer
- DNN::Layers::Connection
- Includes:
- Initializers
- Defined in:
- lib/dnn/core/layers.rb
Overview
It is a superclass of all connection layers.
Instance Attribute Summary collapse
-
#l1_lambda ⇒ Object
readonly
L1 regularization.
-
#l2_lambda ⇒ Object
readonly
L2 regularization.
Attributes inherited from HasParamLayer
Instance Method Summary collapse
- #dlasso ⇒ Object
- #dridge ⇒ Object
-
#initialize(weight_initializer: nil, bias_initializer: nil, l1_lambda: 0, l2_lambda: 0) ⇒ Connection
constructor
A new instance of Connection.
- #lasso ⇒ Object
- #ridge ⇒ Object
- #to_hash(merge_hash) ⇒ Object
Methods inherited from HasParamLayer
Methods inherited from Layer
#build, #built?, #prev_layer, #shape
Constructor Details
#initialize(weight_initializer: nil, bias_initializer: nil, l1_lambda: 0, l2_lambda: 0) ⇒ Connection
Returns a new instance of Connection.
114 115 116 117 118 119 120 121 122 123 |
# File 'lib/dnn/core/layers.rb', line 114 def initialize(weight_initializer: nil, bias_initializer: nil, l1_lambda: 0, l2_lambda: 0) super() @weight_initializer = (weight_initializer || RandomNormal.new) @bias_initializer = (bias_initializer || Zeros.new) @l1_lambda = l1_lambda @l2_lambda = l2_lambda end |
Instance Attribute Details
#l1_lambda ⇒ Object (readonly)
L1 regularization
111 112 113 |
# File 'lib/dnn/core/layers.rb', line 111 def l1_lambda @l1_lambda end |
#l2_lambda ⇒ Object (readonly)
L2 regularization
112 113 114 |
# File 'lib/dnn/core/layers.rb', line 112 def l2_lambda @l2_lambda end |
Instance Method Details
#dlasso ⇒ Object
141 142 143 144 145 |
# File 'lib/dnn/core/layers.rb', line 141 def dlasso dlasso = Xumo::SFloat.ones(*@params[:weight].shape) dlasso[@params[:weight] < 0] = -1 @l1_lambda * dlasso end |
#dridge ⇒ Object
147 148 149 |
# File 'lib/dnn/core/layers.rb', line 147 def dridge @l2_lambda * @params[:weight] end |
#lasso ⇒ Object
125 126 127 128 129 130 131 |
# File 'lib/dnn/core/layers.rb', line 125 def lasso if @l1_lambda > 0 @l1_lambda * @params[:weight].abs.sum else 0 end end |
#ridge ⇒ Object
133 134 135 136 137 138 139 |
# File 'lib/dnn/core/layers.rb', line 133 def ridge if @l2_lambda > 0 0.5 * @l2_lambda * (@params[:weight]**2).sum else 0 end end |
#to_hash(merge_hash) ⇒ Object
151 152 153 154 155 156 |
# File 'lib/dnn/core/layers.rb', line 151 def to_hash(merge_hash) super({weight_initializer: @weight_initializer.to_hash, bias_initializer: @bias_initializer.to_hash, l1_lambda: @l1_lambda, l2_lambda: @l2_lambda}.merge(merge_hash)) end |