Python ディープラーニング(深層学習) 機械学習

【Python】Windows10にTensorflowとKerasがインストールできない時の解決法

この記事は約18分で読めます。

 

機械学習系ライブラリのインストールはハマりやすい

 

最近pythonの扱いにも慣れてきたので、本命であるpythonを使った機械学習・深層学習に挑戦しようと思い立ち、よく機械学習で名前の聞くtensorflowとその機能を使ったkerasをWindows10・Anaconda3.5環境の自分のPCにインストールしようと思い立ちました。

 

ですが、実際にインストールするところで自分史上一番ハマったのでその時のハマった内容と解決法を今後別のPCでもう一回環境を作ることもあると思うので、備忘録も兼ねてメモっておこうと思います。

 

まずディープラーニングをPCで行う場合、計算リソースがかなり必要なので機械学習用ライブラリのTensorflowをインストールする場合、CPU版かGPU版かを選択する必要があります、自分としては計算処理が速くなるGPU版をインストールしたかったのですが、NVIDIAのGPUはなかったので、とりあえずCPU版の方をインストール。

 

なんかわからんけど、ほかのパッケージと同じようにアナコンダプロンプトからroot環境(デフォルト)に$pip install tensorflowで、インストール。ここでは特にエラーもなくインストールできたのですが、ここからが地獄の始まりで、インストールしたtensorflowをjupyternotebook上でインポートして使おうとしたら、インポートエラー。

 

今までPIPのバージョンなどが原因でモジュールのインストールで詰まったことは何度かありましたが、インポートで詰まるのは初めてでした。またエラー内容もNo moduleとかではなく、怒涛の長文で数日間解消する気も起こりませんでしたが、機械学習しようとしているのにtensorflowが入れられないで頓挫とか始まる前に終了なので、さすがに頑張ろうと思い、エラー内容をGoogleで検索。

 

ちなみに僕の出たエラー内容は以下のような感じ。

 

ImportError                               Traceback (most recent call last)
~\Anaconda3\envs\tensorflow\lib\site-packages\tensorflow\python\pywrap_tensorflow_internal.py in swig_import_helper()
     13         try:
---> 14             return importlib.import_module(mname)
     15         except ImportError:

~\Anaconda3\envs\tensorflow\lib\importlib\__init__.py in import_module(name, package)
    125             level += 1
--> 126     return _bootstrap._gcd_import(name[level:], package, level)
    127 

~\Anaconda3\envs\tensorflow\lib\importlib\_bootstrap.py in _gcd_import(name, package, level)

~\Anaconda3\envs\tensorflow\lib\importlib\_bootstrap.py in _find_and_load(name, import_)

~\Anaconda3\envs\tensorflow\lib\importlib\_bootstrap.py in _find_and_load_unlocked(name, import_)

~\Anaconda3\envs\tensorflow\lib\importlib\_bootstrap.py in _load_unlocked(spec)

~\Anaconda3\envs\tensorflow\lib\importlib\_bootstrap.py in module_from_spec(spec)

~\Anaconda3\envs\tensorflow\lib\importlib\_bootstrap_external.py in create_module(self, spec)

~\Anaconda3\envs\tensorflow\lib\importlib\_bootstrap.py in _call_with_frames_removed(f, *args, **kwds)

ImportError: DLL load failed: ダイナミック リンク ライブラリ (DLL) 初期化ルーチンの実行に失敗しました。

During handling of the above exception, another exception occurred:

ModuleNotFoundError                       Traceback (most recent call last)
~\Anaconda3\envs\tensorflow\lib\site-packages\tensorflow\python\pywrap_tensorflow.py in <module>()
     57 
---> 58   from tensorflow.python.pywrap_tensorflow_internal import *
     59   from tensorflow.python.pywrap_tensorflow_internal import __version__

~\Anaconda3\envs\tensorflow\lib\site-packages\tensorflow\python\pywrap_tensorflow_internal.py in <module>()
     16             return importlib.import_module('_pywrap_tensorflow_internal')
---> 17     _pywrap_tensorflow_internal = swig_import_helper()
     18     del swig_import_helper

~\Anaconda3\envs\tensorflow\lib\site-packages\tensorflow\python\pywrap_tensorflow_internal.py in swig_import_helper()
     15         except ImportError:
---> 16             return importlib.import_module('_pywrap_tensorflow_internal')
     17     _pywrap_tensorflow_internal = swig_import_helper()

~\Anaconda3\envs\tensorflow\lib\importlib\__init__.py in import_module(name, package)
    125             level += 1
--> 126     return _bootstrap._gcd_import(name[level:], package, level)
    127 

ModuleNotFoundError: No module named '_pywrap_tensorflow_internal'

During handling of the above exception, another exception occurred:

ImportError                               Traceback (most recent call last)
<ipython-input-1-25b92e4d5dec> in <module>()
----> 1 import tensorflow as tf
      2 hello = tf.constant('Hello, TensorFlow!')
      3 sess = tf.Session()
      4 print(sess.run(hello))

~\Anaconda3\envs\tensorflow\lib\site-packages\tensorflow\__init__.py in <module>()
     22 
     23 # pylint: disable=g-bad-import-order
---> 24 from tensorflow.python import pywrap_tensorflow  # pylint: disable=unused-import
     25 # pylint: disable=wildcard-import
     26 from tensorflow.tools.api.generator.api import *  # pylint: disable=redefined-builtin

~\Anaconda3\envs\tensorflow\lib\site-packages\tensorflow\python\__init__.py in <module>()
     47 import numpy as np
     48 
---> 49 from tensorflow.python import pywrap_tensorflow
     50 
     51 # Protocol buffers

~\Anaconda3\envs\tensorflow\lib\site-packages\tensorflow\python\pywrap_tensorflow.py in <module>()
     72 for some common reasons and solutions.  Include the entire stack trace
     73 above this error message when asking for help.""" % traceback.format_exc()
---> 74   raise ImportError(msg)
     75 
     76 # pylint: enable=wildcard-import,g-import-not-at-top,unused-import,line-too-long

ImportError: Traceback (most recent call last):
  File "C:\Users\taku\Anaconda3\envs\tensorflow\lib\site-packages\tensorflow\python\pywrap_tensorflow_internal.py", line 14, in swig_import_helper
    return importlib.import_module(mname)
  File "C:\Users\taku\Anaconda3\envs\tensorflow\lib\importlib\__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 994, in _gcd_import
  File "<frozen importlib._bootstrap>", line 971, in _find_and_load
  File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 658, in _load_unlocked
  File "<frozen importlib._bootstrap>", line 571, in module_from_spec
  File "<frozen importlib._bootstrap_external>", line 922, in create_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
ImportError: DLL load failed: ダイナミック リンク ライブラリ (DLL) 初期化ルーチンの実行に失敗しました。

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Users\taku\Anaconda3\envs\tensorflow\lib\site-packages\tensorflow\python\pywrap_tensorflow.py", line 58, in <module>
    from tensorflow.python.pywrap_tensorflow_internal import *
  File "C:\Users\taku\Anaconda3\envs\tensorflow\lib\site-packages\tensorflow\python\pywrap_tensorflow_internal.py", line 17, in <module>
    _pywrap_tensorflow_internal = swig_import_helper()
  File "C:\Users\taku\Anaconda3\envs\tensorflow\lib\site-packages\tensorflow\python\pywrap_tensorflow_internal.py", line 16, in swig_import_helper
    return importlib.import_module('_pywrap_tensorflow_internal')
  File "C:\Users\taku\Anaconda3\envs\tensorflow\lib\importlib\__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
ModuleNotFoundError: No module named '_pywrap_tensorflow_internal'


Failed to load the native TensorFlow runtime.

See https://www.tensorflow.org/install/install_sources#common_installation_problems

for some common reasons and solutions.  Include the entire stack trace
above this error message when asking for help.

 

 

その結果、分かってきたのは、Tensorflowのインポートができない大まかな原因は「ダイナミック リンク ライブラリ (DLL) 初期化ルーチンの実行に失敗しました。」というところにある点。

 

まあそうはいってもdllってC++とかの領域なので、PCにわかにはさっぱり・・・。まあPATHが通ってないってことなんですけどなんでPATHが通ってないのかがわからない・・・。とりあえずエラー内容でググった結果以下の件が原因だったのでは?という結論に到達。

 

 

現象
Microsoft Visual C++ .NET 2003、Microsoft Visual C++ 2005、または Microsoft Visual C++ 2008 でビルドされたアプリケーションが 128 個程度以上の DLL のロードを行った場合、LoadLibrary 関数が失敗する可能性があります。

本現象は、Fiber Local Storage (以下、FLS) をサポートした Microsoft Windows Server 2003 以降のオペレーティング システムで発生する可能性があります。

この問題が発生したときに GetLastError 関数で得られる詳細エラー コードは次の通りです。
1114 : ERROR_DLL_INIT_FAILED (ダイナミック リンク ライブラリ (DLL) 初期化ルーチンの実行に失敗しました。)

引用元:https://support.microsoft.com/ja-jp/help/969933

 

 

どうやらマイクロソフト公認のバグが原因?かもということなので、https://www.microsoft.com/ja-JP/download/details.aspx?id=53587からMicrosoft Visual C++ の修正版をDLしてインストール。

 

 

これでいけたかと!?と思って再起動してもう一回tensorflowをインポートしましたが、またまたエラー。。。。

 

なので、他の原因を探し今度はそもそものAnaconda環境がダメなのでは?説に至りました。というのも現在自分が使っていたAnaconda環境はAnaconda3.5.0のpython3.6で、どうやらtensorflowはWindows10環境だとpython3.6では動かないという現象が報告されているみたいです。

 

なので、Anaconda Navigaterからenvironmentから適当な名前でpython3.5の新環境を作り、その環境でjupyter labsを起動し、terminalで、pipでtensor flowを再インストールしました。Anacondaは仮想環境を作りやすいので便利ですが、またまたまたエラー・・・・。

 

正直心が折れたのですが、最後にダメ元でチラッと書いてあったcondaコマンドでインストールすればいいんじゃね?的なアドバイスを参考にして、上述した環境で$conda install tensorflowでインストールし、以下のコマンドをjupyter notebookに入力したところ

 

import tensorflow as tf
hello = tf.constant('Hello, TensorFlow!')
sess = tf.Session()
print(sess.run(hello))

 

 

なんとエラーなし!ついに僕のWindows10にTensorflowがインストール/インポートができました!!!!ついでにconda install kerasでkerasも一緒にインストールして動きましたし、ようやく機械学習が始められそうです。

 

ここまで約1週間・・・機械学習自体も統計学の知識が必要ですし、ニューラルネットワークやその発展形のリカレントネットワークの理解も超難しいのに、始めるための環境構築がこんなに難しいとは思いませんでした。

 

というかそもそもANACONDAのターミナルでpipでもほとんどのライブラリがエラーなくインストールできるし、pipでいいじゃーーんとpipを多用し続けていたのも今回ハマった原因だったのではないかと今にしてみれば思います。やっぱりちゃんと常日頃からcondaコマンドでインストールしておいたほうがいいと思います。

 

他にもscipy云々とかもTensorflowやkerasがインポートできないエラーの原因にあるみたいですが、僕はそこではハマりませんでした。まあおとなしくNVIDIAのGPU付きのMAC買っとけってことなのかもしれませんけど、とりあえず動いたのでこの環境を死守したいと思います笑

 

スポンサーリンク
スポンサーリンク

まとめ

 

長くなってしまったので、まとめるとPythonでtensorflowのインポートできない場合は、以下の点を意識すればうまくインポートできるようになるかもしれません。

 

  • PIPでインストールしたものをアンインストールしcondaでインストールしなおす
  • C++のビルドパッケージをインストールする
  • Pythonの環境をバージョン3.5以下にする
  • tensorflowのバージョンを1.5以下にする

 

最後はダイナミックルーチンの初期化の失敗原因にはtensorflow1.6以降からバイナリでの命令方式が変わっており、CPUそのものが古くて対応できていない可能性を考慮してのものです。

 

# 古いtensorflowをインストールする
$pip install tensorflow==1.13

 

 

それでもインポートできない場合はstack over flowのtensorflowコラムで質問してみるのも手だと思います。

 

pythonの高度なライブラリは後ろでC++が動いていることがあり、その時にこのC++のビルドパッケージをインストールしていないとライブラリのインストール・インポートができないことがあるらしいです。

 

機械学習・深層学習で使うTensorflowなどがインストールできない原因もこいつにある人がほとんどだと思うので参考になれば幸いです。

 

 

 

 

 

 

 

 


プログラミング・スクレイピングツール作成の相談を受け付けています!

クラウドワークス・ココナラ・MENTAなどでPython・SQL・GASなどのプログラミングに関する相談やツール作成などを承っております!

過去の案件事例:

  • Twitter・インスタグラムの自動化ツール作成
  • ウェブサイトのスクレイピングサポート
  • ダッシュボード・サイト作成
  • データエンジニア転職相談

これまでの案件例を見る

キャリア相談もお気軽に!文系学部卒からエンジニア・データサイエンティストへの転職経験をもとに、未経験者がどう進むべきかのアドバイスを提供します。


スポンサーリンク
/* プログラミング速報関連記事一覧表示 */
ミナピピンの研究室

コメント

  1. Thanks for sharing your thoughts. I truly appreciate
    your efforts and I will be waiting for your next write ups thank you once again.

タイトルとURLをコピーしました