Python 如何在Tensorflow中使用tf.while_循环访问TensorArray元素?

Python 如何在Tensorflow中使用tf.while_循环访问TensorArray元素?,python,tensorflow,Python,Tensorflow,我有一个关于使用Tensorary的问题 问题: 我想使用tf.while\u循环访问Tensorary数组的元素。请注意,我可以使用例如u1.read(0)读取Tensorary的内容 我的当前代码: 以下是我到目前为止的情况: embeds_raw = tf.constant(np.array([ [1, 1], [1, 1], [2, 2], [3, 3], [3, 3], [3, 3] ], dtype='float32')) embeds

我有一个关于使用Tensorary的问题

问题:
我想使用
tf.while\u循环访问Tensorary数组的元素。请注意,我可以使用例如
u1.read(0)
读取Tensorary的内容

我的当前代码:
以下是我到目前为止的情况:

embeds_raw = tf.constant(np.array([
    [1, 1],
    [1, 1],
    [2, 2],
    [3, 3],
    [3, 3],
    [3, 3]
], dtype='float32'))
embeds = tf.Variable(initial_value=embeds_raw)
container_variable = tf.zeros([512], dtype=tf.int32, name='container_variable')
sen_len = tf.placeholder('int32', shape=[None], name='sen_len')
# max_l = tf.reduce_max(sen_len)
current_size = tf.shape(sen_len)[0]
padded_sen_len = tf.pad(sen_len, [[0, 512 - current_size]], 'CONSTANT')
added_container_variable = tf.add(container_variable, padded_sen_len)
u1 = tf.TensorArray(dtype=tf.float32, size=512, clear_after_read=False)
u1 = u1.split(embeds, added_container_variable)

sentences = []
i = 0

def condition(_i, _t_array):
    return tf.less(_i, current_size)

def body(_i, _t_array):
    sentences.append(_t_array.read(_i))
    return _i + 1, _t_array

idx, arr = tf.while_loop(condition, body, [i, u1])

with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    sents = sess.run(arr, feed_dict={sen_len: [2, 1, 3]})
    print(sents)
错误消息:

回溯(最近一次调用上次):文件 “/usr/local/lib/python3.5/dist-packages/tensorflow/python/client/session.py”, 第267行,在init fetch,allow_tensor=True,allow_operation=True)File“/usr/local/lib/python3.5/dist packages/tensorflow/python/framework/ops.py”, 第2584行,在as_图形_元素中 返回self.\u as\u graph\u element\u locked(对象、允许张量、允许操作)文件 “/usr/local/lib/python3.5/dist-packages/tensorflow/python/framework/ops.py”, 第2673行,输入为图形元素锁定 %(type(obj)。name,types_str))TypeError:无法将张量数组转换为张量或运算

在处理上述异常期间,发生了另一个异常:

回溯(最近一次调用上次):文件 “/home/ultimateai/Honain/new/ultimateai/exercises/dynamic_reformate.py”, 第191行,在 main()文件“/home/ultimateai/Honain/new/ultimateai/exercises/dynamic_reformate.py”, 总图187行 变量容器()文件“/home/ultimateai/Honain/new/ultimateai/exercises/dynamic_restrape.py”, 第179行,在变量容器中 sents=sess.run(arr,feed_dict={sen_len:[2,1,3]})文件“/usr/local/lib/python3.5/dist packages/tensorflow/python/client/session.py”, 789线,运行中 运行元数据文件“/usr/local/lib/python3.5/dist-packages/tensorflow/python/client/session.py”, 第984行,运行中 self.\u图形、回执、提要内容字符串、提要句柄=提要句柄)文件 “/usr/local/lib/python3.5/dist-packages/tensorflow/python/client/session.py”, 第410行,在init self._fetch_mapper=_FetchMapper.for_fetch(fetches)文件“/usr/local/lib/python3.5/dist packages/tensorflow/python/client/session.py”, 第238行,输入以获取 返回_ElementFetchMapper(fetches,construction_fn)文件“/usr/local/lib/python3.5/dist packages/tensorflow/python/client/session.py”, 第271行,在init %(fetch,type(fetch),str(e)))类型错误:fetch参数的类型无效,必须是 弦或张量。(无法将张量数组转换为张量 操作。)


我没有足够的声誉来评论,所以我会写一个答案

我不太明白您的代码打算做什么,但例外是因为sess.run()返回
Tensor
s,而
arr
TensorArray
。您可以这样做,例如:

sents = sess.run(arr.concat(), feed_dict={sen_len: [2, 1, 3]})
当然,这只是撤销了你的分裂。如果您想获得所有值,可能:

sents = sess.run([arr.read(i) for i in range(512)], feed_dict={sen_len: [2, 1, 3]})
但我相信一定有比硬编码更干净的方法。想必你的while_循环是为了做些什么