如何在TensorFlow中仅选择(投影)张量的一个维度?

时间:2017-05-21 22:09:02

标签: tensorflow

我在TensorFlow中有一个2D张量,我想只选择1D。我该怎么做?

2 个答案:

答案 0 :(得分:1)

您可以使用slice。这是一个例子:

 A[1] := 1;
 A[2] := 2;
 n = 2;
 practice (A[1], n, A[n]);

其中输出的内容如下:

import tensorflow as tf

initial = tf.truncated_normal([2,3], mean=100.0, stddev = 10.0)
slice1 = tf.slice(initial, [0,0], [1,-1])
slice2 = tf.slice(initial, [0,0], [-1, 1])
with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    x,y,z = sess.run([initial, slice1, slice2])
    print "original"
    print x
    print "slice1"
    print y
    print "slice2"
    print z

在此示例中,original [[ 94.17047119 90.71355438 90.06797791] [ 99.81169891 99.91291809 106.17702484]] slice1 [[ 94.17047119 90.71355438 90.06797791]] slice2 [[ 94.17047119] [ 99.81169891]] 接受三个参数。按顺序,它们是:

  • slice:包含您想要切片的数据的input维度N的张量。在我们的例子中,它是{T [d1, ..., dN]的2D张量。

  • [heigth, width]:长度为begin的列表,指定幻灯片的起始位置。您可以直观地将其视为访问者索引,就像在numpy中一样。因此,表示张量的标量元素。在我们的例子中,N将指向“上,左”位置的数字。

  • [0,0]:同样是长度size的列表,指定输出张量的大小,从N开始,并获取每个维度的相应元素数。在我们的示例中,它可以包含begin[0,0]之间的任何数字,但如果它包含任何零,则会导致切片返回空张量。此外,您不能超出输入张量的实际大小(例如,如果您有3个元素而从第二个开始,则只能有1个或2个,但不能超过3个。)

另请注意,构建图表时,[heigth,width]begin幅度都会得到解决。在这两种情况下,您都可以使用size等效于该维度的最大大小(通常在python中)。

答案 1 :(得分:0)

仅出于完整性考虑,如果您要选择“完整”尺寸而不是实际尺寸的一部分,那么这似乎比较容易,而且还可以将张量减小一个尺寸:

import tensorflow as tf

initial = tf.truncated_normal([2,3], mean=100.0, stddev = 10.0)
slice1 = initial[0]
slice2 = initial[:, 0]
with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    x,y,z = sess.run([initial, slice1, slice2])
    print("original")
    print(x)
    print("slice1")
    print(y)
    print("slice2")
    print(z)

哪个输出如下:

original
[[  94.17047119   90.71355438   90.06797791]
 [  99.81169891   99.91291809  106.17702484]]
slice1
[ 94.17047119  90.71355438  90.06797791]
slice2
[ 94.17047119 99.81169891]