TensorFlow:切片张量并保持原始形状



我有一个形状为 (?, 1082) 的张量tensor,我想在 for 循环中将此张量切成 n 个子部分,但我想保持原始形状,包括未知维度?

例:

lst = []
for n in range(15):
    sub_tensor = tensor[n] # this will reduce the first dimension
    print(sub_tensor.get_shape())

我正在寻找的打印输出:

(?, 1082) 
(?, 1082)

等。

如何在TensorFlow中实现这一点?

考虑到您的问题可能有很多限制,我至少可以想到 3 种解决方案。您可以使用tf.split .我将使用 tf.placeholder,但它也适用于张量和变量。

p = tf.placeholder(shape=[None,10], dtype=tf.int32)
s1, s2 = tf.split(value=p, num_or_size_splits=2, axis=1)

但是,如果所需的拆分数量很大,则此方法可能变得不可行。请注意,它也可以拆分None轴。

for n in range(15):
    sub_tensor = tensor[n, :] 
s = tf.slice(p, [0,2], [-1, 2])

Slice 可用于多维张量,但使用起来非常棘手。您可以使用tf.Tensor.getitem方法,几乎就像您在问题中描述的那样。它的作用类似于 NumPy .所以这应该可以完成这项工作:

for n in range(10):
    print(p[n, :])

但是,这些方法的使用在很大程度上取决于您的特定应用程序。希望这有帮助。