View source on GitHub
|
Base class for optimizers.
tf.compat.v1.train.Optimizer(
use_locking, name
)
Migrate to TF2
tf.compat.v1.train.Optimizer can be used in eager mode and tf.function,
but it is not recommended. Please use the subclasses of
tf.keras.optimizers.Optimizer instead in TF2. Please see Basic training
loops or
Writing a training loop from scratch
for examples.
If your TF1 code contains a tf.compat.v1.train.Optimizer symbol, you cannot
simply replace that with the corresponding tf.keras.optimizers.Optimizers.
To migrate to TF2, it is advised the whole training program to be migrated to
Keras Model.fit based, or TF2 custom training loops.
Structural Mapping to Native TF2
Before:
sgd_op = tf.compat.v1.train.GradientDescentOptimizer(3.0)
opt_op = sgd_op.minimize(cost, global_step, [var0, var1])
opt_op.run(session=session)
After:
sgd = tf.keras.optimizers.SGD(3.0)
sgd.minimize(cost_fn, [var0, var1])
How to Map Arguments
| TF1 Arg Name | TF2 Arg Name | Note |
|---|---|---|
use_locking |
Not supported | - |
name |
name. |
- |
Before & After Usage Example
Before:
g = tf.compat.v1.Graph()with g.as_default():var0 = tf.compat.v1.Variable([1.0, 2.0])var1 = tf.compat.v1.Variable([3.0, 4.0])cost = 5 * var0 + 3 * var1global_step = tf.compat.v1.Variable(tf.compat.v1.zeros([], tf.compat.v1.int64), name='global_step')init_op = tf.compat.v1.initialize_all_variables()sgd_op = tf.compat.v1.train.GradientDescentOptimizer(3.0)opt_op = sgd_op.minimize(cost, global_step, [var0, var1])session = tf.compat.v1.Session(graph=g)session.run(init_op)opt_op.run(session=session)print(session.run(var0))[-14. -13.]
After:
>>> var0 = tf.Variable([1.0, 2.0])
>>> var1 = tf.Variable([3.0, 4.0])
>>> cost_fn = lambda: 5 * var0 + 3 * var1
>>> sgd = tf.keras.optimizers.SGD(3.0)
>>> sgd.minimize(cost_fn, [var0, var1])
>>> print(var0.numpy())
[-14. -13.]
View source on GitHub