本文整理汇总了Python中torch.optim.lr_scheduler.ReduceLROnPlateau方法的典型用法代码示例。如果您正苦于以下问题:Python lr_scheduler.ReduceLROnPlateau方法的具体用法?Python lr_scheduler.ReduceLROnPlateau怎么用?Python lr_scheduler.ReduceLROnPlateau使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类torch.optim.lr_scheduler
的用法示例。
在下文中一共展示了lr_scheduler.ReduceLROnPlateau方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: step_ReduceLROnPlateau
# 需要导入模块: from torch.optim import lr_scheduler [as 别名]
# 或者: from torch.optim.lr_scheduler import ReduceLROnPlateau [as 别名]
def step_ReduceLROnPlateau(self, metrics, epoch=None):
if epoch is None:
epoch = self.last_epoch + 1
self.last_epoch = epoch if epoch != 0 else 1
# ReduceLROnPlateau is called at the end of epoch, whereas others are called at beginning
if self.last_epoch <= self.total_epoch:
warmup_lr = [
base_lr * ((self.multiplier - 1.) * self.last_epoch / self.total_epoch + 1.)
for base_lr in self.base_lrs
]
for param_group, lr in zip(self.optimizer.param_groups, warmup_lr):
param_group['lr'] = lr
else:
if epoch is None:
self.after_scheduler.step(metrics, None)
else:
self.after_scheduler.step(metrics, epoch - self.total_epoch)
示例2: get_optim
# 需要导入模块: from torch.optim import lr_scheduler [as 别名]
# 或者: from torch.optim.lr_scheduler import ReduceLROnPlateau [as 别名]
def get_optim(lr):
# Lower the learning rate on the VGG fully connected layers by 1/10th. It's a hack, but it helps
# stabilize the models.
fc_params = [p for n,p in detector.named_parameters() if n.startswith('roi_fmap') and p.requires_grad]
non_fc_params = [p for n,p in detector.named_parameters() if not n.startswith('roi_fmap') and p.requires_grad]
params = [{'params': fc_params, 'lr': lr / 10.0}, {'params': non_fc_params}]
# params = [p for n,p in detector.named_parameters() if p.requires_grad]
if conf.adam:
optimizer = optim.Adam(params, weight_decay=conf.l2, lr=lr, eps=1e-3)
else:
optimizer = optim.SGD(params, weight_decay=conf.l2, lr=lr, momentum=0.9)
scheduler = ReduceLROnPlateau(optimizer, 'max', patience=3, factor=0.1,
verbose=True, threshold=0.0001, threshold_mode='abs', cooldown=1)
return optimizer, scheduler
示例3: __init__
# 需要导入模块: from torch.optim import lr_scheduler [as 别名]
# 或者: from torch.optim.lr_scheduler import ReduceLROnPlateau [as 别名]
def __init__(self, monitor='val_loss', better='auto', factor=0.1,
patience=10, verbose=False, threshold=1e-4,
threshold_mode='rel', cooldown=0, min_lr=0, eps=1e-8):
self.monitor = monitor
self.patience = patience
self.better, self.better_comp, self.best_value = init_better(
better, monitor)
super().__init__(
lambda opt: _scheduler.ReduceLROnPlateau(opt,
mode=self.better,
factor=factor,
patience=patience,
verbose=verbose,
threshold=threshold,
threshold_mode=threshold_mode,
cooldown=cooldown,
min_lr=min_lr,
eps=eps),
step_on_iteration=False
)
示例4: on_epoch_end
# 需要导入模块: from torch.optim import lr_scheduler [as 别名]
# 或者: from torch.optim.lr_scheduler import ReduceLROnPlateau [as 别名]
def on_epoch_end(self, net, **kwargs):
if not self.step_every == 'epoch':
return
epoch = len(net.history)
if isinstance(self.lr_scheduler_, ReduceLROnPlateau):
if callable(self.monitor):
score = self.monitor(net)
else:
if self.lr_scheduler_.mode == 'max':
score = -np.inf
elif self.lr_scheduler_.mode == 'min':
score = np.inf
else:
score = net.history[-1, self.monitor]
self.lr_scheduler_.step(score, epoch)
# ReduceLROnPlateau does not expose the current lr so it can't be recorded
else:
if self.event_name is not None and hasattr(
self.lr_scheduler_, "get_last_lr"):
net.history.record(self.event_name,
self.lr_scheduler_.get_last_lr()[0])
self.lr_scheduler_.step(epoch)
示例5: get_scheduler
# 需要导入模块: from torch.optim import lr_scheduler [as 别名]
# 或者: from torch.optim.lr_scheduler import ReduceLROnPlateau [as 别名]
def get_scheduler(optimizer, opt):
if opt.lr_policy == 'lambda':
def lambda_rule(epoch):
lr_l = 1.0 - max(0, epoch-
opt.niter) / float(opt.niter_decay + 1)
return lr_l
scheduler = lr_scheduler.LambdaLR(optimizer, lr_lambda=lambda_rule)
elif opt.lr_policy == 'step':
scheduler = lr_scheduler.StepLR(
optimizer, step_size=opt.lr_decay_iters, gamma=0.5)
elif opt.lr_policy == 'plateau':
scheduler = lr_scheduler.ReduceLROnPlateau(
optimizer, mode='min', factor=0.2, threshold=0.01, patience=5)
elif opt.lr_policy == 'cosine':
scheduler = lr_scheduler.CosineAnnealingLR(
optimizer, T_max=opt.niter, eta_min=0)
else:
return NotImplementedError('learning rate policy [%s] is not implemented', opt.lr_policy)
return scheduler
示例6: _optimizers_schedulers
# 需要导入模块: from torch.optim import lr_scheduler [as 别名]
# 或者: from torch.optim.lr_scheduler import ReduceLROnPlateau [as 别名]
def _optimizers_schedulers(self, lr, lr_noise):
"""Initialize Adam optimizers and schedulers (ReduceLROnPlateau)
Args:
lr (float): learning rate for NN parameters `w`
lr_noise (float): learning rate for noise precision `log_beta`
"""
optimizers = []
schedulers = []
for i in range(self.n_samples):
parameters = [{'params': [self.bayes_nn[i].log_beta], 'lr': lr_noise},
{'params': self.bayes_nn[i].features.parameters()}]
optimizer_i = torch.optim.Adam(parameters, lr=lr)
optimizers.append(optimizer_i)
schedulers.append(ReduceLROnPlateau(optimizer_i,
mode='min', factor=0.1, patience=10, verbose=True))
return optimizers, schedulers
示例7: get_optim
# 需要导入模块: from torch.optim import lr_scheduler [as 别名]
# 或者: from torch.optim.lr_scheduler import ReduceLROnPlateau [as 别名]
def get_optim(lr):
# Lower the learning rate on the VGG fully connected layers by 1/10th. It's a hack, but it helps
# stabilize the models.
fc_params = [p for n,p in detector.named_parameters() if n.startswith('roi_fmap') and p.requires_grad]
non_fc_params = [p for n,p in detector.named_parameters() if not n.startswith('roi_fmap') and p.requires_grad]
params = [{'params': fc_params, 'lr': lr / 10.0}, {'params': non_fc_params}]
# params = [p for n,p in detector.named_parameters() if p.requires_grad]
if conf.adam:
optimizer = optim.Adadelta(params, weight_decay=conf.l2, lr=lr, eps=1e-3)
else:
optimizer = optim.SGD(params, weight_decay=conf.l2, lr=lr, momentum=0.9)
#scheduler = StepLR(optimizer, step_size=1, gamma=0.5)
scheduler = ReduceLROnPlateau(optimizer, 'max', patience=2, factor=0.5,
verbose=True, threshold=0.0001, threshold_mode='abs', cooldown=1)
return optimizer, scheduler
示例8: test_scheduler_validate
# 需要导入模块: from torch.optim import lr_scheduler [as 别名]
# 或者: from torch.optim.lr_scheduler import ReduceLROnPlateau [as 别名]
def test_scheduler_validate(ray_start_2_cpus): # noqa: F811
from torch.optim.lr_scheduler import ReduceLROnPlateau
trainer = TorchTrainer(
model_creator=model_creator,
data_creator=data_creator,
optimizer_creator=optimizer_creator,
loss_creator=lambda config: nn.MSELoss(),
scheduler_creator=lambda optimizer, cfg: ReduceLROnPlateau(optimizer),
scheduler_step_freq="manual",
training_operator_cls=_TestingOperator)
trainer.update_scheduler(0.5)
trainer.update_scheduler(0.5)
assert all(
trainer.apply_all_operators(
lambda op: op.schedulers[0].last_epoch == 2))
trainer.shutdown()
示例9: _init_optimizer
# 需要导入模块: from torch.optim import lr_scheduler [as 别名]
# 或者: from torch.optim.lr_scheduler import ReduceLROnPlateau [as 别名]
def _init_optimizer(self):
parameters = [p for p in self.network.parameters() if p.requires_grad]
if self.config['use_bert'] and self.config.get('finetune_bert', None):
parameters += [p for p in self.config['bert_model'].parameters() if p.requires_grad]
if self.config['optimizer'] == 'sgd':
self.optimizer = optim.SGD(parameters, self.config['learning_rate'],
momentum=self.config['momentum'],
weight_decay=self.config['weight_decay'])
elif self.config['optimizer'] == 'adam':
self.optimizer = optim.Adam(parameters, lr=self.config['learning_rate'])
elif self.config['optimizer'] == 'adamax':
self.optimizer = optim.Adamax(parameters, lr=self.config['learning_rate'])
else:
raise RuntimeError('Unsupported optimizer: %s' % self.config['optimizer'])
self.scheduler = ReduceLROnPlateau(self.optimizer, mode='max', factor=0.5, \
patience=2, verbose=True)
示例10: __define_optimizer
# 需要导入模块: from torch.optim import lr_scheduler [as 别名]
# 或者: from torch.optim.lr_scheduler import ReduceLROnPlateau [as 别名]
def __define_optimizer(self, learning_rate, weight_decay,
lr_drop_factor, lr_drop_patience, optimizer='Adam'):
assert optimizer in ['RMSprop', 'Adam', 'Adadelta', 'SGD']
parameters = ifilter(lambda p: p.requires_grad,
self.model.parameters())
if optimizer == 'RMSprop':
self.optimizer = optim.RMSprop(
parameters, lr=learning_rate, weight_decay=weight_decay)
elif optimizer == 'Adadelta':
self.optimizer = optim.Adadelta(
parameters, lr=learning_rate, weight_decay=weight_decay)
elif optimizer == 'Adam':
self.optimizer = optim.Adam(
parameters, lr=learning_rate, weight_decay=weight_decay)
elif optimizer == 'SGD':
self.optimizer = optim.SGD(
parameters, lr=learning_rate, momentum=0.9,
weight_decay=weight_decay)
self.lr_scheduler = ReduceLROnPlateau(
self.optimizer, mode='min', factor=lr_drop_factor,
patience=lr_drop_patience, verbose=True)
示例11: create_scheduler
# 需要导入模块: from torch.optim import lr_scheduler [as 别名]
# 或者: from torch.optim.lr_scheduler import ReduceLROnPlateau [as 别名]
def create_scheduler(args, optimizer, datasets):
if args.scheduler == 'step':
scheduler = lr_scheduler.MultiStepLR(optimizer, milestones=eval(args.milestones), gamma=args.lr_decay)
elif args.scheduler == 'poly':
total_step = (len(datasets['train']) / args.batch + 1) * args.epochs
scheduler = lr_scheduler.LambdaLR(optimizer, lambda x: (1-x/total_step) ** args.power)
elif args.scheduler == 'plateau':
scheduler = lr_scheduler.ReduceLROnPlateau(optimizer, mode='max', factor=args.lr_decay, patience=args.patience)
elif args.scheduler == 'constant':
scheduler = lr_scheduler.LambdaLR(optimizer, lambda x: 1)
elif args.scheduler == 'cosine':
scheduler = lr_scheduler.CosineAnnealingLR(optimizer, args.T_max, args.min_lr)
return scheduler
示例12: __init__
# 需要导入模块: from torch.optim import lr_scheduler [as 别名]
# 或者: from torch.optim.lr_scheduler import ReduceLROnPlateau [as 别名]
def __init__(self, hidden_size, max_len, max_r, lang, path, task, lr, n_layers, dropout, unk_mask):
super(Mem2Seq, self).__init__()
self.name = "Mem2Seq"
self.task = task
self.input_size = lang.n_words
self.output_size = lang.n_words
self.hidden_size = hidden_size
self.max_len = max_len ## max input
self.max_r = max_r ## max responce len
self.lang = lang
self.lr = lr
self.n_layers = n_layers
self.dropout = dropout
self.unk_mask = unk_mask
self.root = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
self.encoder = EncoderMemNN(lang.n_words, hidden_size, n_layers, self.dropout, self.unk_mask)
self.decoder = DecoderMemNN(lang.n_words, hidden_size, n_layers, self.dropout, self.unk_mask)
if path:
logging.info("MODEL {} LOADED".format(str(path)))
self.encoder.load_state_dict(torch.load(str(path)+'/enc.th'))
self.decoder.load_state_dict(torch.load(str(path)+'/dec.th'))
# Initialize optimizers and criterion
self.encoder_optimizer = optim.Adam(self.encoder.parameters(), lr=lr)
self.decoder_optimizer = optim.Adam(self.decoder.parameters(), lr=lr)
self.scheduler = lr_scheduler.ReduceLROnPlateau(self.decoder_optimizer,mode='max',factor=0.5,patience=1,min_lr=0.0001, verbose=True)
self.criterion = nn.MSELoss()
self.loss = 0
self.loss_ptr = 0
self.loss_vac = 0
self.print_every = 1
self.batch_size = 0
# Move models to GPU
if USE_CUDA:
self.encoder.cuda()
self.decoder.cuda()
示例13: __init__
# 需要导入模块: from torch.optim import lr_scheduler [as 别名]
# 或者: from torch.optim.lr_scheduler import ReduceLROnPlateau [as 别名]
def __init__(self, hidden_size, max_len, max_r, lang, path, lr, n_layers, dropout):
super(Mem2Seq, self).__init__()
self.name = "Mem2Seq"
self.input_size = lang.n_words
self.output_size = lang.n_words
self.hidden_size = hidden_size
self.max_len = max_len ## max input
self.max_r = max_r ## max responce len
self.lang = lang
self.lr = lr
self.n_layers = n_layers
self.dropout = dropout
if path:
if USE_CUDA:
logging.info("MODEL {} LOADED".format(str(path)))
self.encoder = torch.load(str(path)+'/enc.th')
self.decoder = torch.load(str(path)+'/dec.th')
else:
logging.info("MODEL {} LOADED".format(str(path)))
self.encoder = torch.load(str(path)+'/enc.th',lambda storage, loc: storage)
self.decoder = torch.load(str(path)+'/dec.th',lambda storage, loc: storage)
else:
self.encoder = EncoderMemNN(lang.n_words, hidden_size, n_layers, self.dropout)
self.decoder = DecoderrMemNN(lang.n_words, hidden_size, n_layers, self.dropout)
# Initialize optimizers and criterion
self.encoder_optimizer = optim.Adam(self.encoder.parameters(), lr=lr)
self.decoder_optimizer = optim.Adam(self.decoder.parameters(), lr=lr)
self.scheduler = lr_scheduler.ReduceLROnPlateau(self.decoder_optimizer,mode='max',factor=0.5,patience=1,min_lr=0.0001, verbose=True)
self.criterion = nn.MSELoss()
self.loss = 0
self.loss_gate = 0
self.loss_ptr = 0
self.loss_vac = 0
self.print_every = 1
self.batch_size = 0
# Move models to GPU
if USE_CUDA:
self.encoder.cuda()
self.decoder.cuda()
示例14: get_scheduler
# 需要导入模块: from torch.optim import lr_scheduler [as 别名]
# 或者: from torch.optim.lr_scheduler import ReduceLROnPlateau [as 别名]
def get_scheduler(optimizer, opt):
"""Return a learning rate scheduler
Parameters:
optimizer -- the optimizer of the network
opt (option class) -- stores all the experiment flags; needs to be a subclass of BaseOptions.
opt.lr_policy is the name of learning rate policy: linear | step | plateau | cosine
For 'linear', we keep the same learning rate for the first <opt.niter> epochs
and linearly decay the rate to zero over the next <opt.niter_decay> epochs.
For other schedulers (step, plateau, and cosine), we use the default PyTorch schedulers.
See https://pytorch.org/docs/stable/optim.html for more details.
"""
if opt.lr_policy == 'linear':
def lambda_rule(epoch):
lr_l = 1.0 - max(0, epoch + opt.epoch_count - opt.niter) / float(opt.niter_decay + 1)
return lr_l
scheduler = lr_scheduler.LambdaLR(optimizer, lr_lambda=lambda_rule)
elif opt.lr_policy == 'step':
scheduler = lr_scheduler.StepLR(optimizer, step_size=opt.lr_decay_iters, gamma=0.1)
elif opt.lr_policy == 'plateau':
scheduler = lr_scheduler.ReduceLROnPlateau(optimizer, mode='min', factor=0.2, threshold=0.01, patience=5)
elif opt.lr_policy == 'cosine':
scheduler = lr_scheduler.CosineAnnealingLR(optimizer, T_max=opt.niter, eta_min=0)
else:
return NotImplementedError('learning rate policy [%s] is not implemented', opt.lr_policy)
return scheduler
示例15: get_scheduler
# 需要导入模块: from torch.optim import lr_scheduler [as 别名]
# 或者: from torch.optim.lr_scheduler import ReduceLROnPlateau [as 别名]
def get_scheduler(optimizer, opt):
if opt.lr_policy == 'lambda':
def lambda_rule(epoch):
lr_l = 1.0 - max(0, epoch + 1 + opt.epoch_count - opt.niter) / float(opt.niter_decay + 1)
return lr_l
scheduler = lr_scheduler.LambdaLR(optimizer, lr_lambda=lambda_rule)
elif opt.lr_policy == 'step':
scheduler = lr_scheduler.StepLR(optimizer, step_size=opt.lr_decay_iters, gamma=0.1)
elif opt.lr_policy == 'plateau':
scheduler = lr_scheduler.ReduceLROnPlateau(optimizer, mode='min', factor=0.2, threshold=0.01, patience=5)
else:
return NotImplementedError('learning rate policy [%s] is not implemented', opt.lr_policy)
return scheduler