Skip to content

Instantly share code, notes, and snippets.

@iwiwi
Created August 27, 2017 05:54
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save iwiwi/ed395866819446fe3cb090fad716cab0 to your computer and use it in GitHub Desktop.
Save iwiwi/ed395866819446fe3cb090fad716cab0 to your computer and use it in GitHub Desktop.
from chainer.training import extension
import signal
class LearningRateSignalHandler(extension.Extension):
trigger = 1, 'epoch'
def __init__(self, attr='lr', rate=0.1, signalnum=signal.SIGUSR1, optimizer=None):
self.attr = attr
self.rate = rate
self.signalnum = signalnum
self.optimizer = optimizer
self.signal_received = False
def initialize(self, trainer):
def handler(_, __):
self.signal_received = True
signal.signal(self.signalnum, handler)
def __call__(self, trainer):
if not self.signal_received:
return
self.signal_received = False
optimizer = self.optimizer or trainer.updater.get_optimizer('main')
current_value = getattr(optimizer, self.attr)
next_value = current_value * self.rate
setattr(optimizer, self.attr, next_value)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment