配列の形状(Shape)のコメントを付けるJupyter Notebook拡張を作った

加筆(2019/12/12)

注意 JupyterNotebook拡張は使いづらかったので,IPython拡張としてリニューアルしました. こちらを使ってください.

github.com

このページを読む代わりに,下の記事を読むことをお勧めします. (検索順位はこのページの方が高いので微妙な気持ちです・・・) shiba6v.hatenablog.com

続きを読む

NumPyやPyTorchで使える超便利ツールを作った

この記事は,CAMPHOR- Advent Calendar 2018の7日目の記事です.
この記事は,NumPyやPyTorchなどの開発に使える「shape_commentator」という便利ツールを使った話です.このツールはpipでインストールできるので,サクッと試してみたい方はGitHubのページに飛んで使ってみてください.

加筆修正(2019/12/12) IPython拡張を追加したことでIPythonやJupyterNotebookでの使い心地が良くなったので,IPythonの例の部分を中心に一部修正しました.

はじめに

こんにちは.シバニャンです.最近は卒論で画像系の研究をしています.

卒業研究ではNumPyやPyTorchを使ってコーディングしているんですが,今までUnityのコードをC#で書いてVisual Studioのコード補完のぬるま湯に浸かってきた僕とっては,型が明示的でないコードで計算を書いていくのが難しく思えました.

NumPyの辛さ

具体的にNumPyで一番難しく感じた部分は,ソースコードを見ただけではテンソルのShapeが分からないことです.

続きを読む

PyTorchのDataParallelのモデルを保存する

PyTorchで複数GPUで学習させる場合,

model = nn.DataParallel(model, device_ids=[0,1,2])

のようにDataParallelで保存しますが,このモデルを保存したい場合にcuda runtime error : out of memoryが出ることがあります.
その場合は,下のようにDataParallelから元のモデルを取り出してCPUのモデルに変えてあげることで保存できるようになります.

torch.save(model.module.cpu(),file_path)

読み込み時はこうすればOK

new_model = torch.load(file_path)

参考

Optional: Data Parallelism — PyTorch Tutorials 1.0.0.dev20181002 documentation

cProfileを使ってPythonでの計算時間を測定する

最近は,4回生になり研究室に配属されて画像処理の勉強をしています. 論文を読んでそれを実装してみるという流れで勉強していますが,REPLでnumpyの行列計算のコードを打っていると,目立って時間がかかる行があることが分かります. そこで,繰り返し呼ぶ処理や重い処理にかかる時間を,定量的に調べたいと思いました.

やりたいこと

  • スクリプト全体で,時間がかかっている箇所を調べたい
  • 遅い処理を見つけて高速化したい
  • できるだけ簡単にプロファイリングしたい
続きを読む