2016-12-10 3 views
1

Я хотел бы создать двухмерную матрицу в десятисотовом конкатенировании нескольких 1-D массивов, созданных для цикла. Скажем, например, что в каждом цикле создается массив формы = (1,5), полный единиц ([1,1,1,1,1]). Что мне нужно, чтобы получить наконец Атер 3 петель:Tensorflow: создайте матрицу с использованием нескольких tf.concat

[[1,1,1,1,1] 
    [1,1,1,1,1] 
    [1,1,1,1,1]] 

я на самом деле нужно решение, которое добавляет новую строку в матрице в каждом цикле. Как создать это с помощью тензорного потока? Я думал о tf.concat, но, где я не могу думать, где сохранить значение матрицы во время циклов.

+0

Вы всегда будете иметь 3 петли? – martianwars

+0

У меня всегда будет определенное количество циклов, да! –

+0

добавил ответ, дайте мне знать, если вам нужно что-то более общее – martianwars

ответ

1

Если у вас есть большое количество циклов, вам нужно будет объединить массивы. Начнем с вашего первого вектора v1, имеющего только одно измерение. Начните с изменения формы до размеров (1, vector_size) с использованием tf.reshape().

v1 = tf.reshape(v1, [1, vector_size]) 

Теперь вы можете сделать то же самое для вектора v2 и использовать tf.concat() для объединения двух массивов вдоль axis=0.

v1 = tf.concat(0, [v1, v2]) 

Примечание. Я повторно использовал v1 здесь. Это будет в вашей петле, и v2 будет новой переменной.


Если вместо этого у вас есть фиксированное меньшее число массивов (петель в контексте вопроса), вы можете сделать это с помощью tf.stack().

Предположим, что ваш первый цикл производит массив v1, второй v2 и третий v3. Вы можете использовать tf.stack() следующим образом,

result = tf.stack([v1, v2, v3]) 
+0

Извините, я не задал правильный вопрос. Моя проблема заключается именно в этом vi. Скажем, число циклов равно N, где N может быть очень большим. Я хотел бы решение, которое добавляет новую строку в матрицу в каждом отдельном цикле. –

+0

Является ли это более полезным? – martianwars

+0

У меня вопрос noob: Если я это сделаю при создании своего вычислительного графа, например, посчитав некоторые вложения в цикле for и использую стек для получения матрицы, будет ли backprop работать нормально? – Rahul

1

То, что вы хотите, может быть tf.tile, а ниже приведен пример:

a = tf.reshape(tf.range(10), (-1, 10)) 
b = tf.tile(a, (5, 1)) 
with tf.Session() as sess: 
    print(sess.run(a)) 
    print(sess.run(b)) 
Смежные вопросы