【问题标题】:Tensorflow: How to build a matrix from a dictionary of vectors?Tensorflow:如何从向量字典中构建矩阵?
【发布时间】:2018-03-22 09:43:26
【问题描述】:

我想在 tensorflow 中做一些在 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))

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

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(字典中的那个)...这对我来说有点模糊,尤其是在反向传播方面,因为我想要所有mat 的列的梯度对于字典中存储的相应向量的贡献是相同的。

这可能吗?

【问题讨论】:

    标签: python numpy matrix tensorflow concatenation


    【解决方案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]]
    

    【讨论】:

      猜你喜欢
      • 2017-11-18
      • 1970-01-01
      • 2020-07-01
      • 2018-10-05
      • 2017-11-28
      • 2017-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多