hapi/model step learning rate on batch end. (#27991)

* hapi/model step learning rate on batch end. test=develop
swt-req
Kaipeng Deng 4 years ago committed by GitHub
parent 5f04875c30
commit a5f65d516f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -453,6 +453,12 @@ class StaticGraphAdapter(object):
if len(name) > 0: if len(name) > 0:
rets.insert(i, feed[name]) rets.insert(i, feed[name])
# step learning rate scheduler on each batch end
if self.model._optimizer and \
isinstance(self.model._optimizer._learning_rate,
paddle.optimizer.lr.LRScheduler):
self.model._optimizer._learning_rate.step()
# LoDTensor cannot be fetch as numpy directly # LoDTensor cannot be fetch as numpy directly
rets = [np.array(v) for v in rets] rets = [np.array(v) for v in rets]
if self.mode == 'test': if self.mode == 'test':
@ -652,6 +658,13 @@ class DynamicGraphAdapter(object):
self.model._optimizer.minimize(final_loss) self.model._optimizer.minimize(final_loss)
self.model.network.clear_gradients() self.model.network.clear_gradients()
# step learning rate scheduler on each batch end
if self.model._optimizer and \
isinstance(self.model._optimizer._learning_rate,
paddle.optimizer.lr.LRScheduler):
self.model._optimizer._learning_rate.step()
metrics = [] metrics = []
for metric in self.model._metrics: for metric in self.model._metrics:
metric_outs = metric.compute(*(to_list(outputs) + labels)) metric_outs = metric.compute(*(to_list(outputs) + labels))
@ -1461,11 +1474,6 @@ class Model(object):
cbks.on_end('eval', eval_logs) cbks.on_end('eval', eval_logs)
# step learning rate scheduler on each epcoh end
if isinstance(self._optimizer._learning_rate,
paddle.optimizer.lr.LRScheduler):
self._optimizer._learning_rate.step()
cbks.on_end('train', logs) cbks.on_end('train', logs)
self._test_dataloader = None self._test_dataloader = None

@ -631,6 +631,7 @@ class TestModelWithLRScheduler(unittest.TestCase):
parameters=parameters) parameters=parameters)
return optimizer return optimizer
# dynamic test
device = paddle.set_device('cpu') device = paddle.set_device('cpu')
fluid.enable_dygraph(device) fluid.enable_dygraph(device)
net = MyModel() net = MyModel()
@ -643,8 +644,19 @@ class TestModelWithLRScheduler(unittest.TestCase):
dataset = MyDataset() dataset = MyDataset()
model.fit(dataset, dataset, batch_size=4, epochs=10, num_workers=0) model.fit(dataset, dataset, batch_size=4, epochs=10, num_workers=0)
# static test
paddle.enable_static() paddle.enable_static()
net = MyModel()
inputs = [InputSpec([None, 20], 'float32', 'x')]
labels = [InputSpec([None, 1], 'int64', 'label')]
optim = make_optimizer(net.parameters())
model = Model(net, inputs, labels)
model.prepare(optimizer=optim, loss=CrossEntropyLoss(reduction="sum"))
dataset = MyDataset()
model.fit(dataset, dataset, batch_size=4, epochs=10, num_workers=0)
class TestRaiseError(unittest.TestCase): class TestRaiseError(unittest.TestCase):
def test_input_without_name(self): def test_input_without_name(self):

Loading…
Cancel
Save