Pycharm下keras正常显示进度条
原文地址:http://home.ustc.edu.cn/~yqli1995/2019/11/04/keras-progressbar/
简单方便的解决办法,不需要修改库代码
在Pycharm下运行keras的模型,verbose的时候会出现不停换行的现象,简单的在代码前import ipykernel就可以解决问题。
import ipykernel
通过pip可以在环境中安装ipykernel
pip install ipykernel
使用后就不会一个batchsize换一次行了
原因
keras的进度条在Pycharm中显示异常,许多人改动了generic_utils中Progbar类的update方法
# if self._dynamic_display:
# sys.stdout.write('\b' * prev_total_width)
# sys.stdout.write('\r')
# else:
# sys.stdout.write('\n')
sys.stdout.write('\r')
sys.stdout.flush()
这样虽然能解决问题,但是修改库代码总是不太好。
这里我们不希望换行,但是却换行了,说明此处self._dynamic_display为False。
回到其声明的地方查看
self._dynamic_display = ((hasattr(sys.stdout, 'isatty') and
sys.stdout.isatty()) or
'ipykernel' in sys.modules)
_dynamic_display为True有两种条件
-
hasattr(sys.stdout, ‘isatty’) and sys.stdout.isatty()
-
‘ipykernel’ in sys.modules
第一种是检测当前输出是否在终端上,第二种是当前导入的包里有没有ipykernel
而pycharm中直接运行的脚本,sys.stdout.isatty()为False,故我们需要满足另一个条件,才能进入正确的分支。
于是只要在代码中import ipykernel就可以解决