0

If I save a model in Keras in this way, for example:

import numpy as np
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from tensorflow import saved_model

# create random data
X = np.random.rand(10000, 8)
y = np.random.rand(10000, 1)

# create model
model = Sequential()
model.add(Dense(12, input_shape=(8,), activation="relu"))
model.add(Dense(8, activation="relu"))
model.add(Dense(1, activation="sigmoid"))
model.compile(loss="binary_crossentropy", optimizer="adam", metrics=["accuracy"])
model.fit(X, y, epochs=5, batch_size=100, verbose=0)

# predict with model
print(model.predict(X)[:5])

# save model
saved_model.save(model, "saved_model")

Then I always get the same error message when converting to onnx format with the following command:

python -m tf2onnx.convert --saved-model saved_model --output model.onnx
C:\Anaconda3\envs\env\lib\runpy.py:127: RuntimeWarning: 'tf2onnx.convert' found in sys.modules after import of package 'tf2onnx', but prior to execution of 'tf2onnx.convert'; this may result in unpredictable behaviour
  warn(RuntimeWarning(msg))
2022-10-08 21:27:15,780 - WARNING - '--tag' not specified for saved_model. Using --tag serve
Traceback (most recent call last):
  File "C:\Anaconda3\envs\env\lib\runpy.py", line 194, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "C:\Anaconda3\envs\env\lib\runpy.py", line 87, in _run_code
    exec(code, run_globals)
  File "C:\Anaconda3\envs\env\lib\site-packages\tf2onnx\convert.py", line 706, in <module>
    main()
  File "C:\Anaconda3\envs\env\lib\site-packages\tf2onnx\convert.py", line 238, in main
    graph_def, inputs, outputs, initialized_tables, tensors_to_rename = tf_loader.from_saved_model(
  File "C:\Anaconda3\envs\env\lib\site-packages\tf2onnx\tf_loader.py", line 614, in from_saved_model
    _from_saved_model_v2(model_path, input_names, output_names,
  File "C:\Anaconda3\envs\env\lib\site-packages\tf2onnx\tf_loader.py", line 552, in _from_saved_model_v2
    imported = tf.saved_model.load(model_path, tags=tag)  # pylint: disable=no-value-for-parameter
  File "C:\Anaconda3\envs\env\lib\site-packages\tensorflow\python\saved_model\load.py", line 864, in load
    result = load_internal(export_dir, tags, options)["root"]
  File "C:\Anaconda3\envs\env\lib\site-packages\tensorflow\python\saved_model\load.py", line 902, in load_internal
    loader = loader_cls(object_graph_proto, saved_model_proto, export_dir,
  File "C:\Anaconda3\envs\env\lib\site-packages\tensorflow\python\saved_model\load.py", line 162, in __init__
    self._load_all()
  File "C:\Anaconda3\envs\env\lib\site-packages\tensorflow\python\saved_model\load.py", line 259, in _load_all
    self._load_nodes()
  File "C:\Anaconda3\envs\env\lib\site-packages\tensorflow\python\saved_model\load.py", line 448, in _load_nodes
    slot_variable = optimizer_object.add_slot(
AttributeError: '_UserObject' object has no attribute 'add_slot'

Do i have to preprocess the keras model or are there parameters for tf2onnx that i have to pass?

Oliver
  • 93
  • 1
  • 7

0 Answers0