我试着在每个检查点将我的CNN保存到一个文件中。但是,我应该使用哪个扩展名作为我的文件目录?另外,我是否需要在代码末尾调用model.save(filepath)
,或者我的模型是否会由ModelCheckpoint()
自动保存
我将模型另存为.h5文件,但我不知道是否应该更改它。
from keras import Sequential
from keras_preprocessing.image import ImageDataGenerator
from keras.layers import *
from keras.callbacks import ModelCheckpoint
import numpy as np
import os
img_size = 500 # number of pixels for width and height
#Random Seed
np.random.seed(12321)
training_path = os.getcwd() + "/cats and dogs images/train"
testing_path = os.getcwd() + "/cats and dogs images/test"
#Defines the Model
model = Sequential([
Conv2D(filters=64, kernel_size=(3,3), activation="relu", padding="same", input_shape=(img_size,img_size,3)),
MaxPool2D(pool_size=(2,2), strides=2),
Conv2D(filters=64, kernel_size=(3,3), activation="relu", padding="same"),
MaxPool2D(pool_size=(2,2), strides=2),
Flatten(),
Dense(32, activation="relu"),
Dense(1, activation="sigmoid")
])
#Scales the pixel values to between 0 to 1
datagen = ImageDataGenerator(rescale=1.0/255.0)
#Prepares Training Data
training_dataset = datagen.flow_from_directory(directory = training_path, target_size=(img_size,img_size), classes = ["cat","dog"], batch_size = 19)
#Prepares Testing Data
testing_dataset = datagen.flow_from_directory(directory = testing_path, target_size=(img_size,img_size), classes = ["cat","dog"], batch_size = 19)
#Compiles the model
model.compile(loss="binary_crossentropy", optimizer="adam", metrics=['accuracy'])
#Checkpoint
checkpoint = ModelCheckpoint("trained_model.h5", monitor='loss', verbose=1, save_best_only=True, mode='min', period=1)
#Fitting the model to the dataset (Training the Model)
model.fit(x = training_dataset, steps_per_epoch = 658, validation_data=testing_dataset, validation_steps=658, epochs = 10, callbacks=[checkpoint], verbose = 1)
# evaluate model on training dataset
acc = model.evaluate_generator(training_dataset, steps=len(training_dataset), verbose=0)
print("Accuracy on training dataset:")
print('> %.3f' % (acc * 100.0))
#evaluate model on testing dataset
acc = model.evaluate_generator(testing_dataset, steps=len(testing_dataset), verbose=0)
print("Accuracy on testing dataset:")
print('> %.3f' % (acc * 100.0))
##Saving the Model:
#model.save("trained model.h5")
#print("Saved model to disk")
发布于 2021-09-30 08:03:18
文件扩展名.h5、.hdf5和.ckpt有什么区别?
.h5和.hdf5
根据this的说法,.h5和.hdf5基本上是相同的,它是以分层数据格式保存的数据文件,它包含科学数据的多维数组。
根据this的说法,使用该格式保存模型会导致使用以下格式保存模型:
.ckpt
checkpoint是checkpoint的缩写,因此顾名思义,它基本上是在达到一定条件(低于某个损失值或高于某个精确值)后,在训练过程中保存模型的状态。
将模型另存为.ckpt有其缺点,因为它只保存变量或图形的权重,因此您将需要有完整的体系结构和函数来将这些权重和变量加载到体系结构中,并构建和使用模型。(基本上是代码)
此格式主要用于您想要恢复训练时,并允许您自定义保存的检查点并加载它们。(这允许持续改进模型并根据结果更改参数,从而允许从不同的检查点创建不同的模型)。
我应该使用哪个扩展?
取决于您训练模型的目标,如果您正在训练过程中并进行了大量实验,我建议将模型保存为.ckpt格式。
如果您已经完成了模型的实验和定稿,我建议您将其保存为.h5格式,这样您就可以加载并使用它,而无需使用用于创建模型体系结构的代码。
我是否需要在代码末尾调用model.save(filepath),或者我的模型是否会被ModelCheckpoint()自动保存?
您可以同时调用这两种方法,但我建议将ModelCheckpoint()中的扩展名设置为.ckpt,这样您就可以在训练过程中保存尽可能高的模型状态,当您完成训练时,可以调用model.save(filepath),但将其作为.h5格式,以便在训练之后,模型可以保存并在任何地方使用,而不需要原始的体系结构代码。
这样,您就可以选择增强训练并加载.ckpt模型,或者如果您对最终结果感到满意,可以使用.h5模型作为模型的最终版本。
https://stackoverflow.com/questions/64534477
复制相似问题