在前面的博文tensorflow2.0自制神经网络数据集及预测结果(混淆矩阵)可视化中,我们用了谷歌训练好的网络模型DesNet121来训练我们的图片,当用自己的电脑和自写的网络架构来训练图片时,我们需要及时的保存我们训练好的网络,以便以后测试或者接着训练。现在网上有很多的博客介绍了在keras框架下如何保存和加载训练好的模型,在此我做一个总结吧,也方便我以后查看,不用到处去别的地方找了。
我将DesNet网络换为自己的resnet18以后开始训练,训练结束后在代码的最后加了一行
model.save('my_model.h5')#保存整个模型和权重
但是却报错了:
这样报错的原因是HDF5格式要求模型是函数式(Functional)模型或者是顺序式(Sequential)模型,它不适用于子类化模型。什么意思?举例说明:
#顺序式模型
model=tf.keras.models.Sequential()
model.add(tf.keras.layres.Dense(128,activation='relu'))
model.add(tf.keras.layres.Dense(256,activation='relu'))
model.add(tf.keras.layres.Dense(10,activation='softmax'))
model.compile(optimizer=optimizers.Adam(lr=0.01),loss=losses.CategoricalCrossentropy(from_logits=True),metrics=['accuracy'])
model.fit(x_train,y_yrain,validation_data=(x_test, y_test),epochs=20)
model.evaluate(x_test, y_test)
model.save('my_model.h5')
#在这样的顺序式下可以直接保存模型的架构和整个训练的权重
#函数式模型
inputs=tf.keras.layers.Input(shape=(28,28))
x=tf.keras.layers.Dense(32,activation='relu')(inputs)
x=tf.keras.layers.Dense(64,activation='relu')