Skip to content
This repository has been archived by the owner on Jul 10, 2024. It is now read-only.

The problem with tf.compat.v1.disable_v2_behavior #1008

Open
huang06 opened this issue Oct 9, 2022 · 1 comment
Open

The problem with tf.compat.v1.disable_v2_behavior #1008

huang06 opened this issue Oct 9, 2022 · 1 comment
Assignees
Labels
python Pull requests that update Python code

Comments

@huang06
Copy link
Contributor

huang06 commented Oct 9, 2022

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`.
@cdmikechen cdmikechen added the python Pull requests that update Python code label Oct 10, 2022
@cdmikechen
Copy link
Contributor

@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!

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
python Pull requests that update Python code
Projects
None yet
Development

No branches or pull requests

3 participants