У меня есть случай использования, когда мне нужно объединить 2D-тензор с 3D-тензором в Keras. Размеры трехмерного тензора являются динамическими (например, трехмерный тензор может быть выходом слоя LSTM с формой [batch_size, num_timesteps, num_features],
, где batch_size
и num_timesteps
являются динамическими).
Я использовал RepeatVector
, чтобы повторить значения 2D-тензора перед операцией «слияния» с 3D-тензором.
Но в моем случае операция «слияния» выдает ошибку (подробности об ошибке см. Ниже). Ниже я поделился типичным кодом операций, которые я пытаюсь выполнить, вместе с ошибкой.
Я подозреваю, что проблема здесь в RepeatVector для динамической формы. Или мне не хватает чего-то более фундаментального? Есть ли способ добиться этого правильно?
Я использую Keras v2.1.6 с серверной частью Tensorflow v1.8.0.
import keras
from keras.layers import *
input_3D = Input(shape=(None,100,), dtype='int32', name='input_3D')
input_2D = Input(shape=(100,), dtype='int32', name='input_2D')
input_2D_repeat = RepeatVector(K.shape(input_3D)[1])(input_2D)
merged = merge([input_3D, input_2D_repeat], name="merged", mode='concat')
Приведенный выше код вызывает ошибку при операции «слияния»:
ValueError: в режиме «concat» можно объединять только слои с соответствующими выходными формами, за исключением оси concat. Формы слоя: [(Нет, Нет, 100), (Нет,, 100)]
Я вижу, что второе измерение в input_3D
это None
, но второе измерение в input_2D_repeat
это tf.Tensor 'strided_slice:0' shape=() dtype=int32
.
Как я могу это исправить?