【问题标题】:Tensorflow Printing Weird Symbols: as []Tensorflow 打印奇怪的符号:as []
【发布时间】:2019-12-12 17:27:44
【问题描述】:

每当我在 Python 的 IDLE 中使用 verbose=1 运行 Tensorflow 模型时,我都会在每个时期得到一条奇怪的矩形线(如下例所示)。我最近换了电脑,这在我以前的笔记本电脑上没有发生,但在这台笔记本电脑上总是发生。这很烦人,因为您可能知道,打印更多字符会大大减慢 IDLE...
任何想法如何解决?
重要提示:我将 [ 和 ] 放在一起代表矩形,因为当我在这里打印文本时,它实际上显示正确,即使没有代码格式。

提前感谢您的帮助!

信息:
笔记本电脑:宏碁 Aspire 5
操作系统:Windows 10 - 64 位
Python 的标准 IDLE
Python:3.7
TensorFlow API:2.0

示例:

 16/182 [=>............................] - ETA: 35s - loss: 0.5583 - Accuracy: 0.0000e+00 - MeanSquaredError: 0.1716
 18/182 [=>............................] - ETA: 36s - loss: 0.5170 - Accuracy: 0.0000e+00 - MeanSquaredError: 0.1561
 20/182 [==>...........................] - ETA: 36s - loss: 0.5008 - Accuracy: 0.0000e+00 - MeanSquaredError: 0.1496

显示如下:

22/182 [==>.......................] - 预计到达时间:35 秒 - 损失:0.4803 - 准确度:0.0000 e+00 - 均方误差:0.1414[][][][][][][][][][][][][][][][][][][][][][ ][][][][][][][][][][][][][][][][][] 24/182 [==>.......................] - 预计到达时间:35 秒 - 损失:0.4891 - 准确度:0.0000e+00 - 均方误差:0.1483

【问题讨论】:

  • 默认情况下,Windows 命令提示符在 CP850 中显示字符,这是非常有限且完全不兼容的字符集。您可以在执行程序之前通过运行命令chcp 65001 将其更改为UTF-8,然后它可能会正确显示。
  • 我在 Python 的 IDLE 上,这个程序在图像上(但在 Windows 10 而不是 Linux 上):storage.googleapis.com/ubuntu-18/images/…

标签: python tensorflow printing python-idle


【解决方案1】:

问题在于 tensorflow 将其正在进行的输出格式化为要打印()的文本,但它不支持 IDLE,并且打印()文本非常不适合 IDLE 的 shell。 (它显然知道它没有打印到标准终端。)更糟糕的是,运行时间比您所做的要长,是在 IDLE 的输出中省略了换行符(与终端输出不同)。这完全是错误的。超过 10000 个字符的单行最终会冻结底层 tk 图形框架。

this screenshopbpo issue 37762 判断,矩形可能是inverse bullets,要么由Tenserflow 输出,要么被tk Text 小部件用作“替换”字符。如果您可以将矩形的副本粘贴到以下行并运行它,这可能会有所帮助。

for c in '[]...[]': print(hex(ord(c)))

在我看来,诸如 tensorflow/keras 之类的可导入模块应该有 API 以未格式化、未字符串化的 Python 对象的形式返回结果,以便导入代码能够以用户认为最好的方式显示结果。或者他们至少应该提供返回(而不是打印)文本字符串,最好是易于解析的逗号分隔值,用户可以根据需要进行处理。

如果您找不到更改从 tensorflow 获得的内容的选项,那么您应该在命令提示符下运行,至少对于超过 50 行的运行。

【讨论】:

  • 感谢您的回答!运行for c in '[]...[]': print(hex(ord(c))) 导致打印多个“0x8”(每行一个),我看到的字符更像 [] figure 但如果我选择它们它们会变长(例如:单击并拖动鼠标他们)。我得到的想法是 [] = unknown character 用于 IDLE,因为将它们打印在上面的 script 区域固定文本...
  • '0x08' 是退格,我怀疑。感谢您的验证。 bugs.python.org/file48536/Python374-4.PNG 表明 tensorflow 在输出到命令提示符时会使用换行符打印正确的行。我不知道为什么它在输出到 IDLE 时会打印 39 个退格键。这对我来说毫无意义。
猜你喜欢
  • 2020-05-25
  • 1970-01-01
  • 2019-12-23
  • 2017-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-22
相关资源
最近更新 更多