【问题标题】:Left shift values in a TensorArray in Tensorflow v1.15Tensorflow v1.15 中 TensorArray 中的左移值
【发布时间】:2020-02-18 04:35:39
【问题描述】:

我正在尝试使用另一个 TensorArrayTensorArray 中的值左移,使用以下代码:

import tensorflow as tf

an_array = tf.TensorArray(dtype=tf.float32, size=2, dynamic_size=False, clear_after_read=False, element_shape=(1, 2), name="First")
old_array = tf.TensorArray(dtype=tf.float32, size=2, dynamic_size=False, clear_after_read=False, element_shape=(1, 2), name="Second")
old_array = old_array.write(0, 2.*tf.ones((1, 2)))
old_array = old_array.write(1, 3.*tf.ones((1, 2)))
for _ in range(1, 5):
    val = tf.random.normal(shape=(1, 2))
    an_array = an_array.write(0, old_array.read(1))
    an_array = an_array.write(1, val)
    old_array = an_array.identity()
print(tf.Session().run([an_array.stack(), old_array.stack()]))

我用一些初始值加载old_array。在循环中,我读取了old_array 数组的第二个元素,并将其提供给an_array 数组的第一个元素。然后将新值写入an_array 数组的第二个元素。 an_array 的内容被复制到old_array

虽然在第一次迭代中,an_array 中的第一个元素严格来说不是数组的左移版本,而是基于初始条件的一些东西,但以后的迭代预计会给出an_array 的左移版本数组。

当我运行这个脚本时,我得到了错误

tensorflow.python.framework.errors_impl.InvalidArgumentError: TensorArray First_1: 无法写入 TensorArray 索引 0,因为它已被写入。

有人能指出代码有什么问题吗?谢谢。

【问题讨论】:

  • 您的代码在我的机器上运行。你的 tensorflow 版本是什么?
  • @Kalpit tfv1.15
  • @Kalpit 你用的是什么版本的 tf?
  • 我在 tf v1.14

标签: python arrays python-3.x tensorflow


【解决方案1】:

我在运行tensorflow version 1.15.2 中的代码时遇到了同样的错误。但它在tensorflow version 2.2.0 中运行良好。好像tensorflow version 1.15.2 问题。

以下是tensorflow 2.2.0版本的运行结果。

张量流 2.2.0 -

#%tensorflow_version 2.x
import tensorflow as tf
tf.compat.v1.disable_eager_execution()
print(tf.__version__)

an_array = tf.TensorArray(dtype=tf.float32, size=2, dynamic_size=False, clear_after_read=False, element_shape=(1, 2), name="First")
old_array = tf.TensorArray(dtype=tf.float32, size=2, dynamic_size=False, clear_after_read=False, element_shape=(1, 2), name="Second")
old_array = old_array.write(0, 2.*tf.ones((1, 2)))
old_array = old_array.write(1, 3.*tf.ones((1, 2)))
for _ in range(1, 5):
    val = tf.random.normal(shape=(1, 2))
    an_array = an_array.write(0, old_array.read(1))
    an_array = an_array.write(1, val)
    old_array = an_array.identity()

print(tf.compat.v1.Session().run([an_array.stack(), old_array.stack()]))

输出 -

2.2.0
[array([[[ 0.6800341 , -0.72848713]],

       [[ 0.6648014 , -0.40344566]]], dtype=float32), array([[[ 0.6800341 , -0.72848713]],

       [[ 0.6648014 , -0.40344566]]], dtype=float32)]

希望这能回答您的问题。快乐学习。

【讨论】:

    猜你喜欢
    • 2017-05-07
    • 1970-01-01
    • 2017-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多