Class: DNN::Layers::Connection

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

Overview

It is a superclass of all connection layers.

Direct Known Subclasses

Conv2D, Dense

Instance Attribute Summary collapse

Attributes inherited from HasParamLayer

#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: Initializers::RandomNormal.new, bias_initializer: Initializers::Zeros.new, l1_lambda: 0, l2_lambda: 0) ⇒ Connection



117
118
119
120
121
122
123
124
125
126
127
128
# File 'lib/dnn/core/layers.rb', line 117

def initialize(weight_initializer: Initializers::RandomNormal.new,
               bias_initializer: Initializers::Zeros.new,
               l1_lambda: 0,
               l2_lambda: 0)
  super()
  @weight_initializer = weight_initializer
  @bias_initializer = bias_initializer
  @l1_lambda = l1_lambda
  @l2_lambda = l2_lambda
  @params[:weight] = @weight = LearningParam.new
  @params[:bias] = @bias = LearningParam.new
end

Instance Attribute Details

#l1_lambdaObject (readonly)

L1 regularization



114
115
116
# File 'lib/dnn/core/layers.rb', line 114

def l1_lambda
  @l1_lambda
end

#l2_lambdaObject (readonly)

L2 regularization



115
116
117
# File 'lib/dnn/core/layers.rb', line 115

def l2_lambda
  @l2_lambda
end

Instance Method Details

#dlassoObject



146
147
148
149
150
# File 'lib/dnn/core/layers.rb', line 146

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

#dridgeObject



152
153
154
# File 'lib/dnn/core/layers.rb', line 152

def dridge
  @l2_lambda * @weight.data
end

#lassoObject



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

def lasso
  if @l1_lambda > 0
    @l1_lambda * @weight.data.abs.sum
  else
    0
  end
end

#ridgeObject



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

def ridge
  if @l2_lambda > 0
    0.5 * @l2_lambda * (@weight.data**2).sum
  else
    0
  end
end

#to_hash(merge_hash) ⇒ Object



156
157
158
159
160
161
# File 'lib/dnn/core/layers.rb', line 156

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