Class: DNN::Layers::Connection

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

Overview

It is a superclass of all connection layers.

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

#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