【问题标题】:Multiple Output Model while using Imagedatagenerator使用 Imagedatagenerator 时的多输出模型
【发布时间】:2020-12-13 04:18:57
【问题描述】:

是否可以将 Imagedatagenerator 与具有多个输出的 flow_from_directory 一起使用?

我想像下图那样洒出模型。 我的问题是左侧的输出是 class_mode=categorical 而其他的是二进制的。我已经可以编译模型,但如果我想使用 flow_from_directory,我不知道如何处理标签。 有什么方法可以将 flow_from_directory 与多个输出一起使用?

model architecture

【问题讨论】:

  • 你的目标是什么?他们来自哪里?

标签: tensorflow keras data-science data-augmentation


【解决方案1】:

您可以像往常一样使用 ImageDataGenerator。您将不得不使用 Keras 功能 API。让我们看一下这个示例,我们将在其中使用迁移学习,但我将保持与您的网络相同的末端结构。

base_model = MobileNetV2(weights='imagenet', include_top=False, input_shape=(400,400,3))
x = base_model.output
x = GlobalAveragePooling2D()(x)
x = Flatten(x)
x1 = Dense(1024, activation='relu')(x)
output1 = Dense(20,activation='softmax', name='toutput')(x1)

y = Dense(512, activation='relu')(x)
y = Dense(512, activation='relu')(y)
output2 = Dense(2,activation='softmax', name='r_output')(y)
output3 = Dense(4, activation='sigmoid', name='ri_output')(y)
output4 = Dense(12, activation='softmax', name='li_output')(y)

现在网络有 4 个输出,就像你的图片一样。现在我们可以编译并为每个输出提供自己的损失函数。我们可以通过其“名称”来引用每个输出。

optimizer = Adam(learning_rate=.0001)
losses = {
    'toutput': 'categorical_crossentropy',
    'r_output': "mean_absolute_error",
    'ri_output': "mean_absolute_error",
    'li_output': "mean_squared_error",
    }

如果你想要特定的指标,你可以这样做:

model.compile(optimizer=optimizer, loss=losses, metrics={'toutput':'accuracy', ...)

【讨论】:

  • ImageDataGenerator 根据目录结构输出标签。怎么能输出4种不同的输出?
  • 根据您想要输出的内容,您可以使用 tf.dataset 来匹配其他属性。例如,您可以遍历每个批次并将其与 tf.dataset 条目匹配,我建议使用 tfrecord。然后,您可以从生成器返回该条目和原始数据
  • 谢谢。使用 tf.dataset 的建议听起来很有希望。
猜你喜欢
  • 2020-11-22
  • 1970-01-01
  • 2017-06-04
  • 2021-05-31
  • 2021-06-24
  • 2021-03-04
  • 2023-03-29
  • 1970-01-01
  • 2022-01-23
相关资源
最近更新 更多