我对深度学习还是有点陌生。我仍在苦苦挣扎,随着时间的推移重新训练一个好的模型的最佳实践是什么?
我已经为我的二进制分类问题(火与非火)训练了一个深度模型Keras
。我有 4K 火灾图像和 8K 非火灾图像(它们是视频帧)。我使用 0.2/0.8 验证/训练拆分进行训练。现在我在一些视频上测试它,我发现了一些误报。我将它们添加到我的负(非触发)集合中,加载之前最好的模型,然后重新训练 100 个 epoch。在这 100 个模型中,我选择了val_loss
价值最低的一个。但是当我在同一个视频上测试它时,虽然那些误报消失了,但新的却被引入了!这永远不会结束,如果我遗漏了什么或做错了什么,我想知道。
我应该如何知道哪个模型是最好的?训练/重新训练一个好的模型的最佳实践是什么?我应该如何评估我的模型?
如果有帮助,这是我的简单模型架构:
def create_model():
model = Sequential()
model.add(Conv2D(32, kernel_size = (3, 3), activation='relu', input_shape=(300, 300, 3)))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(BatchNormalization())
model.add(Conv2D(64, kernel_size=(3,3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(BatchNormalization())
model.add(Conv2D(128, kernel_size=(3,3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(BatchNormalization())
model.add(Conv2D(128, kernel_size=(3,3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(BatchNormalization())
model.add(Conv2D(64, kernel_size=(3,3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(BatchNormalization())
model.add(Dropout(0.2))
model.add(Flatten())
model.add(Dense(256, activation='relu'))
model.add(Dropout(0.2))
model.add(Dense(64, activation='relu'))
model.add(Dense(2, activation = 'softmax'))
return model
#....
if retrain_from_prior_model == False:
model = create_model()
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
else:
model = load_model("checkpoints/model.h5")