【发布时间】:2017-11-01 15:07:55
【问题描述】:
我使用的是 Ubuntu 16.04。我有:Python 2.7.12、Python 3.5.2、tensorflow 1.2.0-rc1、protobuf 3.3.0。
我想关注这个tutorial。
但我认为这个 test.py 可以更简洁地证明我的问题:
import tensorflow as tf
regressor = tf.contrib.learn.LinearRegressor(feature_columns=[])
我无法实例化回归器。我得到(最后的完整追溯):
google.protobuf.text_format.ParseError: 48:12 : 消息类型“tensorflow.AttrValue”没有名为“5”的字段。
本教程的 [21] 也是如此。 python2和python3也是如此。如果我使用 LinearClassifier 而不是 LinearRegressor,也是如此。
知道我做错了什么吗?
Traceback(最近一次调用最后一次):
文件“test.py”,第 2 行,在 regressor = tf.contrib.learn.LinearRegressor(feature_columns=[])
文件 "/usr/local/lib/python2.7/dist-packages/tensorflow/python/util/lazy_loader.py", 第 53 行,在 getattr 中 模块 = self._load()
文件 "/usr/local/lib/python2.7/dist-packages/tensorflow/python/util/lazy_loader.py", 第 42 行,在 _load 模块 = importlib.import_module(self.name)
文件“/usr/lib/python2.7/importlib/init.py”,第 37 行,在 导入模块 进口(名称)
文件 "/usr/local/lib/python2.7/dist-packages/tensorflow/contrib/init.py", 第 35 行,在 从 tensorflow.contrib 导入图片
文件 "/usr/local/lib/python2.7/dist-packages/tensorflow/contrib/image/init.py", 第 40 行,在 来自 tensorflow.contrib.image.python.ops.single_image_random_dot_stereograms 导入 single_image_random_dot_stereograms
文件 “/usr/local/lib/python2.7/dist-packages/tensorflow/contrib/image/python/ops/single_image_random_dot_stereograms.py”, 第 26 行,在 "_single_image_random_dot_stereograms.so"))
文件 "/usr/local/lib/python2.7/dist-packages/tensorflow/contrib/util/loader.py", 第 55 行,在 load_op_library 中 ret = load_library.load_op_library(路径)
文件 “/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/load_library.py”, 第 84 行,在 load_op_library 中 exec(包装器,模块。dict)
文件“”,第 248 行,在
文件“”,第 114 行,在 _InitOpDefLibrary 中
文件 "/usr/local/lib/python2.7/dist-packages/google/protobuf/text_format.py", 第 481 行,在合并中 描述符池=描述符池)
文件 "/usr/local/lib/python2.7/dist-packages/google/protobuf/text_format.py", 第 535 行,在 MergeLines 返回 parser.MergeLines(lines, message)
文件 "/usr/local/lib/python2.7/dist-packages/google/protobuf/text_format.py", 第 568 行,在 MergeLines 中 self._ParseOrMerge(lines, message)
文件 "/usr/local/lib/python2.7/dist-packages/google/protobuf/text_format.py", 第 583 行,在 _ParseOrMerge self._MergeField(tokenizer, message)
文件 "/usr/local/lib/python2.7/dist-packages/google/protobuf/text_format.py", 第 684 行,在 _MergeField 中 合并(分词器、消息、字段)
文件 "/usr/local/lib/python2.7/dist-packages/google/protobuf/text_format.py", 第 773 行,在 _MergeMessageField self._MergeField(tokenizer, sub_message)
文件 "/usr/local/lib/python2.7/dist-packages/google/protobuf/text_format.py", 第 684 行,在 _MergeField 中 合并(分词器、消息、字段)
文件 "/usr/local/lib/python2.7/dist-packages/google/protobuf/text_format.py", 第 773 行,在 _MergeMessageField self._MergeField(tokenizer, sub_message)
文件 "/usr/local/lib/python2.7/dist-packages/google/protobuf/text_format.py", 第 684 行,在 _MergeField 中 合并(分词器、消息、字段)
文件 "/usr/local/lib/python2.7/dist-packages/google/protobuf/text_format.py", 第 773 行,在 _MergeMessageField self._MergeField(tokenizer, sub_message)
文件 "/usr/local/lib/python2.7/dist-packages/google/protobuf/text_format.py", 第 652 行,在 _MergeField 中 (message_descriptor.full_name, name))
【问题讨论】:
-
我不认为你做错了什么。我可以使用来自 GitHub 的全新 Tensorflow r1.2 在 Ubuntu 17.04 和 Python 3.5.3 上构建来确认这个错误
-
在 Tensorflow r1.1
regressor = tf.contrib.learn.LinearRegressor(feature_columns=[])上断言,因为feature_columns可能不是空的,但是 protobuf 没有错误,所以它必须从 r1.1 更改为 r1.2导致这个。 -
感谢 Maximilian 确认错误。我补充说,它似乎正在使用来自包tensorflow.org/versions/r1.2/install/… 的自定义二进制protobuf pip 与python3 一起使用。 (事实上,在我的简单示例中给出 AssertionError 是您所说的正常行为。)
-
我已经更新了我的解决方案,以包含 cwhipkey 在 GitHub 上建议的解决方法。在我的情况下,更新的二进制 protobuf 包没有帮助。
标签: python tensorflow