首页 > 解决方案 > 将步骤应用于验证数据还是仅应用于训练数据?

问题描述

我有一个图像分类问题,我想使用预训练模型 EfficicentNetB0(keras 应用程序:https ://keras.io/api/applications/efficientnet/#efficientnetb0-function和论文:https ://arxiv.org/abs /1905.11946 ) 具有来自 ImageNet 的权重,用于此分类问题。

我下载并导入了模型及其权重,如下所示:

!pip install git+https://github.com/qubvel/segmentation_models
import efficientnet.keras as efn
efnB0_model = efn.EfficientNetB0(include_top=False, weights="imagenet", input_shape=(224, 224, 3))
efnB0_model.trainable = False

我不会包括这个模型的顶部,因为它不适合我正在分析的问题,这就是我设置include_topFalse. 此外,我不想训练 EfficientNet 的参数,因此efnB0_model.trainable = False.

现在,我想将 应用于efnB0_model训练数据X_train 一次(不必多次这样做,因为权重已经存在并且不应更改),然后冻结所有底层。

因此,我创建了一个DataGenerator_X.

class DataGenerator_X(Sequence):

    def __init__(self, x_set, batch_size):
        self.x = x_set
        self.batch_size = batch_size

    def __len__(self):
        return math.ceil(len(self.x) / self.batch_size)

    def __getitem__(self, idx):
        batch_x = self.x[idx*self.batch_size : (idx + 1)*self.batch_size]
        batch_x = [imread(file_name) for file_name in batch_x]
        batch_x = np.array(batch_x)
        batch_x = batch_x * 1./255
        

        return batch_x

DataGenerator_X会创建批次并将它们除以 255(这是 EfficicentNet 的首选)。

之后,我将其DataGenerator_X应用于X_train(这是我的图像的 file_path)。

training_generator = DataGenerator_X(X_train, batch_size=32)

然后我在对它们运行 EfficientNet-B0 模型的底部后预测值X_trainX_after_efn我通过使用以下代码来做到这一点:

X_after_efn_train = efnB0_model.predict(training_generator, verbose=1)

我想知道的是,如果我也必须将所有这些步骤应用于验证数据?那么,我是否还必须创建validation_generatorand X_after_efn_val

标签: pythontensorflowkerasconv-neural-network

解决方案


简而言之,是的。您必须创建一个validation_generator然后efnB0_model.predict()在其上运行。

主要原因是该predict()函数只接受一组输入样本(检查方法https://keras.io/api/models/model_training_apis/#predict-methodx下的输入)。predict

从好的方面来说,这不是太多的工作,因为您可以使用相同的生成器。

val_generator = DataGenerator_X(X_val, batch_size=32)
X_after_efn_val = efnB0_model.predict(val_generator, verbose=1)

您还可以查看此博客的“使用瓶颈功能”部分。他们做类似的事情。https://blog.keras.io/building-powerful-image-classification-models-using-very-little-data.html


推荐阅读