TensorFlow concat заполнитель переменной величины с вектором
Скажем, у меня есть местозаполнитель
ph_input = tf.placeholder(dtype=tf.int32, [None, 1])
и вектор
h = tf.zeros([1,2], dtype=tf.int32)
В этом примере h
заполняется нулями для простоты, но в реальном случае он будет изменен другими переменными и будет иметь разные значения.
Я хочу эффективно выполнить concat
на ph_input
и h
по размеру 1
и получить новый тензор с формой [None, 1+2]
. К сожалению, concat
требует, чтобы все входные тензоры имели одинаковую форму, кроме concat_dim
, которые мой пример не встречает.
Я рассматривал расширение h
в той же форме, что и данные, которые подаются на ph_input
, но я не совсем уверен, как это сделать с самим заполнителем. Если я получаю форму из входных данных напрямую, то, думаю, нет необходимости использовать заполнитель.
Ответы
Ответ 1
Самое общее решение - использовать tf.shape()
op, чтобы получить размер времени выполнения заполнитель, а tf.tile()
op для расширения h
до соответствующего размера:
ph_input = tf.placeholder(dtype=tf.int32, shape=[None, 1])
h = tf.zeros([1, 2], dtype=tf.int32) # ...or some other tensor of shape [1, 2]
# Get the number of rows in the fed value at run-time.
ph_num_rows = tf.shape(ph_input)[0]
# Makes a `ph_num_rows x 2` matrix, by tiling `h` along the row dimension.
h_tiled = tf.tile(h, tf.pack([ph_num_rows, 1]))
result = tf.concat(1, [ph_input, h_tiled])