TensorFlow将concat-result张量分配给不同形状的张量

时间:2017-01-31 09:14:26

标签: python tensorflow neural-network

我使用concat将形状[150,1]的张量t2附加到张量t1上,张量t1的形状最初为[150,0]。我想创建一个具有形状[150,1](在轴上连接= 1)的张量,并用新张量覆盖t1。这是我的代码:

t1.assign(tf.concat(1, [t1, t2]))

我得到的错误是:

ValueError: Dimension 1 in both shapes must be equal, but are 0 and 1

奇怪的是,当我设置axis = 0时,我得到了同样的错误。不知道发生了什么;这应该是一件非常容易的事情。我怀疑它与t1的Dimension 1为0有关。有什么建议吗?提前谢谢。

[编辑]

事实证明,问题在于"分配",因为我将t1(形状(150,0))设置为连续结果(形状(150,1)),这是让TF尖叫着我(理所当然)。有什么方法吗?

为了提供更多的上下文,t1是我用于存储从展开seq2seq RNN生成的logit t2的张量,其中输出序列具有未知长度。因此,每次展开时,t1的大小将在Dimension 1中增长。

2 个答案:

答案 0 :(得分:0)

使用reshape

 t1 = tf.placeholder(tf.float32,[150,1])  
 t2 = tf.placeholder(tf.float32,[150])      
 tf.concat(1,[t1,tf.reshape(t2,[150,1])])  

输出:

<tf.Tensor 'concat_2:0' shape=(150, 2) dtype=float32>

答案 1 :(得分:0)

问题与tf.assign上的形状更新有关。您可以将validate_shape设置为False。这将删除tf.assign上的错误,但会因为形状不会更新而产生不良行为。

这是TensorFlow的错误,并且有一个与之相关的GitHub问题等待R的实现:https://github.com/tensorflow/tensorflow/issues/5492