Class: DNN::Layers::Connection

Inherits:
HasParamLayer show all
Includes:
Initializers
Defined in:
lib/dnn/core/layers.rb

Direct Known Subclasses

Conv2D, Dense, RNN

Instance Attribute Summary collapse

Attributes inherited from HasParamLayer

#grads, #params, #trainable

Instance Method Summary collapse

Methods inherited from HasParamLayer

#build, #update

Methods inherited from Layer

#backward, #build, #built?, #forward, #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.



111
112
113
114
115
116
117
118
119
120
# File 'lib/dnn/core/layers.rb', line 111

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)

Returns the value of attribute l1_lambda.



108
109
110
# File 'lib/dnn/core/layers.rb', line 108

def l1_lambda
  @l1_lambda
end

#l2_lambda ⇒ Object (readonly)

Returns the value of attribute l2_lambda.



109
110
111
# File 'lib/dnn/core/layers.rb', line 109

def l2_lambda
  @l2_lambda
end

Instance Method Details

#dlasso ⇒ Object



138
139
140
141
142
# File 'lib/dnn/core/layers.rb', line 138

def dlasso
  dlasso = Xumo::SFloat.ones(*@params[:weight].shape)
  dlasso[@params[:weight] < 0] = -1
  @l1_lambda * dlasso
end

#dridge ⇒ Object



144
145
146
# File 'lib/dnn/core/layers.rb', line 144

def dridge
  @l2_lambda * @params[:weight]
end

#lasso ⇒ Object



122
123
124
125
126
127
128
# File 'lib/dnn/core/layers.rb', line 122

def lasso
  if @l1_lambda > 0
    @l1_lambda * @params[:weight].abs.sum
  else
    0
  end
end

#ridge ⇒ Object



130
131
132
133
134
135
136
# File 'lib/dnn/core/layers.rb', line 130

def ridge
  if @l2_lambda > 0
    0.5 * @l2_lambda * (@params[:weight]**2).sum
  else
    0
  end
end

#to_hash(merge_hash) ⇒ Object



148
149
150
151
152
153
# File 'lib/dnn/core/layers.rb', line 148

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