Modification of Keras OptimizersΒΆ
Due to the fact that TensorDiffEq is based on Keras, we have access to the full swath of optimizers pushed out by the Tensorflow team for neural network training. A full list is available here, and includes:
SGD
RMSprop
Adam
Adadelta
Adagrad
Adamax
Nadam
Ftrl
Modification of these optimizers away from the baseline default parameters in TensorDiffEq is relatively straightforward, allowing the user to identify which optimizer is best for their specific problem.
One can modify the optimizers in the CollocationSolverND
object by either changing the
tf_optimizer
object or the tf_optimizer_weights
object and replacing them with a new instance of
a tf.keras.optimizers
object, annotated above. As an example, this is how one could modify the built-in Adam
optimizer with an
SGD
optimizer for training:
model = CollocationSolverND()
model.compile(layer_sizes, f_model, Domain, BCs)
model.tf_optimizer = tf.keras.optimizers.SGD(lr=.001)
model.fit(tf_iter=2000)
Additionally, one could replace the learning rate parameter in the tf_optimizer
object with
a different learning rate if that is desired in the default Adam
optimizer in the same way. The built-in learning rate for Adam
is set to 0.005
, and one could reduce it to 0.001
via the following:
model = CollocationSolverND()
model.compile(layer_sizes, f_model, Domain, BCs)
model.tf_optimizer = tf.keras.optimizers.Adam(lr=.001)
model.fit(tf_iter=2000)
It is important to note that replacing the optimizers in this way does not guarantee they will converge. The question of PINN training stability and convergence isa heavily researched and ongoing conversation.