Windows10でTensorflowとKerasをインストールしようとしてハマった話

スポンサーリンク

最近pythonの扱いにも慣れてきたので、本懐である機械学習に挑戦しようと思い立ち、よく機械学習で名前の聞くtensorflowとその機能を使ったkerasをWindows10の自分のPCにインストール仕様と思ったのですが、ここで自分史上一番ハマったのでその時のハマった内容と解決法を今後、別のPCでもう一回環境を作ることもあると思うので、備忘録も兼ねてメモっておこうと思います。

まず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.

その結果、分かってきたのは、大まかな原因は「ダイナミック リンク ライブラリ (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++ 2015 の修正版をDLしてインストール。

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

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

なので、AnacondaNavigaterからenvironmentから適当な名前でpython3.5の新環境を作り、その環境でjupyterlabsを起動し、terminalで、pipでtensorflowを再インストールしました。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も一緒にインストールして動きましたし、ようやく機械学習が始められそうです。ここまで約一週間・・・機械学習自体ニューラルネットワークやリカレントネットワークの理解すら難しいのに始めるための環境構築がこんなに難しいとは思いませんでした。

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

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする