Class: Chainer::Optimizer

Inherits:
Object
  • Object
show all
Defined in:
lib/chainer/optimizer.rb

Direct Known Subclasses

GradientMethod

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#targetObject

Returns the value of attribute target.


3
4
5
# File 'lib/chainer/optimizer.rb', line 3

def target
  @target
end

Instance Method Details

#_call_hook(hook) ⇒ Object


32
33
34
35
36
37
38
39
40
# File 'lib/chainer/optimizer.rb', line 32

def _call_hook(hook)
  if hook.methods.include?(:call_for_each_param)
    @target.params do |param|
      hook.(param.update_rule, param)
    end
  else
    hook.(self)
  end
end

#add_hook(hook, name: nil) ⇒ Object


13
14
15
16
17
18
19
20
21
22
23
# File 'lib/chainer/optimizer.rb', line 13

def add_hook(hook, name: nil)
  if !hook.class.method_defined?(:call)
    raise TypeError, 'hook function is not callable'
  end

  name = hook.name if name.nil?
  if @hooks[name]
    raise TypeError, "hook #{name} already exists"
  end
  @hooks[name] = hook
end

#call_hooksObject


25
26
27
28
29
30
# File 'lib/chainer/optimizer.rb', line 25

def call_hooks
  @hooks.values.each do |hook|
    _call_hook(hook)
    reallocate_cleared_grads
  end
end

#serialize(serializer) ⇒ Object


42
43
44
45
46
47
48
49
50
51
# File 'lib/chainer/optimizer.rb', line 42

def serialize(serializer)
  @t = serializer.('t', @t)
  @epoch = serializer.('epoch', @epoch)
  
  @target.namedparams() do |(name, param)|
    if param.respond_to?(:update_rule)
      param.update_rule.serialize(serializer[name.to_s])
    end
  end
end

#setup(link) ⇒ Object


5
6
7
8
9
10
11
# File 'lib/chainer/optimizer.rb', line 5

def setup(link)
  @target = link
  @t = 0
  @epoch = 0
  
  @hooks = {}
end