Изменить количество входных каналов на предварительно подготовленную модель keras.applications? - PullRequest
1 голос
/ 02 мая 2019

Я создаю прототип модели сегментации с глубоким обучением, для которой требуется шесть входных каналов (два выровненных изображения RGB 448x448 при различных условиях освещения). Я хочу сравнить производительность нескольких предварительно обученных моделей с моими текущими моделями, которые я тренировал с нуля. Могу ли я использовать предварительно обученные модели в tf.keras.applications для входных изображений с более чем 3 каналами?

Я попытался сначала применить свертку, чтобы уменьшить размер канала до 3, а затем передал этот вывод в tf.keras.applications.DenseNet121(), но получил следующую ошибку:

import tensorflow as tf
dense_input = tf.keras.layers.Input(shape=(448, 448, 6))
dense_filter = tf.keras.layers.Conv2D(3, 3, padding='same')(dense_input)
dense_stem = tf.keras.applications.DenseNet121(include_top=False, weights='imagenet', input_tensor=dense_filter)
*** ValueError: You are trying to load a weight file containing 241 layers into a model with 242 layers.

Есть ли лучший способ использовать предварительно обученные модели для данных с разным количеством входных каналов в кератах? Поможет ли предварительная подготовка, когда количество входных каналов отличается?

1 Ответ

2 голосов
/ 02 мая 2019

Технически это должно быть возможно.Возможно, используя саму модель __call__:

orig_model = tf.keras.applications.DenseNet121(include_top=False, weights='imagenet')
dense_input = tf.keras.layers.Input(shape=(448, 448, 6))
dense_filter = tf.keras.layers.Conv2D(3, 3, padding='same')(dense_input)
output = orig_model(dense_filter)

model = tf.keras.Model(dense_input, output)
model.compile(...)
model.summary()

На концептуальном уровне, я бы обеспокоен тем, что новый ввод не очень похож на исходный ввод, на котором обучалась предварительно обученная модель.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...