查找Tensor行的范围并避免循环执行此操作

时间:2017-07-10 22:05:29

标签: python tensorflow

我对使用tensorflow相当新,所以有可能我的问题有一个非常明显的解决方案,我错过了。我目前有一个三维数组填充整数值。具体的值并不重要,所以我为了这个问题放入了一个带有填充值的较小数组

    `Array = tf.constant([[[0,0,1000,0],[3000,3000,3000,3000],[0,2500,0,0]],
    [[100,200,300,400],[0,0,0,100],[300,300,400,300]]]).eval()`

因此,我相信打印时阵列看起来像这样。

    `[[[0,0,1000,0],
       [3000,3000,3000,3000],
       [0,2500,0,0]],
      [[100,200,300,400],
       [0,0,0,100],
       [300,300,400,300]]]`

实际上,这个阵列有23个二维阵列堆叠在一起。我想要做的是创建一个数组或3个独立的数组,其中包含3-D数组不同级别的每一行中的值范围。

这样的东西
   `Xrange = tf.constant([Array[0,0,:].range(),Array[1,0,:].range(),Array[2,0,:].range()...,Array[22,0,:].range()])`

首先,我无法使用tensorflow找到一组功能齐全的命令,这些命令允许我找到行的范围。我知道如何在numpy中轻松地做到这一点,但还没有找到任何方法来做到这一点。其次,假设有一种方法可以执行上述操作,是否有一种方法可以合并代码,而无需在一行中为每个唯一行写出23次。我知道可以简单地用for循环完成,但我也想避免使用需要循环的解决方案。有没有一种好方法可以做到这一点,还是需要更多信息?另外请告诉我,如果我搞砸了我的语法,因为我对python和tensorflow都还不熟悉。

1 个答案:

答案 0 :(得分:0)

正如我所料,我的问题有一个相当简单的答案。所有必要的是使用tf.reduce_max和tf.reduce_min命令 最终结束的代码如下:

Range = tf.subtract(tf.reduce_max(tf.constant(Array),axis=2,keep_dims=True),tf.reduce_min(tf.constant(Array),axis=2,keep_dims=True))

这产生了:

[[[1000]
  [   0]
  [2500]]

 [[ 300]
  [ 100]
  [ 100]]]