| 
									
										
										
										
											2020-10-13 17:13:33 +08:00
										 |  |  | # copyright (c) 2020 PaddlePaddle Authors. All Rights Reserve. | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | # Licensed under the Apache License, Version 2.0 (the "License"); | 
					
						
							|  |  |  | # you may not use this file except in compliance with the License. | 
					
						
							|  |  |  | # You may obtain a copy of the License at | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | #    http://www.apache.org/licenses/LICENSE-2.0 | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | # Unless required by applicable law or agreed to in writing, software | 
					
						
							|  |  |  | # distributed under the License is distributed on an "AS IS" BASIS, | 
					
						
							|  |  |  | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
					
						
							|  |  |  | # See the License for the specific language governing permissions and | 
					
						
							|  |  |  | # limitations under the License. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | from __future__ import absolute_import | 
					
						
							|  |  |  | from __future__ import division | 
					
						
							|  |  |  | from __future__ import print_function | 
					
						
							|  |  |  | from __future__ import unicode_literals | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | from paddle import optimizer as optim | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class Momentum(object): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Simple Momentum optimizer with velocity state. | 
					
						
							|  |  |  |     Args: | 
					
						
							|  |  |  |         learning_rate (float|Variable) - The learning rate used to update parameters. | 
					
						
							|  |  |  |             Can be a float value or a Variable with one float value as data element. | 
					
						
							|  |  |  |         momentum (float) - Momentum factor. | 
					
						
							|  |  |  |         regularization (WeightDecayRegularizer, optional) - The strategy of regularization. | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-12-14 12:19:33 +08:00
										 |  |  |     def __init__(self, | 
					
						
							|  |  |  |                  learning_rate, | 
					
						
							|  |  |  |                  momentum, | 
					
						
							|  |  |  |                  weight_decay=None, | 
					
						
							|  |  |  |                  grad_clip=None, | 
					
						
							|  |  |  |                  **args): | 
					
						
							| 
									
										
										
										
											2020-10-13 17:13:33 +08:00
										 |  |  |         super(Momentum, self).__init__() | 
					
						
							|  |  |  |         self.learning_rate = learning_rate | 
					
						
							|  |  |  |         self.momentum = momentum | 
					
						
							|  |  |  |         self.weight_decay = weight_decay | 
					
						
							| 
									
										
										
										
											2020-12-14 12:19:33 +08:00
										 |  |  |         self.grad_clip = grad_clip | 
					
						
							| 
									
										
										
										
											2020-10-13 17:13:33 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def __call__(self, parameters): | 
					
						
							|  |  |  |         opt = optim.Momentum( | 
					
						
							|  |  |  |             learning_rate=self.learning_rate, | 
					
						
							|  |  |  |             momentum=self.momentum, | 
					
						
							| 
									
										
										
										
											2020-12-14 12:19:33 +08:00
										 |  |  |             weight_decay=self.weight_decay, | 
					
						
							|  |  |  |             grad_clip=self.grad_clip, | 
					
						
							|  |  |  |             parameters=parameters) | 
					
						
							| 
									
										
										
										
											2020-10-13 17:13:33 +08:00
										 |  |  |         return opt | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class Adam(object): | 
					
						
							|  |  |  |     def __init__(self, | 
					
						
							|  |  |  |                  learning_rate=0.001, | 
					
						
							|  |  |  |                  beta1=0.9, | 
					
						
							|  |  |  |                  beta2=0.999, | 
					
						
							|  |  |  |                  epsilon=1e-08, | 
					
						
							|  |  |  |                  parameter_list=None, | 
					
						
							|  |  |  |                  weight_decay=None, | 
					
						
							|  |  |  |                  grad_clip=None, | 
					
						
							|  |  |  |                  name=None, | 
					
						
							|  |  |  |                  lazy_mode=False, | 
					
						
							|  |  |  |                  **kwargs): | 
					
						
							|  |  |  |         self.learning_rate = learning_rate | 
					
						
							|  |  |  |         self.beta1 = beta1 | 
					
						
							|  |  |  |         self.beta2 = beta2 | 
					
						
							|  |  |  |         self.epsilon = epsilon | 
					
						
							|  |  |  |         self.parameter_list = parameter_list | 
					
						
							|  |  |  |         self.learning_rate = learning_rate | 
					
						
							|  |  |  |         self.weight_decay = weight_decay | 
					
						
							|  |  |  |         self.grad_clip = grad_clip | 
					
						
							|  |  |  |         self.name = name | 
					
						
							|  |  |  |         self.lazy_mode = lazy_mode | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def __call__(self, parameters): | 
					
						
							|  |  |  |         opt = optim.Adam( | 
					
						
							|  |  |  |             learning_rate=self.learning_rate, | 
					
						
							|  |  |  |             beta1=self.beta1, | 
					
						
							|  |  |  |             beta2=self.beta2, | 
					
						
							|  |  |  |             epsilon=self.epsilon, | 
					
						
							|  |  |  |             weight_decay=self.weight_decay, | 
					
						
							|  |  |  |             grad_clip=self.grad_clip, | 
					
						
							|  |  |  |             name=self.name, | 
					
						
							|  |  |  |             lazy_mode=self.lazy_mode, | 
					
						
							|  |  |  |             parameters=parameters) | 
					
						
							|  |  |  |         return opt | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class RMSProp(object): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Root Mean Squared Propagation (RMSProp) is an unpublished, adaptive learning rate method. | 
					
						
							|  |  |  |     Args: | 
					
						
							|  |  |  |         learning_rate (float|Variable) - The learning rate used to update parameters. | 
					
						
							|  |  |  |             Can be a float value or a Variable with one float value as data element. | 
					
						
							|  |  |  |         momentum (float) - Momentum factor. | 
					
						
							|  |  |  |         rho (float) - rho value in equation. | 
					
						
							|  |  |  |         epsilon (float) - avoid division by zero, default is 1e-6. | 
					
						
							|  |  |  |         regularization (WeightDecayRegularizer, optional) - The strategy of regularization. | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def __init__(self, | 
					
						
							|  |  |  |                  learning_rate, | 
					
						
							| 
									
										
										
										
											2020-12-14 12:19:33 +08:00
										 |  |  |                  momentum=0.0, | 
					
						
							| 
									
										
										
										
											2020-10-13 17:13:33 +08:00
										 |  |  |                  rho=0.95, | 
					
						
							|  |  |  |                  epsilon=1e-6, | 
					
						
							|  |  |  |                  weight_decay=None, | 
					
						
							| 
									
										
										
										
											2020-12-14 12:19:33 +08:00
										 |  |  |                  grad_clip=None, | 
					
						
							| 
									
										
										
										
											2020-10-13 17:13:33 +08:00
										 |  |  |                  **args): | 
					
						
							|  |  |  |         super(RMSProp, self).__init__() | 
					
						
							|  |  |  |         self.learning_rate = learning_rate | 
					
						
							|  |  |  |         self.momentum = momentum | 
					
						
							|  |  |  |         self.rho = rho | 
					
						
							|  |  |  |         self.epsilon = epsilon | 
					
						
							|  |  |  |         self.weight_decay = weight_decay | 
					
						
							| 
									
										
										
										
											2020-12-14 12:19:33 +08:00
										 |  |  |         self.grad_clip = grad_clip | 
					
						
							| 
									
										
										
										
											2020-10-13 17:13:33 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def __call__(self, parameters): | 
					
						
							|  |  |  |         opt = optim.RMSProp( | 
					
						
							|  |  |  |             learning_rate=self.learning_rate, | 
					
						
							|  |  |  |             momentum=self.momentum, | 
					
						
							|  |  |  |             rho=self.rho, | 
					
						
							|  |  |  |             epsilon=self.epsilon, | 
					
						
							|  |  |  |             weight_decay=self.weight_decay, | 
					
						
							| 
									
										
										
										
											2020-12-14 12:19:33 +08:00
										 |  |  |             grad_clip=self.grad_clip, | 
					
						
							| 
									
										
										
										
											2020-10-13 17:13:33 +08:00
										 |  |  |             parameters=parameters) | 
					
						
							|  |  |  |         return opt |