ジョー・ヒタギの止リ木 | 「ものづくり」や「ものなおし」をするブログ

色々なものを作ったり直したりするブログです。主な話題は日用品・電子機器・エアガンなど。

ジョー・ヒタギ の 止リ木

Anaconda+Kerasでのエラーと回避策

f:id:Jo-Bitaki:20200222142904p:plain:w400

昨今、AIや機械学習がブームになっていますよね。
私も流行に乗り遅れまいと、以下のサイトのソースコードでディープラーニングを試してみました。環境はPythonのAnaconda+Kerasです。
 KerasでIMDB映画レビューDatasetのネガポジ分類 - Qiita

ところが、いくつかエラーが発生してしまいました。
この記事では、私が遭遇したエラー内容と対処法をご紹介します。

エラー内容

学習完了後にhistory objectの中身を確認しようとしたところ、以下のエラーが発生しました。

OMP: Error #15: Initializing libiomp5.dylib, but found libiomp5.dylib already initialized.

環境

  • macOS 10.14.6
  • pyenvにAnaconda3をインストール
  • pipでTensorflowとKerasをインストール

対策

pipでのアンインストール

以下のサイトによると、Anaconda環境下ではpipでパッケージをインストールするのは危険らしいです。
 condaとpip:混ぜるな危険 - onoz000’s blog

そのため、とりあえずpip uninstallコマンドでTensorflowとKerasをアンインストールしました。

mklのアンインストールとnomklのインストール

上記の操作後、conda installでTensorflowとKerasをインストールし直しましたがエラーは治らず。。

そこで、以下のサイトを参考にconda uninstallでmklをアンインストール後、nomklをインストールしました。
 Anacondaを使用してMacでDeepLabのデモを実行|よごくすギャラクシー|note

今回のエラーに関係するのかはわかりませんが、mklにはバグが有り、sklearnではメモリーリークを引き起こすとのこと。  sklearn.manifold.tsneのメモリリークを回避するために(Anacondaのみ) - 強弱と高低

mklをアンインストールしたことでTensorflow、Keras、Matplotlib、pandasもアンインストールされているので、これらのパッケージをconda installで再インストール。

numpyにモンキーパッチをあてる

今度はkeras.datasets.imdb.load_data()の実行時に以下のエラーが発生しました。

ValueError: Object arrays cannot be loaded when allow_pickle=False.

keras.datasets.reutersを実行したときも同様のエラーが発生しました。

これはnumpyの仕様変更に起因する問題らしく、以下のサイトにあるモンキーパッチ*1を使うことで解決しました。
 Python: Keras で imdb データセットを読もうとするとエラーになる問題と回避策について - CUBE SUGAR CONTAINER

結果と謝辞

以上の変更で目的のコードを無事に実行することができました。

今回のエラーは思いのほか複雑なものだったので、私の独力ではとても解決できなかったと思います。
有益な情報を発信して下さる方々にこの場を借りてお礼を申し上げます。

関連記事

【Atom Hydrogen】コマンドメモ

*1:バグを修正する手段の一つ。ライブラリのコードを書き換えるのではなく、実行時の挙動を動的に変更することで不具合を修正する。