是否有等同于 np.empty 的张量流?

新手上路,请多包涵

Numpy 有这个辅助函数 np.empty ,它将:

返回给定形状和类型的新数组,而不初始化条目。

当我想使用 tf.concat 创建张量时,我发现它非常有用,因为:

输入张量的维数必须匹配,除轴外的所有维数必须相等。

因此,从预期形状的空张量开始会派上用场。有什么办法可以在张量流中实现这一目标吗?

[编辑]

为什么我想要这个的简化示例

    netInput = np.empty([0, 4])
    netTarget = np.empty([0, 4])
    inputWidth = 2

    for step in range(data.shape.as_list()[-2]-frames_width-1):
        netInput = tf.concat([netInput, data[0, step:step + frames_width, :]], -2)
        target = tf.concat([target, data[0, step + frames_width + 1:step + frames_width + 2, :]], -2)

在这个例子中,如果 netInput 或 netTarget 被初始化,我将把一个额外的例子与那个初始化连接起来。为了用第一个值初始化它们,我需要破解循环。没什么市长,我只是想知道是否有“tensorflow”方法来解决这个问题。

原文由 Andrés Marafioti 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 419
2 个回答

您可以做的最接近的事情是创建一个您不初始化的变量。如果您使用 tf.global_variables_initializer() 初始化您的变量,请通过设置 collections=[] 禁止在初始化期间将您的变量放入全局变量列表中。

例如,

 import numpy as np
import tensorflow as tf

x = tf.Variable(np.empty((2, 3), dtype=np.float32), collections=[])
y = tf.Variable(np.empty((2, 3), dtype=np.float32))

sess = tf.InteractiveSession()
tf.global_variables_initializer().run()

# y has been initialized with the content of "np.empty"
y.eval()
# x is not initialized, you have to do it yourself later
x.eval()

这里 np.empty 提供给 x 只是为了指定它的形状和类型,而不是为了初始化。

现在对于诸如 tf.concat 类的操作,您实际上没有(实际上不能)自己管理内存——您不能预先分配输出,因为某些 numpy 函数允许您这样做。 Tensorflow 已经管理内存并执行一些智能技巧,例如在检测到可以这样做时为输出重用内存块。

原文由 P-Gn 发布,翻译遵循 CC BY-SA 4.0 许可协议

在 TF 2 中,

 tensor = tf.reshape(tf.convert_to_tensor(()), (0, n))

为我工作。

原文由 Sibbs Gambling 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题