如何修复(“ValueError:您试图将包含16层的权重文件加载到包含0层的模型中”)

2024-04-24 19:15:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我是这样使用VG16的:

model = VGG16()
data, labels = ReadImages(TRAIN_DIR)

vgg16 = VGG16()

model = Sequential()

#Converting VGG16 into Sequential model
for layer in vgg16.layers[:-1]:
    model.add(layer)

#Freezing all layers except last layer for transfer learning
for layer in model.layers:
    layer.trainable = False

#Adding custom softmax layer
model.add(Dense(1,activation='sigmoid'))

#Compiling our model
model.compile(optimizer='adam',loss='binary_crossentropy',metrics=['accuracy'])

model.fit(np.array(data), np.array(labels), batch_size=32, epochs=3)

model.save('model.h5')

当我尝试在另一个py文件中加载此模型时..:

model = load_model('model.h5')

我已经尝试加载权重并抛出错误

。。。返回此错误:

ValueError: You are trying to load a weight file containing 16 layers into a model with 0 layers

我应该如何加载此模型以进行预测?你知道吗

版本:keras 2.2.4 tensorflow 1.14.0


Tags: inaddlayerfordatalabelsmodellayers
1条回答
网友
1楼 · 发布于 2024-04-24 19:15:53

已知问题:https://github.com/keras-team/keras/issues/10417

有三种选择:1。重新创建模型架构并使用“load_weights”。这是好的,如果你只想做预测。2降级到Keras版本2.1.6.3。此链接https://github.com/keras-team/keras/issues/10417#issuecomment-435620108提供了一个解决方法。我为VGG16改编了这个。这将更新h5文件。你知道吗

def fix_layer0(filename, batch_input_shape, dtype):
    with h5py.File(filename, 'r+') as f:
        model_config = json.loads(f.attrs['model_config'].decode('utf-8'))
        layer0 = model_config['config']['layers'][0]['config']
        layer0['batch_input_shape'] = batch_input_shape
        layer0['dtype'] = dtype
        f.attrs['model_config'] = json.dumps(model_config).encode('utf-8')

fix_layer0('model.h5', [None, 224, 224, 3], 'float32')

loaded_model = load_model('model.h5')

相关问题 更多 >