Я использую 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
размерами, будут высоко оценены!