Open
Description
Adding the metrics to the built summary/inference networks from the approximator does not work for deserialization, as the _metrics
property is tracked by Keras and can only be set in __init__
and build
. I'm not sure yet what the best solution is here, maybe we could move the de/serialization of the _metric
property into the InferenceNetwork
/SummaryNetwork
class? There might be different/better workarounds though.
Error message (upon model loading):
Traceback (most recent call last):
File "/home/valentin/Programming/IWR/bf2/debug.py", line 24, in <module>
approximator = keras.saving.load_model("/tmp/app.keras")
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/valentin/Programming/.mamba/envs/bf2/lib/python3.11/site-packages/keras/src/saving/saving_api.py", line 189, in load_model
return saving_lib.load_model(
^^^^^^^^^^^^^^^^^^^^^^
File "/home/valentin/Programming/.mamba/envs/bf2/lib/python3.11/site-packages/keras/src/saving/saving_lib.py", line 367, in load_model
return _load_model_from_fileobj(
^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/valentin/Programming/.mamba/envs/bf2/lib/python3.11/site-packages/keras/src/saving/saving_lib.py", line 444, in _load_model_from_fileobj
model = _model_from_config(
^^^^^^^^^^^^^^^^^^^
File "/home/valentin/Programming/.mamba/envs/bf2/lib/python3.11/site-packages/keras/src/saving/saving_lib.py", line 433, in _model_from_config
model = deserialize_keras_object(
^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/valentin/Programming/.mamba/envs/bf2/lib/python3.11/site-packages/keras/src/saving/serialization_lib.py", line 734, in deserialize_keras_object
instance.compile_from_config(compile_config)
File "/home/valentin/Programming/IWR/bf2/bayesflow/approximators/continuous_approximator.py", line 116, in compile_from_config
self.compile(**deserialize(config))
File "/home/valentin/Programming/IWR/bf2/bayesflow/approximators/continuous_approximator.py", line 105, in compile
self.inference_network._metrics = inference_metrics
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/valentin/Programming/.mamba/envs/bf2/lib/python3.11/site-packages/keras/src/layers/layer.py", line 1470, in __setattr__
value = self._tracker.track(value)
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/valentin/Programming/.mamba/envs/bf2/lib/python3.11/site-packages/keras/src/utils/tracking.py", line 95, in track
return TrackedList(attr, self)
^^^^^^^^^^^^^^^^^^^^^^^
File "/home/valentin/Programming/.mamba/envs/bf2/lib/python3.11/site-packages/keras/src/utils/tracking.py", line 141, in __init__
values = [tracker.track(v) for v in values]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/valentin/Programming/.mamba/envs/bf2/lib/python3.11/site-packages/keras/src/utils/tracking.py", line 141, in <listcomp>
values = [tracker.track(v) for v in values]
^^^^^^^^^^^^^^^^
File "/home/valentin/Programming/.mamba/envs/bf2/lib/python3.11/site-packages/keras/src/utils/tracking.py", line 81, in track
self.add_to_store(store_name, attr)
File "/home/valentin/Programming/.mamba/envs/bf2/lib/python3.11/site-packages/keras/src/utils/tracking.py", line 119, in add_to_store
raise ValueError(self._lock_violation_msg)
ValueError: You cannot add new elements of state (variables or sub-layers) to a layer that is already built. All state must be created in the `__init__()` method or in the `build()` method.
Metadata
Metadata
Assignees
Labels
No labels