我正在使用 map_fn 函数,并注意到它输出一个 TensorArray,这应该意味着它能够输出“锯齿状”张量(其中内部张量具有不同的第一维度)。
我尝试使用以下代码查看此操作:
import tensorflow as tf
import numpy as np
NUM_ARRAYS = 1000
MAX_LENGTH = 1000
lengths = tf.placeholder(tf.int32)
tArray = tf.map_fn(lambda x: tf.random_normal((x,), 0, 1),
lengths,
dtype=tf.float32) # Should return a TensorArray.
# startTensor = tf.random_normal((tf.reduce_sum(lengths),), 0, 1)
# tArray = tf.TensorArray(tf.float32, NUM_ARRAYS)
# tArray = tArray.split(startTensor, lengths)
# outArray = tArray.concat()
with tf.Session() as sess:
outputArray, l = sess.run(
[tArray, lengths],
feed_dict={lengths: np.random.randint(MAX_LENGTH, size=NUM_ARRAYS)})
print outputArray.shape, l
但是得到了错误:
“TensorArray 的形状不一致。索引 0 的形状为:[259],但索引 1 的形状为:[773]”
这当然让我感到惊讶,因为我的印象是 TensorArrays 应该能够处理它。我错了吗?