【问题标题】:Reshaping a Tensor in TensorFlow with scalar tensors使用标量张量在 TensorFlow 中重塑张量
【发布时间】:2016-02-15 18:46:08
【问题描述】:

我有一个张量,X,形状为 (T, n, k)

如果我事先知道形状,很容易重塑,tf.reshape(X, (T * n, k)) 其中T, n, k 是整数,而不是张量。但是,如果我不知道形状,有没有办法做到这一点。似乎获得像shape = tf.shape(X) 这样的形状并进行整形是行不通的。也就是说,

tf.reshape(X, (tf.shape[0] * tf.shape[1], tf.shape[2]))

有什么想法吗?在我的应用程序中,Tk 在运行前已知,但 n 仅在运行时已知。

【问题讨论】:

    标签: python reshape tensorflow


    【解决方案1】:

    看看这个:

    import tensorflow as tf
    
    a, b, c = 2, 3, 4
    x = tf.Variable(tf.random_normal([a, b, c], mean=0.0, stddev=1.0, dtype=tf.float32))
    s = tf.shape(x)
    
    init = tf.initialize_all_variables()
    sess = tf.Session()
    sess.run(init)
    v1, v2, v3 = sess.run(s)
    y = tf.reshape(x, [v1 * v2, v3])
    shape = tf.shape(y)
    
    print sess.run(y)
    print sess.run(shape)
    

    我在初始化后得到变量的形状,然后再使用它。另请查看this answer,因为它处理类似的事情。

    【讨论】:

    • 虽然我认为这可行,但我担心它会增加计算开销。在 Theano 中,reshape() 接受符号变量,我想知道是否有这样的解决方案,可能是将单独的标量连接成一个新的张量或类似的东西。
    • @AsianYayaToure 这显然有效,因为我对其进行了测试:-)。我不会担心现阶段的开销。确保您的模型按预期工作并预测您希望它预测的内容。
    • 其实这样不行。在您的示例中,x 的形状在图形构建时是已知的。您已明确设置 a, b, c = 2, 3, 4。试试这个:x = tf.placeholder(tf.int32, [100, None, 3]) 并做同样的事情。
    • @AsianYayaToure 我知道了。你应该告诉你使用tf.placeholder。我会写一个新的答案,它适用于占位符。
    【解决方案2】:

    既然您告诉过您使用占位符来填充数据,那么它开始变得有意义了。以下是在这种情况下如何重塑数据的示例:

    import tensorflow as tf
    import numpy as np
    data = np.random.rand(2, 3, 4)
    
    x = tf.placeholder("float", None)
    s = tf.shape(x)
    
    sess = tf.Session()
    shape_original = sess.run(s, feed_dict={x: data})
    
    x_ = tf.reshape(x, [shape_original[0] * shape_original[1], shape_original[2]])
    s_ = tf.shape(x_)
    
    shape_now = sess.run(s_, feed_dict={x: data})
    print 'Original\t', shape_original
    print 'Now\t\t\t', shape_now
    
    sess.close()
    

    【讨论】:

      猜你喜欢
      • 2016-10-18
      • 2020-10-13
      • 2016-03-12
      • 2018-10-27
      • 1970-01-01
      • 2017-09-14
      • 1970-01-01
      • 1970-01-01
      • 2017-08-20
      相关资源
      最近更新 更多