Tensorflow:如何从向量字典构建矩阵?

时间:2018-03-22 09:43:26

标签: python numpy matrix tensorflow concatenation

我想在张量流中做一些在NumPy中非常容易的事情。我无法弄清楚如何在tf中做到这一点,而且我也怀疑它是否按照我的意思工作。

基本上在NumPy中,我有一个随机初始化列向量的字典。 像

这样的东西
F = 6
keys = np.arange(1.0,4.0)
init_dict = {}
for key in keys:
    init_dict[key] = np.random.random(size=(F,1))

我有一个包含一定数量键的行向量,因此我构建了一个矩阵,其中每列是dict中包含的列向量之一。 它看起来像这样

inp = np.hstack((keys,keys)).reshape(1,-1)
mat = np.repeat(inp, F, axis=0)
for i in range(mat.shape[1]):
    mat[:,i] = init_dict[mat[0,i]][:,0]

这个mat然后进入我的模型。 我们的想法是训练存储在init_dict中的随机初始化列向量。

我想在TF中做同样的事情。 如何在TF中构建类似于mat的东西?

基本上mat将是tf.Variable,其中每列引用另一个tf.Variable(dict中的那个)...这对我来说有点模糊,特别是在backprop,因为我希望mat列的所有渐变都与存储在dict中的相应向量相同。

这可能吗?

1 个答案:

答案 0 :(得分:1)

使用tf.stack。例如:

import tensorflow as tf

session = tf.InteractiveSession()

d = {
  'foo': tf.Variable([1, 2, 3]),
  'bar': tf.Variable([4, 5, 6]),
  'baz': tf.Variable([7, 8, 9]),
}

session.run(tf.global_variables_initializer())
print(d['foo'].eval())
# >>> [1 2 3]

mat = tf.stack(list(d.values()), axis=1)
print(mat.eval())
# >>> [[1 4 7]
#      [2 5 8]
#      [3 6 9]]