Я использую Tensorflow из Python. У меня есть два тензора, которые я хочу объединить (это может быть и другая операция, я не думаю, что точная операция имеет значение для этого вопроса). Форма этих тензоров определяется как (N1 != N2 — положительные целые числа):
a: (None, N1)
b: (1 , N2)
Поскольку я буду конкатенировать по последней оси, кажется, что эту операцию можно выполнить. Но тензорный поток отказывает. Код
from tensorflow import keras
from tensorflow.keras import layers
N1 = 2
N2 = 3
D1 = None
a = keras.Input(shape=(D1, N1))
b = keras.Input(shape=(1, N2))
c = layers.Concatenate(axis=-1)([a, b])
терпит неудачу с
ValueError: A `Concatenate` layer requires inputs with matching shapes except for the concat axis. Got inputs shapes: [(None, None, 2), (None, 1, 3)]
Ближе всего к выполнению этой работы я подошел к использованию RepeatVector
, как показано ниже, но, к сожалению, это работает только со статическими размерами, а не с динамическими:
N1 = 2
N2 = 3
D1 = 7
a = keras.Input(shape=(D1, N1))
b = keras.Input(shape=(N2))
b_repeated = layers.RepeatVector(D1)(b)
c = layers.Concatenate()([a, b_repeated])
Будем очень признательны за любые предложения о том, как объединить - т.е. сделать правильную трансляцию или повторение - с такими None
размерами!
(None, N1)
и(1, N2)
вдоль второй оси, как говорится в сообщении, каждое другое измерение (здесь только первое) должно иметь одинаковый размер. Вы хотите повторить второй тензор столько раз, сколько первое измерение первого тензора и затем соединить? - person jdehesa   schedule 15.10.2019