【问题标题】:UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 38: invalid start byteUnicodeDecodeError:“utf-8”编解码器无法解码位置 38 中的字节 0xff:无效的起始字节
【发布时间】:2018-03-14 20:46:26
【问题描述】:

我正在从 Tensorflow 导入我的模型,并且只想使用以下代码优化训练后的模型:

input_graph_def = tf.GraphDef()
with tf.gfile.Open(output_frozen_graph_name, "r") as f:
    data = f.read()
    input_graph_def.ParseFromString(data)

output_graph_def = optimize_for_inference_lib.optimize_for_inference(
        input_graph_def,
        ["input"], 
        ["y_"],
        tf.float32.as_datatype_enum)

f = tf.gfile.FastGFile("optimized_shoaib-har_agm.pb", "w")
f.write(output_graph_def.SerializeToString())

它显示了这个错误:

Traceback(最近一次调用最后一次):文件“”,第 2 行,in data = f.read() 文件 "C:\Users\Chaine\AppData\Local\Programs\Python\Python35\lib\site-packages\tensorflow\python\lib\io\file_io.py", 第 125 行,已读 pywrap_tensorflow.ReadFromStream(self._read_buf, length, status)) 文件 "C:\Users\Chaine\AppData\Local\Programs\Python\Python35\lib\site-packages\tensorflow\python\lib\io\file_io.py", 第 93 行,在 _prepare_value 中 返回 compat.as_str_any(val) 文件“C:\Users\Chaine\AppData\Local\Programs\Python\Python35\lib\site-packages\tensorflow\python\util\compat.py”, 第 106 行,在 as_str_any 中 返回 as_str(value) 文件 "C:\Users\Chaine\AppData\Local\Programs\Python\Python35\lib\site-packages\tensorflow\python\util\compat.py", 第 84 行,在 as_text 中 return bytes_or_text.decode(encoding) UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 38: invalid start byte

在它工作正常之前。我什至已经将它导入 Android Studio。现在突然间我得到了这个例外。是因为我在我的机器上安装了一些东西吗?

我能够在我的智能手机上安装该应用程序而没有任何错误。现在它给了我错误。我使用的是完全相同的代码。

【问题讨论】:

  • Android Studio 认为文件中的内容是什么?
  • 我能够在我的智能手机上安装它而没有任何错误。现在它给了我错误。我使用的是完全相同的代码。
  • 我上周使用了这段代码,没有任何错误。现在我尝试再次运行它,它给了我错误。

标签: python exception tensorflow utf-8


【解决方案1】:

Python 正在尝试解码文件“output_frozen_graph_name”中的所有字符。如果之前对您有用,不确定文件中发生了什么变化,但显然有些字符与“UTF-8”不兼容。现在,它们可以是“UTF-16”或其他一些编解码器格式。一种了解的方法是以字节格式读取内容并自己解码。尝试阅读以下内容以检查内容:

input_graph_def = tf.GraphDef()
with tf.gfile.Open(output_frozen_graph_name, "rb") as f:
    data = f.read()
    input_graph_def.ParseFromString(data)

output_graph_def = optimize_for_inference_lib.optimize_for_inference(
        input_graph_def,
        ["input"], 
        ["y_"],
        tf.float32.as_datatype_enum)

f = tf.gfile.FastGFile("optimized_shoaib-har_agm.pb", "w")
f.write(output_graph_def.SerializeToString())

【讨论】:

  • “知道的一种方法是读取字节格式的内容并自己解码” - 我该怎么做?
  • 抱歉,请问您提供的这行代码如何使用?
  • 是否也有可能是我在我的机器上安装了一些可能导致此错误的东西?
  • 您是否尝试更改代码以“rb”模式打开文件?
  • @Chaine 当您以二进制模式打开文件时,Python 不再尝试将字节转换为字符串。因此,您无法获得 UnicodeDecodeError。
猜你喜欢
  • 2021-12-01
  • 2016-05-13
  • 1970-01-01
  • 2017-07-09
  • 1970-01-01
  • 2019-05-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多