tf.dynamic_partition获得非空张量

时间:2018-10-03 14:31:07

标签: python python-3.x tensorflow

我正在使用tf.dynamic_partition来获取张量的动态分割,无法推断其大小。使用这个tf.unstack with dynamic shape的答案(选择2),我创建了这个实验代码,其想法是,在张量为tf.dynamic_partition ==时,用tf.size处理后创建某种过滤。 0,因此将创建一个仅获取非空张量tf.size> 0

的新列表。

在创建操作时,我需要具有非空张量的列表,因为此后,我需要在该列表上创建新的操作。

import tensorflow as tf


data = tf.placeholder(tf.float32, (None, 2))
partitions = tf.placeholder(tf.int32, (None))
max_partitions = 10

dp = tf.dynamic_partition(
    data,
    partitions,
    max_partitions,
    name="DynamicPartition"
)
new_dp = []
for tensor in dp:
    with tf.control_dependencies([tf.assert_rank_at_least(tensor, 1), tf.assert_greater(tf.size(tensor), 0)]):
          new_dp.append(tensor)

array = [[1,1],
         [1,1],
         [1,1],
         [1,1],
         [1,1],
         [2,2],
         [2,2],
         [2,2]]
order = [1,1,1,1,1,0,0,0]


with tf.Session() as sess:
    result = sess.run([dp], 
                      feed_dict={
                        data:array,
                        partitions:order
                      })
    print(result)

问题在于该实验无法正常进行,因为输出是tf.dynamic_partition创建的列表,您可以在其中看到所有张量,包括非张量和空张量

[[array([[2., 2.],
   [2., 2.],
   [2., 2.]], dtype=float32), array([[1., 1.],
   [1., 1.],
   [1., 1.],
   [1., 1.],
   [1., 1.]], dtype=float32), array([], shape=(0, 2), dtype=float32), array([], shape=(0, 2), dtype=float32), array([], shape=(0, 2), dtype=float32), array([], shape=(0, 2), dtype=float32), array([], shape=(0, 2), dtype=float32), array([], shape=(0, 2), dtype=float32), array([], shape=(0, 2), dtype=float32), array([], shape=(0, 2), dtype=float32)]]

有人可以解决这个问题吗?

0 个答案:

没有答案