Tensorflow 2.3.0->;2.2.0可比性:值错误:未知层:功能

Tensorflow 2.3.0->;2.2.0可比性:值错误:未知层:功能,tensorflow,keras,Tensorflow,Keras,我遇到了一个类似于这里描述的问题: 它抛出:ValueError:Unknown layer:Functional 我很确定这是因为h5文件保存在TF2.3.0中,我正在尝试将其加载到2.2.0中。我不希望直接使用TF2.3.0进行转换,我希望找到一种手动修复h5py文件本身的方法,或者将正确的自定义对象传递给模型加载器。我注意到,它似乎只是一个额外的键,无论配置文件存储在哪里,例如 问题是,我不知道如何手动删除h5文件中的功能层。具体而言,我尝试过: import h5py f = h5py

我遇到了一个类似于这里描述的问题:

它抛出:
ValueError:Unknown layer:Functional

我很确定这是因为h5文件保存在TF2.3.0中,我正在尝试将其加载到2.2.0中。我不希望直接使用TF2.3.0进行转换,我希望找到一种手动修复h5py文件本身的方法,或者将正确的自定义对象传递给模型加载器。我注意到,它似乎只是一个额外的键,无论配置文件存储在哪里,例如

问题是,我不知道如何手动删除h5文件中的
功能层。具体而言,我尝试过:

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']>

我在任何地方都看不到
功能层。该文件中存储的模型的配置具体在哪里?例如,我正在寻找类似
{“class_name”:“Functional”,“config”:{“name”:“model”,“layers”:…}

问题:是否有一种方法可以使用
h5py
手动编辑h5文件,以去除功能层

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

只要更改即可

keras.models import load_model
tensorflow.keras.models import load_model
然后


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

model.load\u weights()


其中原始h5文件是使用TensorFlow 2.3.0创建的。如果您已经有了构建模型结构的代码,那么这种方法应该相对容易,因为您所要做的就是用上面的行替换
load\u model()

注释没有回答问题;错误来自tensorflow的不同版本,keras是通过tensorflow.keras导入的,而不是tensorflow.keras vs kerasI面临相同的问题,显然除了使用相同的tensorflow版本,没有其他解决方案。如果您能找到其他解决方案,我们将不胜感激。
keras.models import load_model
tensorflow.keras.models import load_model
load_model('model.h5', compile = False)