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, RNN

Instance Attribute Summary collapse

Attributes inherited from HasParamLayer

#params, #trainable

Attributes inherited from Layer

#input_shape

Instance Method Summary collapse

Methods inherited from HasParamLayer

#build, #update

Methods inherited from Layer

#backward, #build, #built?, #forward, #output_shape

Constructor Details

#initialize(weight_initializer: Initializers::RandomNormal.new, bias_initializer: Initializers::Zeros.new, l1_lambda: 0, l2_lambda: 0) ⇒ Connection

Returns a new instance of Connection.



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

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 = Param.new
  @params[:bias] = @bias = Param.new
end

Instance Attribute Details

#bias_initializer ⇒ Object (readonly)

Returns the value of attribute bias_initializer.



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

def bias_initializer
  @bias_initializer
end

#l1_lambda ⇒ Object (readonly)

L1 regularization



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

def l1_lambda
  @l1_lambda
end

#l2_lambda ⇒ Object (readonly)

L2 regularization



111
112
113
# File 'lib/dnn/core/layers.rb', line 111

def l2_lambda
  @l2_lambda
end

#weight_initializer ⇒ Object (readonly)

Returns the value of attribute weight_initializer.



112
113
114
# File 'lib/dnn/core/layers.rb', line 112

def weight_initializer
  @weight_initializer
end

Instance Method Details

#d_lasso ⇒ Object



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

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

#d_ridge ⇒ Object



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

def d_ridge
  if @l2_lambda > 0
    @weight.grad += @l2_lambda * @weight.data
  end
end

#lasso ⇒ Object



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

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

#ridge ⇒ Object



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

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

#to_hash(merge_hash) ⇒ Object



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

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