问题描述:再重新训练自己的数据集以后,保存的h5模型在读取时出现Cannot create group in read only mode.的错误,通过查询发现是在模型保存时的错误,在保存时使用了model.save_weights。改为save就可以了。
介绍一下model.save_weights和model.save()的区别
save()保存的模型结果,它既保持了模型的图结构,又保存了模型的参数。
save_weights()保存的模型结果,它只保存了模型的参数,但并没有保存模型的图结构。
由save()保存下来的h5文件才可以直接通过load_model()打开!
save_weights()保存的模型不含有模型结构信息,所以我们需要把模型结构再描述一遍才可以加载m3,如下:
from keras.models import Model
from keras.layers import Input, Dense
inputs = Input(shape=(784, ))
x = Dense(64, activation='relu')(inputs)
x = Dense(64, activation='relu')(x)
y = Dense(10, activation='softmax')(x)
model = Model(inputs=inputs, outputs=y)
model.load_weights('m3.h5')
注意!如果要load_weights(),必须保证你描述的有参数计算结构与h5文件中完全一致!什么叫有参数计算结构呢?就是有参数坑,直接填进去就行了。我们把上面的非参数结构换了一下,发现h5文件依然可以加载成功,比如将softmax换成relu,依然不影响加载。
参考博客: