张量流 2.3.0 -> 2.2.0 可比性:值错误:未知层:功能



我遇到了一个类似于这里描述的问题:ValueError:未知层:功能

import tensorflow as tf
model = tf.keras.models.load_model("model.h5")

其抛出:CCD_ 1。

我很确定这是因为h5文件保存在TF 2.3.0中,我正试图在2.2.0中加载它。我不想直接使用tf 2.3.0进行转换,我希望找到一种手动修复h5py文件本身的方法,或者将正确的自定义对象传递给模型加载程序。我注意到,无论配置文件存储在哪里,它似乎都只是一个额外的密钥,例如。https://github.com/tensorflow/tensorflow/issues/41929

问题是,我不知道如何手动清除h5文件中的Functional层。具体来说,我已经尝试过:

import h5py
f = h5py.File("model.h5",'r')
print(f['model_weights'].keys())

它给出:

<KeysViewHDF5 ['concatenate_1', 'conv1d_3', 'conv1d_4', 'conv1d_5', 'dense_1', 'dropout_4', 'dropout_5', 'dropout_6', 'dropout_7', 'embedding_1', 'global_average_pooling1d_1', 'global_max_pooling1d_1', 'input_2']>

并且我在任何地方都看不到CCD_ 3层。该文件中存储的模型的配置究竟在哪里?例如,我正在寻找类似{"class_name": "Functional", "config": {"name": "model", "layers":...}}的东西

问题:有没有一种方法可以使用h5py手动编辑h5文件以摆脱功能层?

或者,我可以将特定的custom_obects={'Functiona':???}传递给load_model函数吗?我尝试过{'Functional':tf.keras.models.Model},但它返回('Keyword argument not understood:', 'groups'),因为我认为它试图将模型加载到权重中?

我也遇到了类似的问题。在不改变Tensorflow版本和重新训练模型的情况下,我可以解决它的唯一方法是使用Tensorflow 2.2.0中的Keras API再次构建模型结构,然后调用:

ValueError: Unknown layer: Functional0

其中原始h5文件是使用TensorFlow 2.3.0创建的。如果您已经有了构建模型结构的代码,那么这个方法应该相对简单,因为您所要做的就是用上面的行替换load_model(<h5 file>)

只需更改

keras.models import load_model
tensorflow.keras.models import load_model

然后

load_model('model.h5', compile = False)

最新更新