The problem with `tf.compat.v1.disable_v2_behavior`
huang06 opened this issue · 1 comments
Description
When importing some tensorflow_v2
modules, the subsequent TF2 functions cannot work properly.
I found out that some modules call the tensorflow.disable_v2_behavior
function when they are imported. It will disable the subsequent TF2 behaviors.
cd submarine-sdk/pysubmarine/submarine
$ grep -rnH 'disable_v2_behavior'
ml/tensorflow_v2/layers/core.py:20:tf.compat.v1.disable_v2_behavior()
utils/tf_utils_v2.py:26: tf.compat.v1.disable_v2_behavior()
utils/tf_utils_v2.py:57: tf.compat.v1.disable_v2_behavior()
Furthermore, without the tensorflow.disable_v2_behavior
, the tests still work as usual. Maybe the disable_v2_behavior
is not necessary to the tf2 modules.
In summary, We should remove the tf.compat.v1.disable_v2_behavior
statements to avoid the similar problem.
How to reproduce the TF2 error
Create Python venv.
cd submarine-sdk/pysubmarine
python3 -m venv .venv
source .venv/bin/activate
python3 -m pip install -e .[tf2]
Create demo.py
and copy the following Python code into it.
# demo.py
import tensorflow as tf
from submarine.ml.tensorflow_v2.model import DeepFM # call `tf.compat.v1.disable_v2_behavior` function
class LinearNNModel(tf.keras.Model):
def __init__(self):
super().__init__()
self.dense1 = tf.keras.layers.Dense(1, activation=tf.nn.relu) # One in and one out
def call(self, x):
y_pred = self.dense1(x)
return y_pred
model = LinearNNModel()
input_arr = tf.random.uniform((1, 5))
model(input_arr)
model.save('sample-model')
Running the Python code. the error message shows that the TF2 function cannot work properly.
$ python3 demo.py
...
Traceback (most recent call last):
File "/home/tom/huang06/submarine/submarine-sdk/pysubmarine/demo.py", line 21, in <module>
model.save('sample-model')
File "/home/tom/huang06/submarine/submarine-sdk/pysubmarine/.venv/lib/python3.10/site-packages/keras/utils/traceback_utils.py", line 67, in error_handler
raise e.with_traceback(filtered_tb) from None
File "/home/tom/huang06/submarine/submarine-sdk/pysubmarine/.venv/lib/python3.10/site-packages/keras/saving/save.py", line 142, in save_model
raise NotImplementedError(
NotImplementedError: Saving the model to HDF5 format requires the model to be a Functional model or a Sequential model. It does not work for subclassed models, because such models are defined via the body of a Python method, which isn't safely serializable. Consider saving to the Tensorflow SavedModel format (by setting save_format="tf") or using `save_weights`.
@featherchen
Hi~ There are some questions about the tf part of the codes that we need your help to answer, please. Hope you can help us when you have time.
Thanks!