Python 如何在Tensorflow中使用tf.while_循环访问TensorArray元素?
我有一个关于使用Tensorary的问题 问题: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
我想使用
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_循环是为了做些什么