gpt4 book ai didi

python - 在Tensorflow的C++ TensorShape API中,什么相当于Python的None?

转载 作者:搜寻专家 更新时间:2023-10-31 00:58:59 27 4
gpt4 key购买 nike

假设我有一个使用 Tensorflow 的 Python API 创建的张量,如下所示,

x = tf.placeholder("float", shape=[None, inputLen])

我想创建一个与 C++ 中的等效的 tensorflow::Tensor,这样我就可以运行一个以 x 作为输入的训练图。我应该如何处理输入形状的第一维,它在 C++ 中属于 tensorflow::TensorShape 类型?

如果我这样做:

tensorflow::TensorShape inputShape;
inputShape.AddDim(0);
inputShape.AddDim(inputLen);

好像不行,因为num_elements变成了0,这不是我期望的inputLen的值。

最佳答案

更新:现在有一个tensorflow::PartialTensorShape可以表示具有未知尺寸或未知等级的形状的类。值 -1 用于表示未知值(即 None 在 Python 中表示的值)。它用于 C++ 形状推理代码,可以在形状类型的属性或 tf.TensorShape proto 中指定。


TL;DR:C++ 中没有等效项,因为 TensorFlow 的 C++ 部分仅在运行时检查完全定义的形状;而 Python 部分在图形构建时检查形状,此时形状可能未完全定义。

没有 tf.Dimension(None) 的等价物(即未知维度)在 C++ 中 tensorflow::TensorShape类(class)。这是因为 (C++) tensorflow::TensorShape 类描述了 (C++) tensorflow::Tensor 的形状,它表示一个具体张量的值,因此必须具有完全定义的形状。 python tf.Tensor类表示一个符号张量——表示尚未运行的操作的输出——因此它可以具有一维或多维未知的形状。

如果您使用的是 C++ API要提供占位符,您应该简单地创建一个新的 tensorflow::Tensor为您提供给占位符的每个不同值(在 Session::Run() 调用中)使用完全定义的形状。但是请注意,C++ API 不会检查占位符的形状,因此您应该手动确保形状与占位符的预期形状匹配。

如果您正在使用 C++ API 构建图形,并且您想要定义一个在一个或多个维度上具有未知大小的占位符,您应该定义一个占位符节点及其 形状 属性设置为 tensorflow::TensorShape({})。尽管这等同于标量,但由于历史原因,这被视为完全不受约束的形状。

关于python - 在Tensorflow的C++ TensorShape API中,什么相当于Python的None?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34377797/

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