【发布时间】:2020-12-14 22:19:17
【问题描述】:
我有一个形状为 [None, n_steps, n_filt] 的张量,我需要将一个新的“标量”特征连接到该张量(称之为 x)。它的维度为[None, 1]。该标量应作为新的特征值附加,为每一步添加相同的常数值并生成形状为[None, n_steps, n_filt+1] 的新张量。理想情况下,我会创建一个新张量并将新张量连接到它:
new_feat = tf.ones([None, n_steps, 1]) * x
tf.concat([orig_tensor, new_feat], axis=2)
但我无法创建一个无形状的张量。我收到以下错误:
ValueError: Attempt to convert a value (None) with an unsupported type (<class 'NoneType'>) to a Tensor.
经过一番折腾,我发现了ones_like() 方法,它复制了原始张量的形状。但是我需要将最后一个维度减少到一个,并且使用切片会破坏该维度。我可以重新创建它,但它是一团糟。
我构建了以下行,它可以满足我的需求,但看起来不必要地冗长。有没有更好的方法来做到这一点:
new_feat = tf.expand_dims(tf.ones_like(orig_tensor)[:,:,0],axis=-1)*x
tf.concat([orig_tensor, new_feat], axis=2)
编辑:即使上面的代码编译,它也不会运行。叹息。
Incompatible shapes: [1000,156,1] vs. [1000,1]
编辑 2:这是另一个尝试。从维度 = [None, 1] 的原始特征开始,使用expand_dim() 插入新维度,然后使用gather() 复制中间维度:
tf.gather(tf.expand_dims(x, axis=1), indices=[0]*n_steps, axis=1)
编辑 3:这是另一种选择:
tf.tile(tf.expand_dims(x, axis=1), multiples=[1,n_steps,1])
【问题讨论】:
标签: python-3.x tensorflow2.0 tensor