GPUでKerasを使おうとするとエラーが出る
今回はタイトル通りの記事です。
学習済み畳み込みニューラルネットワークを使用して画像判別を行おうとし、VGG16をインポートしました。そして、インスタンス化するところまでは問題なかったのですが、VGG16を用いて特徴量の抽出を行おうとしたところcuDNNの初期化に失敗したというエラーが出てしまいました。
前回設定し、MNISTやほかの画像を用いて学習を行ったときには問題がなかったのですがなぜ今回出てしまったのか…
まずエラーメッセージで検索してみたところ、TensorFlow, Python, cuDnn, CUDAのバージョンが一致していないのではというのが一番最初に出てきました。
しかし確認してみると特に問題なし。考えてみれば前回までは普通に学習できていたので当たり前です。
ということでコードを実行しながらタスクマネージャーでGPUの使用率を確認してみると、VGG16をインスタンス化したとたんに一気にGPUの使用率がマックスになっていることが判明。
どうやらGPU版TensorFlowはデフォルトで使用するとGPUの全メモリを確保してしまうようです(allow_growth)。そのため新たに学習する分のメモリがなくなってしまっていたようです。
とはいえこれでは困るので解決方法を調べているといい感じのブログを発見しました。
https://qiita.com/studio_haneya/items/4dfaf2fb2ac44818e7e0
最初にここに書いてあるコードを入力することで無事学習可能な状況になりました!
TensorFlowはめちゃくちゃ便利なんですけどところどころよくわからないエラーを吐くので困りますね…
しかしそのエラーを解決するたびに理解が深まっているように感じるのでまあ許すとしましょう。