colaboratory用のプログレスバー

夏頃から話題に上がってる colaboratory を数週間いじってた。

Python には詳しく無いので、コピペしたり書き換えたりしながらいじってたけど。
colaboratory のイケてない点として、プログレスバーやログが延々と溜まっていく点が挙げられる。

原因を調査を調査してみると、どうやらエスケープシーケンスが無視されてるのが原因のようだ。

sys.stdout.write('\r') # work
sys.stdout.write('\033[J') # not work

キャリッジリターンは効くので、1行だけは消せる。 (※正確には、1行だけ上書きできる)
けど、ログやプログレスバーなど、複数行を消すのは、どうやら無理そうだった。

良い手立ては無いか探してたら、いいものを見つけた。

GitHub - fastai/fastprogress: Simple and flexible progress bar for Jupyter Notebook and console

使い方のサンプルが少ないのが玉に瑕だったけど、colab でも使えることを確認した。
これを chainer の extension として使えるように実装してみた。 (見よう見まね)

Progressbar & loss image & sample image extension for chainer · GitHub

f:id:minowith:20181208175619p:plain

※内部的には IPython.display を更新してるので、それを使えば更新表示はできるのかもしれない・・・

注意点

現在わかってる問題として、損失グラフが extensions.PlotReport と違う結果を返すということが挙げられる。
ブログを書いてるときに分かったので、あとで直してみる。

[追記] 修正しました。