【问题标题】:Get iterable Tensor without running eval在不运行 eval 的情况下获取可迭代的张量
【发布时间】:2016-06-30 15:29:26
【问题描述】:

有没有办法在不运行 eval() 的情况下使张量可迭代以获取其 numpy 数组?

在对张量使用split() 之后,我试图遍历张量的两个部分,但它发生在我的神经网络隐藏层的构造中,因此它需要在我能够开始会话之前发生.

import tensorflow as tf
x = tf.placeholder('float', [None, nbits])
layer = [x]
for i in range(1,numbits):
    layer.append(tf.add(tf.matmul(weights[i-1], layer[i-1]), biases[i-1]))
    aes, bes = tf.split(1, 2, layer[-1])
        if i%2 == 1:
            for am, a, b in zip(add_layer, aes, bes):
                layer.append(am.ex(a, b))

问题是此时layer[-1]tf.placeholder,所以aesbes 都是张量,我不能用zip() 遍历它们。

任何想法都将不胜感激。

【问题讨论】:

  • @彼得霍金斯,谢谢。我担心没有比深入研究 Tensorflow 内置函数更简单的方法了。我最终做的是使用tf.slice() 将每个拆分成单独的元素,这比我预期的要痛苦。

标签: python numpy tensorflow


【解决方案1】:

不,没有;不是直接的。

最容易将 TensorFlow 程序分为两个阶段:构建计算图的 Python 构建阶段和运行计算图的执行阶段。在构建阶段没有实际运行;所有计算都发生在执行阶段。构建阶段不能依赖于执行阶段的结果,除非通过运行图(session.run().eval() 等)

在构建图形时不能迭代张量,因为在调用 session.run() 之前,它实际上不会被评估为一组特定的值。相反,它只是对计算图中节点的引用。

通常,您必须使用 Tensorflow 函数来操作张量,而不是 Python 原语(如 zip)。我喜欢想到的一种方式是,它几乎就像张量是密封盒子中的放射性物体,您只能使用可以执行特定操作集的机器人间接处理它(Tensorflow 库函数):-)因此,您可能需要找到一种方法来使用 Tensorflow 原语来表达您的任务。

如果您给出了一个完整的示例来说明您正在尝试做什么,那么可能会说得更多(从您的代码片段中我不清楚)。一种可能是使用 tf.split 将张量拆分为 Python 子张量列表,然后在列表上使用 zip 之类的东西。

希望对你有帮助!

【讨论】:

    猜你喜欢
    • 2018-09-10
    • 2010-12-22
    • 1970-01-01
    • 1970-01-01
    • 2021-11-12
    • 1970-01-01
    • 1970-01-01
    • 2015-09-25
    • 1970-01-01
    相关资源
    最近更新 更多