TensorFlow将concat结果张量分配给不同形状的张量



我使用concat将形状为[150,1]的张量t2附加到最初形状为[15,0]的张量t1上。我想创建一个形状为[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的维度1为0有关。有什么建议吗?提前谢谢。

[编辑]

事实证明,问题出在"assign"上,因为我将t1(shape(150,0))设置为concat结果(shape)(150,1)),这让TF对我大喊大叫(没错)。有办法绕过这个吗?

为了提供更多的上下文,t1是一个张量,我正在使用它来存储从seq2seq RNN的展开生成的logit t2,其中输出序列的长度未知。因此,随着每次展开,t1的大小将在维度1中增长。

使用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>

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

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

最新更新