gpt4 book ai didi

python - 在不运行 eval 的情况下获取可迭代的张量

转载 作者:太空宇宙 更新时间:2023-11-03 11:46:39 25 4
gpt4 key购买 nike

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

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

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 程序分为两个阶段:构建计算图的构建 Python 阶段和运行计算图的执行阶段。在构建阶段实际上没有任何运行;所有计算都发生在执行阶段。构建阶段不能依赖于执行阶段的结果,除非通过运行图形(session.run().eval() 等)

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

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

如果您给出了您正在尝试做的事情的完整示例,则可能会说得更多(我不清楚您的代码片段)。一种可能是使用 tf.split 将张量拆分为 Python 子张量列表,然后在列表上使用类似 zip 的方法。

希望对您有所帮助!

关于python - 在不运行 eval 的情况下获取可迭代的张量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38127529/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com