gpt4 book ai didi

python - Windows 上的 Tensorflow contrib.layers 兼容性

转载 作者:行者123 更新时间:2023-11-30 22:39:43 24 4
gpt4 key购买 nike

我目前正在尝试了解有关tensorflow的层API的更多信息,为此我正在尝试cloud-ml示例(人口普查:https://github.com/GoogleCloudPlatform/cloudml-samples/tree/master/census)。

当我在 Windows 计算机(Windows-10,以本地而非分布式 CPU 模式运行)上启动脚本时,出现以下错误:

   File "\*\Anaconda3\lib\site-packages\tensorflow\contrib\layers\python\layers\feature_column.py", line 1652, in insert_transformed_feature name="bucketize")
File "\*\Anaconda3\lib\site-packages\tensorflow\contrib\layers\python\ops\bucketization_op.py", line 48, in bucketize
return _bucketization_op.bucketize(input_tensor, boundaries, name=name)
AttributeError: 'NoneType' object has no attribute 'bucketize'

在tensorflow的代码中(我使用的是1.0.0版本,升级到1.0.1也出现同样的错误),我在文件tensorflow\contrib\layers\python\ops\bucketization_op.py中看到 该操作是从 native 代码加载的:

_bucketization_op = loader.load_op_library(
resource_loader.get_path_to_datafile("_bucketization_op.so"))

此时我实际上有两个问题:

  1. 我是否错误地认为这仅在 Linux 上有效,或者 .dll 可能已重命名为 .so 以保持一致的 Python 代码?如果有这样的重命名,有人可以告诉我在哪里可以找到这个文件,因为快速搜索文件夹没有给出 *.dll*.so 的结果(我假设每个 native 代码都由 SWIG 包装在 _pywrap_tensorflow.pyd 内)?
  2. 有人知道为什么会发生这种错误吗?

最佳答案

TL;DR:这些操作现在应该可以在当前的 TensorFlow 夜间版本中运行。我已经发出了pull request在即将发布的 1.1 版本中添加支持。

解释有点曲折,但我会尝试列出要点。

一般来说,tf.contrib 库对 Windows 的支持有限,通常是因为它们依赖于在 Windows 上不起作用(或历史上不起作用)的特定于平台的代码。直到最近tf.load_op_library() API 无法在 Windows 上运行,但最近有一个拉取请求 added support for it 。 Windows 上 TensorFlow 的夜间构建现在包含一些扩展库的 .dll 文件,并且 loader 库包含 converts the .so extension to .dll on Windows 的代码.

作为此问题的历史解决方法,我们将每个 tf.contrib 内核静态链接_pywrap_tensorflow.pyd 中,并制作 loader.load_op_library() fail silently如果 Windows 上不存在该扩展。但是,有两种方法可以获取每个操作生成的 Python 包装函数:

  • 更常见的方式,(例如)tf.contrib.tensor_forest uses是在构建时生成Python源并将生成的代码包含在PIP包中。这在 Windows 上运行良好。

  • 不太常见的方式,bucketization_op.py uses是在运行时生成Python源,并从loader.load_op_library()返回生成的Python模块。由于我们在 Windows 上静默失败并返回 None,因此调用 _bucketization_op.bucketize() 不起作用。

最后,出于操作方面的考虑,我们确定在所有平台上的 tf.contrib 内核的静态和动态链接之间切换是有用的,最简单的方法是是静态生成包装器代码。一个recent change (可惜它错过了 1.1 版本的分支)使得包装器代码的生成在所有 tf​​.contrib 库中保持一致。

我希望这是有道理的。由于所有这些更改,如果您升级到 TensorFlow 的夜间版本,问题应该会得到解决,并且希望我们也可以将更改合并到 1.1 版本中!

关于python - Windows 上的 Tensorflow contrib.layers 兼容性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43064542/

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