CNNを構築したときに感じたことのメモ:

転移学習とCVについて:
転移学習でCVを行い、多数決判定を行うことを考える。この際、ここのモデルで同じ乱数シードを採用したとき、ほとんど同じ学習結果となり、多数決の旨味が出ない。そのため、乱数シードを変えた方が良い(のかもしれない)。

メモリ監視:
tensorflow+keras系の関数を使う場合、メモリを監視した方が良い。「nvidia-smi」でGPUメモリの監視、「free -m」や「top」でRAMを監視できる。メモリでカーネルが落ちる場合は、wslに割り当てられるRAMを増やすことで対応できる。freeはmacにはない。ubuntuには初期搭載。

float64:
画像はfloat64で初期管理される。これだと落ちるので、.astype(“float16”)のようにすることで、RAMによるカーネル落ちを回避できる。

バッチサイズ:
バッチサイズを高めると学習が早くなる、が、GPUにデータが乗り切らずにカーネルが落ちる場合がある。このときは、バッチサイズを8のような小さい値にすると、回避できる場合がある。ただし学習時間が長くなる。

ガーベージ:
gc.collect()で不要なメモリを解放できるが、体感できるほどいい効果はない。

変数を解放:
del aなどのように書くと変数のメモリを解放できる。サイズがでかい変数は消すことを推奨する。ガーベージよりも効果はあるが、そんなにクリティカルではない。