Я строю CNN с Keras, который предсказывает координаты 13 ключевых точек на каждом изображении.Изображения у меня различаются по входному размеру, поэтому моя форма входного слоя (Нет, Нет, 3).Я использую начальные модули, поэтому я использую функциональный API.Теперь при кодировании последних слоев для моей модели я столкнулся с проблемой.Насколько я знаю, мой выходной слой будет слоем Dense (26), поскольку я буду кодировать координаты x и y как вектор.У меня проблемы с соединением выходного слоя с предыдущими сверточными слоями (из-за тензорных размеров)
x = Input(None, None, 3)
stage_1 = Conv2D(26, (1, 1))(x)
stage_1 = Dropout(0.3)(stage_1)
stage_2 = Conv2D(512, (1, 1))(x)
stage_2 = Dropout(0.3)(stage_2)
stage_2 = Activation('relu')(stage_2)
x = concatenate([stage_1, stage_2])
x = Lambda(lambda i: K.batch_flatten(i))(x)
outputs = Dense(26)(x)
Я попытался включить Flatten Layer (но он не совместим с произвольными входными формами), и я попытался использоватьK.batch_flatten () в лямбда-слое (который также не работал.) Мой вопрос: есть ли другой способ получить выходной слой в аналогичной форме ((13,2), также было бы хорошо, я только нашелмодели онлайн, где выходной слой является плотнымЯ также попробовал GlobalAveragePooling2d (), но это значительно снизило точность модели.Кроме того, использование функции для поиска выходной фигуры не сработало, см. Ниже
stage_1 = Conv2D(26, (1, 1))(x)
stage_1 = Dropout(0.3)(stage_1)
stage_2 = Conv2D(512, (1, 1))(x)
stage_2 = Dropout(0.3)(stage_2)
stage_2 = Activation('relu')(stage_2)
x = concatenate([stage_1, stage_2])
def output_shape_batch(tensor_shape):
print(tensor_shape)
return (batch_size, tensor_shape[1] * tensor_shape[2] * tensor_shape[3])
x = Lambda(lambda i: K.batch_flatten(i), output_shape=output_shape_batch)(x)
outputs = Dense(26)(x)
Я ожидаю, что модель будет скомпилирована, но получим TypeErrors Ошибка: TypeError: неподдерживаемые типы операндов для *:'NoneType' и 'NoneType'