洋書、時々プログラミング

博士課程修了→メーカーという経路を辿っている人の日常

2020/02/03

試してみたこと

Googleアンケートの残高が溜まったのでFocus todoのPro版を購入。25分5分をエンドレスで流すことで「休憩ボタン押さないで休憩しよう」をしないようにした。

英語勉強

  • FRIENDS 1-1を見る わからない所がまだ残っているので重点的に見る。
  • 洋書多読は今からちょっとやる。Hollywood読むよ!

筋トレ

  • リングフィットアドベンチャーを2ステージほど。フッキンリーまで撃破 10日達成!

その他

会社でやったことは小出しにするべきだった。。。

Python3のDecoratorに関するメモ

要点

  • Decoratorは関数をラップすることで前処理と後処理を追加できる
  • 例えばあるfunctionの時間測定ならそこまで前処理と後処理は変わらないのだから、Decoratorを使うことで書くコード量を減らせる。
  • 同じようなAssertionを導入したい時とかにも使えるかも?

コードサンプル

import time


def time_calc(func):
def timer(*args):
start = time.time()
output = func(*args)
end = time.time()
print(f'calculate time is {end-start} sec')
return output
return timer


@time_calc
def test(n: int) -> int:
output = 0
while n > 1:
n = n-1
output += 1
return output


if __name__ == '__main__':
print(test(10000000))

何が起きているか

  1. time_calc関数にtest()がinputされることによって、時間測定関数であるtimerの関数が新たに呼び出されるようになる
  2. @でくくっているtest関数を呼び出す際はtest関数本体ではなくて、timer関数が呼び出され、その中に存在するtest関数が実行される。

言葉だと微妙に分かりづらいので図にしておく

f:id:aguux:20210201211006p:plain
Decoratorの挙動

使える場所

  • 時間測定などの、関数の性能測定には使える。
  • Assertionと組み合わせることで、functionへのinputのチェック(壊れていないか)などにも使えるか?
  • 今後実施例についてはまた別途紹介したい

PyTorchでdevice-side assert triggered が出た時の話

個人的に青ざめながらも勉強にはなったのでメモ

まとめと教訓

  • もらったデータの中の特定のデータに不備があったため、訓練中にエラーが出る(device-side assert triggered)
  • DataLoader中のShuffleをFalseにして、問題となっているデータの推定を行う事で解決
  • CUDAを使用しないことで問題の抽出が分かりやすくなるらしい(参考URL)
  • 最後はデータを直接見ることが大事(体育会系)

    起きた問題

  • 計算モデルと訓練データを変更して訓練を行おうとした。
  • もらったデータを解析にかけようとしたらトレーニング中に突然エラーを吐く
  • CUDAを使っているけど CUDA Assert trigger errorとしか言わず詳細が不明。


原因の切り分け方法

計算モデル起因? ->違う

  • 元の計算モデルに戻しても同様のエラーが出る

訓練データの不備か? ->それっぽい

問題のあるデータの特定

  • Trainingについて、DataLoaderのShuffle変数をFalseにすることでざっくりと問題のあるファイル名を特定し、実際に確認
  • 半分ほどのデータが取得できておらず、Tensorにした時にnanとなってしまっていた。
  • このデータを取り除いたら無事に訓練が回った

    対策

  • nanデータが入っていた場合の処理(全てゼロにするなど)の導入
  • Assertを使用することで例外処理の文章を出していくのもアリ
  • CUDAを使用しないことで問題の抽出が分かりやすくなるらしい(参考URL)