首页 文章

使用Python实例化TensorFlow模型时的google.protobuf.text_format.ParseError

提问于
浏览
5

我在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=[])

我无法实例化回归量 . 我得到(最后完整的Traceback):

google.protobuf.text_format.ParseError:48:12:消息类型“tensorflow.AttrValue”没有名为“5”的字段 .

同样在本教程的[21]中 . python2和python3也是如此 . 如果我使用LinearClassifier而不是LinearRegressor,也是如此 .

关于我做错了什么的任何想法?

回溯(最近一次调用最后一次):文件“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 module = self._load()文件”/usr/local/lib/python2.7/dist-packages/tensorflow/python/util/lazy_loader . py“,第42行,在_load module = importlib.import_module(self.name)文件”/usr/lib/python2.7/importlib/init.py“,第37行,在import_module import(name)文件”/ 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 import 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(path)文件“/ usr / local / lib / python2.7 / dist-packages / tensorflow / python / framework / load_library.py“,第84行,在load_op_library exec(wrappers,module.dict)文件”“,第248行,在文件”“,第114行,在_InitOpDefLibrary文件中“/usr/local/lib/python2.7/dist-packages/google/protobuf/text_format.py”,第481行,在Merge descriptor_pool = descriptor_pool中)文件“/usr/local/lib/python2.7/dist-packages /google/protobuf/text_format.py“,第535行,在MergeLines中返回parser.MergeLines(行,消息)文件”/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,消息)文件“/usr/local/lib/python2.7/dist-packages/google/protobuf/text_format.py”,第684行,i n _MergeField合并(tokenizer,message,field)文件“/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))

3 回答

  • -1

    对我来说,运行 export LC_ALL=C 工作 .

    //埃里克

  • 3

    它解决了它的问题:

    import _locale
    _locale.setlocale(_locale.LC_NUMERIC, 'en_US.UTF-8')
    

    python3.6,freebsd11

  • 3

    解决方案

    更改数字区域设置以使用 period ( . )而不是逗号(,)作为小数分隔符 .

    解释

    在Google protobuf实现中,依赖于语言环境的函数用于将float转换为FloatToBuffer()中的字符串 .

    当自动提取插件库中的信息时,这就成了问题 .

    在你的情况下,它是序列

    eye_separation: float = 2.5
    

    位于 emphasized _single_image_random_dot_stereograms.so 的偏移量0xa3b4处

    在被送到使用 FloatToBuffer() 的解析器之后,这就出现了:

    attr {\n'
      name: "eye_separation"\n'
      type: "float"\n'
      default_value {\n'
        f: 2,5\n'
      }\n'
    }\n'
    

    然后令牌器(在 google/protobuf/text_format.py )被默认值中的 , 弄糊涂,并认为 5 是一个单独的字段 .

    错误报告现在在GitHub,所以很快就会得到修复 .

相关问题