Jac*_*son 6 neural-network conv-neural-network keras
我试图在每个检查点将我的 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")
Run Code Online (Sandbox Code Playgroud)
文件扩展名 .h5、.hdf5 和 .ckpt 之间有什么区别?
据此, .h5和.hdf5基本相同,它是以分层数据格式(HDF)保存的数据文件,它包含科学数据的多维数组。
根据此,使用该格式保存模型会导致使用以下内容保存模型:
它是检查点的缩写,顾名思义,它基本上是在训练过程中达到一定条件(低于某个损失值或高于某个准确度值)后保存模型的状态。
将模型保存为 .ckpt 有其缺点,因为它仅保存变量或图形的权重,因此您需要拥有完整的架构和函数,用于将这些权重和变量加载到架构中并构建和使用模型。(基本上是代码)
这种格式主要在您想要恢复训练时使用,并允许您自定义保存的检查点并加载它们。(这允许不断改进模型并根据结果更改参数,从而允许从不同的检查点创建不同的模型)。
我应该使用哪个扩展?
取决于您训练模型的目标,如果您正在训练过程中并进行了大量实验,我建议将模型保存为 .ckpt 格式。
如果您已完成模型的实验和最终确定,我建议将其保存为 .h5 格式,以便您可以加载并使用它,而无需使用用于创建模型架构的代码。
另外,我是否需要在代码末尾调用 model.save(filepath) 或者我的模型是否会由 ModelCheckpoint() 自动保存?
您可以同时调用这两个方法,但我建议将 ModelCheckpoint() 中的扩展名设为 .ckpt,以便您可以在训练过程中保存尽可能高的模型状态,并且在训练完成后调用 model.save(filepath) 但作为.h5 格式,以便训练后模型可以保存并在任何地方使用,而不需要原始架构代码。
这样,您就可以选择增强训练并加载 .ckpt 模型,或者如果您对最终结果感到满意,则可以使用 .h5 模型作为模型的最终版本。
归档时间: |
|
查看次数: |
2964 次 |
最近记录: |