Множественная модель вывода при использовании Imagedatagenerator

#tensorflow #keras #data-science #data-augmentation

#tensorflow #keras #наука о данных #увеличение данных

Вопрос:

Возможно ли использовать Imagedatagenerator с flow_from_directory с несколькими выходами?

Я хочу разлить модель, как на картинке ниже. Моя проблема в том, что вывод слева — class_mode = категориальный, а остальные — двоичные. Я уже могу запустить модель, но я понятия не имею, как обращаться с метками, если я хочу использовать flow_from_directory. Есть ли какой-либо способ использовать flow_from_directory с несколькими выходами?

архитектура модели

Комментарии:

1. каковы ваши цели? откуда они берутся?

Ответ №1:

Вы можете использовать ImageDataGenerator как обычно. Вам придется использовать функциональный API Keras. Давайте посмотрим на этот пример, в котором мы будем использовать transfer learning, но я сохраню ту же конечную структуру, что и в вашей сети.

 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', ...)
  

Комментарии:

1. ImageDataGenerator выводит метку на основе структуры каталогов. Как он может выводить 4 разных вывода?

2. Основываясь на том, что именно вы хотите вывести, вы можете использовать tf.dataset для сопоставления других атрибутов. Например, вы можете выполнять итерации по каждому пакету и сопоставлять его с записью tf.dataset, я рекомендую использовать tfrecord. Затем вы можете вернуть эту запись и исходные данные из генератора

3. Спасибо. Рекомендация использовать tf.dataset звучит многообещающе.