tensorflow: ValueError: Could not interpret optimizer identifier (tf.keras)

System information

  • Have I written custom code (as opposed to using a stock example script provided in TensorFlow): Yes
  • OS Platform and Distribution (e.g., Linux Ubuntu 16.04): Windows 10
  • TensorFlow installed from (source or binary): binary
  • TensorFlow version (use command below): 1.8.0
  • Python version: 3.5
  • Bazel version (if compiling from source):
  • GCC/Compiler version (if compiling from source):
  • CUDA/cuDNN version: 8.0/6.0
  • GPU model and memory: Nvidia
  • Exact command to reproduce: model.compile(optimizer=tf.keras.optimizers.Adadelta() …)

Describe the problem

Passing in keras optimizers into a tf.keras model causes a value error, unless they are passed as strings i.e. “Adadelta” instead of Adadelta( ). This prevents arguments from being passed to the optimizer. Please note that when the optimizer is imported from vanilla Keras i.e. keras.optimizers.Adadelta(rho=0.9) there is no such issue.

Source code / logs

`` import tensorflow as tf from tensorflow.python.keras.optimizers import Adadelta, Adam

model = deepshading.get_model()
model.compile(optimizer=tf.keras.optimizers.Adadelta(rho=0.9),
              loss=DSSIMObjective(k1=0.0001, k2=0.001, kernel_size=8),
              metrics=[DSSIMObjective(k1=0.0001, k2=0.001, kernel_size=8)])

``

Returns trace-back identifier=identifier.__class__.__name__)) Traceback (most recent call last): File "C:/Users/isultan/PycharmProjects/deep-shading/run.py", line 69, in <module> train() File "C:/Users/isultan/PycharmProjects/deep-shading/run.py", line 35, in train metrics=[DSSIMObjective(k1=0.0001, k2=0.001, kernel_size=8)]) File "C:\Users\isultan\AppData\Local\Continuum\miniconda3\envs\tf\lib\site-packages\keras\engine\training.py", line 604, in compile self.optimizer = optimizers.get(optimizer) File "C:\Users\isultan\AppData\Local\Continuum\miniconda3\envs\tf\lib\site-packages\keras\optimizers.py", line 768, in get str(identifier)) ValueError: Could not interpret optimizer identifier: <tensorflow.python.keras._impl.keras.optimizers.Adadelta object at 0x000001E563508860>

About this issue

  • Original URL
  • State: closed
  • Created 6 years ago
  • Comments: 15 (2 by maintainers)

Most upvoted comments

Having the same issue with SGD optimizer, also tensorflow version 1.8.0

Optimizer = tf.keras.optimizers.SGD(lr=1e-3, momentum=0.3, decay=0, nesterov=False)
model.compile(loss=tf.keras.losses.binary_crossentropy,
                  optimizer=Optimizer,
                  metrics=['accuracy'],options = run_opts)

ValueError: (‘Could not interpret optimizer identifier:’, (<tensorflow.python.keras._impl.keras.optimizers.SGD object at 0x2b98cdfe7c50>,))

It works as soon as I do not provide any parameters to SGD (Optimizer = tf.keras.optimizers.SGD() )

from tensorflow.python.keras import initializers
from tensorflow.python.keras import layers
from tensorflow.keras.optimizers import Adam
from tensorflow.python.keras.models import Model
from tensorflow.python.keras.activations import relu
from tensorflow.python.keras.layers import Input, Dense, Reshape, Flatten, LSTM, Bidirectional
from tensorflow.python.keras import backend as K
from tensorflow.python.keras.callbacks import TensorBoard
from tensorflow.python.keras import regularizers
from sklearn.model_selection import train_test_split
...
adam_opt = Adam(learning_rate=0.0001)
loss = weighted_bce
model.compile(loss=loss, optimizer=adam_opt, experimental_run_tf_function=False)

and I got

ValueError: Could not interpret optimizer identifier: <keras.optimizer_v2.adam.Adam object at 0x7f4e5c06fca0>

does anyone have solved this problem?

Same problem

I solved this problem by uninstalling keras(independent package), and use keras in tensorflow.

Thanks, I solved changing the import. Now I use from tensorflow.python.keras.optimizer_v2.adam import Adam

from tensorflow.python.keras import initializers
from tensorflow.python.keras import layers
from tensorflow.keras.optimizers import Adam
from tensorflow.python.keras.models import Model
from tensorflow.python.keras.activations import relu
from tensorflow.python.keras.layers import Input, Dense, Reshape, Flatten, LSTM, Bidirectional
from tensorflow.python.keras import backend as K
from tensorflow.python.keras.callbacks import TensorBoard
from tensorflow.python.keras import regularizers
from sklearn.model_selection import train_test_split
...
adam_opt = Adam(learning_rate=0.0001)
loss = weighted_bce
model.compile(loss=loss, optimizer=adam_opt, experimental_run_tf_function=False)

and I got

ValueError: Could not interpret optimizer identifier: <keras.optimizer_v2.adam.Adam object at 0x7f4e5c06fca0>

does anyone have solved this problem?

Same problem

I solved this problem by uninstalling keras(independent package), and use keras in tensorflow.