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
※内部的には IPython.display
を更新してるので、それを使えば更新表示はできるのかもしれない・・・
注意点
現在わかってる問題として、損失グラフが extensions.PlotReport
と違う結果を返すということが挙げられる。
ブログを書いてるときに分かったので、あとで直してみる。
[追記] 修正しました。