Керас - Попытка объединить два входа - PullRequest
0 голосов
/ 14 января 2020

У меня есть два входа для моей модели, оба из которых являются тензорами (один - входной слой, а другой - слой внедрения). Я использую 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), а встраивание такое, как показано выше. Я подозреваю, что это может быть одна из двух вещей:

  1. Неправильная ось concat
  2. Функция concat не может работать с этими входами (так как они могут быть слоями, должны использовать Concat?)
  3. Может быть, обе фигуры должны иметь 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'

Есть идеи, как я могу это исправить?

1 Ответ

0 голосов
/ 14 января 2020

Хорошо, нашёл мой ответ:

expandedText = Lambda(lambda x: expand_dims(x, axis=-1))
merged = concatenate([expandedText(text_embedding), image_input], axis=1, name='merged')

Очевидно, вам нужно превратить его в слой перед тем, как сделать график таким, каким он был найден здесь .

...