Class: DNN::Layers::Dense

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

Overview

Full connnection layer.

Instance Attribute Summary collapse

Attributes inherited from Connection

#bias_initializer, #l1_lambda, #l2_lambda, #weight_initializer

Attributes inherited from HasParamLayer

#params, #trainable

Attributes inherited from Layer

#input_shape

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Connection

#regularizers, #use_bias

Methods inherited from HasParamLayer

#build, #update

Methods inherited from Layer

#build, #built?

Constructor Details

#initialize(num_nodes, weight_initializer: Initializers::RandomNormal.new, bias_initializer: Initializers::Zeros.new, l1_lambda: 0, l2_lambda: 0, use_bias: true) ⇒ Dense

Returns a new instance of Dense.

Parameters:

  • num_nodes (Integer) —

    number of nodes.



189
190
191
192
193
194
195
196
197
198
# File 'lib/dnn/core/layers.rb', line 189

def initialize(num_nodes,
               weight_initializer: Initializers::RandomNormal.new,
               bias_initializer: Initializers::Zeros.new,
               l1_lambda: 0,
               l2_lambda: 0,
               use_bias: true)
  super(weight_initializer: weight_initializer, bias_initializer: bias_initializer,
        l1_lambda: l1_lambda, l2_lambda: l2_lambda, use_bias: use_bias)
  @num_nodes = num_nodes
end

Instance Attribute Details

#num_nodes ⇒ Integer (readonly)

Returns number of nodes.

Returns:

  • (Integer) —

    number of nodes.



177
178
179
# File 'lib/dnn/core/layers.rb', line 177

def num_nodes
  @num_nodes
end

Class Method Details

.load_hash(hash) ⇒ Object



179
180
181
182
183
184
185
186
# File 'lib/dnn/core/layers.rb', line 179

def self.load_hash(hash)
  self.new(hash[:num_nodes],
           weight_initializer: Utils.load_hash(hash[:weight_initializer]),
           bias_initializer: Utils.load_hash(hash[:bias_initializer]),
           l1_lambda: hash[:l1_lambda],
           l2_lambda: hash[:l2_lambda],
           use_bias: hash[:use_bias])
end

Instance Method Details

#backward(dout) ⇒ Object



207
208
209
210
211
# File 'lib/dnn/core/layers.rb', line 207

def backward(dout)
  @weight.grad = @x.transpose.dot(dout)
  @bias.grad = dout.sum(0) if @bias
  dout.dot(@weight.data.transpose)
end

#forward(x) ⇒ Object



200
201
202
203
204
205
# File 'lib/dnn/core/layers.rb', line 200

def forward(x)
  @x = x
  out = x.dot(@weight.data)
  out += @bias.data if @bias
  out
end

#output_shape ⇒ Object



213
214
215
# File 'lib/dnn/core/layers.rb', line 213

def output_shape
  [@num_nodes]
end

#to_hash ⇒ Object



217
218
219
# File 'lib/dnn/core/layers.rb', line 217

def to_hash
  super({num_nodes: @num_nodes})
end