我正在使用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)]]
有人可以解决这个问题吗?