У меня есть два входа для моей модели, оба из которых являются тензорами (один - входной слой, а другой - слой внедрения). Я использую concatenate
для тензоров, а не Concatenate
для слоев. Я сделал это раньше без проблем, но в настоящее время я использую другой набор данных, где входные данные имеют другую форму. Я пытаюсь объединить изображение с матрицей встраивания и передать его в densenet121:
-----------
|embedding|
| |
-----------
| image |
-----------
Вот их оригинальные формы:
Image: (?, 224, 224, 1)
embedding: (?, 200, 224)
Очевидно, что они различны размер (один квадрат, другой прямоугольник) и разное количество тусклых точек. Поэтому я попытался объединить следующим образом:
merged = Concatenate([text_embedding, squeeze(image_input, axis=-1)], axis=1, name='merged')
Причина сжатия заключается в том, что он имеет форму (?, 224, 224, 1), а встраивание такое, как показано выше. Я подозреваю, что это может быть одна из двух вещей:
- Неправильная ось concat
- Функция concat не может работать с этими входами (так как они могут быть слоями, должны использовать Concat?)
- Может быть, обе фигуры должны иметь 4 dims?
Я получил следующие ошибки:
default :
ValueError: Shape must be rank 4 but is rank 3 for 'sequential_11/densenet121/zero_padding2d_21/Pad' (op: 'Pad') with input shapes: [?,424,224], [4,2].
для 1) Я попытался установить ось concat на 2 и получил:
ValueError: A `Concatenate` layer requires inputs with matching shapes except for the concat axis. Got inputs shapes: [(None, 200, 224, 1), (None, 224, 224, 1)]
для 2) изменено concat
на Concat
TypeError: __init__() got multiple values for argument 'axis'
для 3) Я попытался: expand_dims(text_embedding, axis=-1)
и получил: AttributeError: 'NoneType' object has no attribute '_inbound_nodes'
Есть идеи, как я могу это исправить?