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`.
Description
When importing some
tensorflow_v2modules, the subsequent TF2 functions cannot work properly.I found out that some modules call the
tensorflow.disable_v2_behaviorfunction when they are imported. It will disable the subsequent TF2 behaviors.Furthermore, without the
tensorflow.disable_v2_behavior, the tests still work as usual. Maybe thedisable_v2_behavioris not necessary to the tf2 modules.In summary, We should remove the
tf.compat.v1.disable_v2_behaviorstatements to avoid the similar problem.How to reproduce the TF2 error
Create Python venv.
Create
demo.pyand copy the following Python code into it.Running the Python code. the error message shows that the TF2 function cannot work properly.