我在TensorFlow中有一个2D张量,我想只选择1D。我该怎么做?
答案 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]