【发布时间】:2020-08-12 14:27:47
【问题描述】:
我正在使用 Keras 的内置 Resnet(添加到顺序)和数据生成器构建图像分类器。图像存储在单独的文件夹中,文件夹充当类。
问题在于训练数据集中有 464 个类,而验证数据集中有 683 个类。因此,当我运行时:
model.fit_generator(
train_datagen,
steps_per_epoch = STEP_SIZE_TRAIN,
epochs = EPOCHS,
verbose = 1,
callbacks = [cp_callback, cp_tensorboard],
validation_data = val_datagen,
validation_freq = 2
)
我得到了错误
ValueError: Error when checking target: expected dense_2 to have shape (464,) but got array with shape (683,)
这是有道理的;在训练集上训练的模型无法评估它没有节点的类。不过,是否可以修改我的模型或数据集部门来解决此问题?
或者,有没有办法将validation_split 与数据生成器一起使用,让我无需接触单独的数据集即可进行验证?
【问题讨论】:
-
您应该拥有训练数据集中所有类的数据,否则没有意义,您将无法预测那些不在训练数据中的类。
-
使用 numpy 过滤您的验证数据,并仅使用与训练数据具有相同标签的样本。您的模型只能预测它在训练中看到的类样本。
-
@AugustoMaillo 我如何过滤来自生成器的输出?我是否需要创建自己的自定义生成器而不是使用内置的 ImageDataGenerator 类来读取验证数据?
-
您可以在定义 ImageDataGenerator 之前创建自己的自定义生成器或过滤数据。使用 numpy 过滤数据。检查 np.where、np.any 等。
标签: tensorflow keras tensorflow-datasets