Cannot save Keras model when v2 behavior is disabled
rsujeevan opened this issue · comments
Sujeevan Rasaratnam commented
Issue type
Bug
Have you reproduced the bug with TensorFlow Nightly?
No
Source
binary
TensorFlow version
2.15.1
Custom code
Yes
OS platform and distribution
Linux Ubuntu 20.04.5
Mobile device
No response
Python version
3.11.9
Bazel version
No response
GCC/compiler version
No response
CUDA/cuDNN version
11.2/8.9
GPU model and memory
No response
Current behavior?
Since Tensorflow 2.13, I am unable to save Keras models when using graph execution in Tensorflow v1 behaviour. When I attempt to save, I get the following error:
Traceback (most recent call last):
File "/tf/ser_repro.py", line 13, in <module>
model.compile(loss=loss, optimizer=used_optimizer)
File "/tf/env/lib/python3.11/site-packages/tensorflow/python/trackable/base.py", line 204, in _method_wrapper
result = method(self, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tf/env/lib/python3.11/site-packages/keras/src/engine/training_v1.py", line 321, in compile
self._set_optimizer(optimizer)
File "/tf/env/lib/python3.11/site-packages/keras/src/engine/training_v1.py", line 1473, in _set_optimizer
self.optimizer = optimizers.get(optimizer)
^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tf/env/lib/python3.11/site-packages/keras/src/optimizers/__init__.py", line 306, in get
return convert_to_legacy_optimizer(identifier)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tf/env/lib/python3.11/site-packages/keras/src/optimizers/__init__.py", line 239, in convert_to_legacy_optimizer
config = optimizer.get_config()
^^^^^^^^^^^^^^^^^^^^^^
File "/tf/env/lib/python3.11/site-packages/keras/src/optimizers/adam.py", line 211, in get_config
"learning_rate": self._serialize_hyperparameter(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tf/env/lib/python3.11/site-packages/keras/src/optimizers/optimizer.py", line 726, in _serialize_hyperparameter
return hyperparameter.numpy()
^^^^^^^^^^^^^^^^^^^^^^
File "/tf/env/lib/python3.11/site-packages/tensorflow/python/ops/resource_variable_ops.py", line 690, in numpy
raise NotImplementedError(
NotImplementedError: numpy() is only available when eager execution is enabled.
Standalone code to reproduce the issue
import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()
import keras
from keras import layers
inp = keras.layers.Input(shape=(1,), name="input")
result = keras.layers.Dense(250, name="dense_layer")(inp)
model = keras.models.Model(inp, result, name="mdl")
loss = "categorical_crossentropy"
used_optimizer = keras.optimizers.Adam(learning_rate=0.01)
model.compile(loss=loss, optimizer=used_optimizer)
model.save("test-model.keras")
Relevant log output
2024-05-05 05:31:41.834245: E external/local_xla/xla/stream_executor/cuda/cuda_dnn.cc:9261] Unable to register cuDNN factory: Attempting to register factory for plugin cuDNN when one has already been registered
2024-05-05 05:31:41.834286: E external/local_xla/xla/stream_executor/cuda/cuda_fft.cc:607] Unable to register cuFFT factory: Attempting to register factory for plugin cuFFT when one has already been registered
2024-05-05 05:31:41.836617: E external/local_xla/xla/stream_executor/cuda/cuda_blas.cc:1515] Unable to register cuBLAS factory: Attempting to register factory for plugin cuBLAS when one has already been registered
2024-05-05 05:31:41.846554: I tensorflow/core/platform/cpu_feature_guard.cc:182] This TensorFlow binary is optimized to use available CPU instructions in performance-critical operations.
To enable the following instructions: AVX2 AVX512F FMA, in other operations, rebuild TensorFlow with the appropriate compiler flags.
2024-05-05 05:31:42.773103: W tensorflow/compiler/tf2tensorrt/utils/py_utils.cc:38] TF-TRT Warning: Could not find TensorRT
WARNING:tensorflow:From /tf/env/lib/python3.11/site-packages/tensorflow/python/compat/v2_compat.py:108: disable_resource_variables (from tensorflow.python.ops.variable_scope) is deprecated and will be removed in a future version.
Instructions for updating:
non-resource variables are not supported in the long term
2024-05-05 05:31:43.608937: W tensorflow/core/common_runtime/gpu/gpu_device.cc:2256] Cannot dlopen some GPU libraries. Please make sure the missing libraries mentioned above are installed properly if you would like to use GPU. Follow the guide at https://www.tensorflow.org/install/gpu for how to download and setup the required libraries for your platform.
Skipping registering GPU devices...
Traceback (most recent call last):
File "/tf/ser_repro.py", line 13, in <module>
model.compile(loss=loss, optimizer=used_optimizer)
File "/tf/env/lib/python3.11/site-packages/tensorflow/python/trackable/base.py", line 204, in _method_wrapper
result = method(self, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tf/env/lib/python3.11/site-packages/keras/src/engine/training_v1.py", line 321, in compile
self._set_optimizer(optimizer)
File "/tf/env/lib/python3.11/site-packages/keras/src/engine/training_v1.py", line 1473, in _set_optimizer
self.optimizer = optimizers.get(optimizer)
^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tf/env/lib/python3.11/site-packages/keras/src/optimizers/__init__.py", line 306, in get
return convert_to_legacy_optimizer(identifier)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tf/env/lib/python3.11/site-packages/keras/src/optimizers/__init__.py", line 239, in convert_to_legacy_optimizer
config = optimizer.get_config()
^^^^^^^^^^^^^^^^^^^^^^
File "/tf/env/lib/python3.11/site-packages/keras/src/optimizers/adam.py", line 211, in get_config
"learning_rate": self._serialize_hyperparameter(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tf/env/lib/python3.11/site-packages/keras/src/optimizers/optimizer.py", line 726, in _serialize_hyperparameter
return hyperparameter.numpy()
^^^^^^^^^^^^^^^^^^^^^^
File "/tf/env/lib/python3.11/site-packages/tensorflow/python/ops/resource_variable_ops.py", line 690, in numpy
raise NotImplementedError(
NotImplementedError: numpy() is only available when eager execution is enabled.