Tensorflow2.1.0をWindows10のAnacondaで使う!


先に結論

TensorFlow2.1.0がWindows10のPython3.7上で使えました!

まえがき

先日 TensorFlow 2.1.0 をGoogle Colabの環境を利用して使ってみました。
何の準備もせずに使えるのはこりゃあ便利だと感動しましたがローカルマシンで動かしたいのと以前から使っていたJupyter Notebook上でも動作させたいということで環境構築、テストをしてみました。
※Anacondaインストール済みからの構築となります。

大まかな流れ

 1. Anaconda Navigtorで新しい仮想環境生成
 2. Visual Studio 2015、2017 および 2019 用 Microsoft Visual C++ 再頒布可能パッケージをインストール
 3. Anaconda NavigtorでTensorFlow,matplotlibなどライブラリをインストール
 4. インストール確認
 5. 実際にTensorFlow 2.0 を動かして手書き文字の認識をしてみよう
 私が詰まったのは2の項目でした。TensorFlow 2.1.0 を使うには追加パッケージをインストールする必要があるみたいなので
 ここがWindows10におけるTensorFlow 2.1.0 のインストールで苦悶するポイントかも?

1. Anaconda Navigtorで新しい環境生成

※仮想環境を使い分ける予定がない場合はrootを利用すればいいのでここの項目の作業はやらなくて大丈夫です。
Anaconda Navigtorを起動して左メニューからenvirmentを選択しcreateを押し、環境名を決めてPython3.7のバージョンを選択してcreateする。(少し時間がかかる)

2. Visual Studio 2015、2017 および 2019 用 Microsoft Visual C++ 再頒布可能パッケージをインストール

https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads/
上記のurlからVisual Studio 2015、2017 および 2019 用 Microsoft Visual C++ 再頒布可能パッケージをダウンロード、インストールします。
TensorFlow 2.1.0 以降のバージョンでは、このパッケージに含まれる msvcp140_1.dll ファイルが必要なようです。

このファイル自体は Visual Studio 2019 に含まれているのでVS2019をインストール済みの方は大丈夫です。

3. Anaconda NavigtorでTensorflow,matplotlibなどライブラリをインストール

ここまで終わればもうすぐです。
Anaconda Navigatorに戻りenvirmentで生成した環境を選択した状態で右メニュー左の項目をALLかNot Installedにしてtensorflow,matplotlibを検索してチェックボックスを付けてApplyをしてインストールします。
TensorFlow2.1.0はかなり巨大なライブラリなのでインストールに時間がかかりますが待ちましょう。

4. インストール確認

Anaconda Navigatorの環境名右の再生ボタンにあるopen with Pythonを選択しコマンドプロンプトを開きます。
ここで以下を実行してインポートとTensorFlowのバージョン確認をしてエラーがないなら正常にインストールできました!

import tensorflow
print(tf.__version__)

Warning! HDF5 library version mismatched error

こちらのようなエラーが出た場合はHDF5ライブラリにバージョンの不整合が出ている恐れがあります。
私は一度動作確認を行った後にこの現象が起き、TensorFlowがインポートできなくなりました。
HDF5ライブラリを再インストールしたら治りました。

pip uninstall h5py
pip install --user h5py

5. 実際にTensorFlow 2.0 を動かして手書き文字の認識をしてみよう

ここまででTensorFlow2.1.0の環境構築は終わりました!
最後にTensorFlow公式サイトの「初心者のための TensorFlow 2.0 入門」を参考にしてニューラルネットワークの構築、訓練を行います。
Jupyter Notebookを起動して以下のコードを実行します。

初めにmnistという画像認識などを行うための訓練データセットを取り込み、ニューラルネットワークのモデルを構築します
```python:データセットの読み込み、モデルの構築
from future import absolute_import, division, print_function, unicode_literals

TensorFlow をインストール

import tensorflow as tf

mnistからデータセットの読み込み

mnist = tf.keras.datasets.mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0

ニューラルネットワークのモデルの設定、構築

model = tf.keras.models.Sequential([
tf.keras.layers.Flatten(input_shape=(28, 28)),
tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Dropout(0.2),
tf.keras.layers.Dense(10, activation='softmax')
])
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
```

モデルの訓練と評価
model.fit(x_train, y_train, batch_size=32, epochs=5)
model.evaluate(x_test,  y_test, verbose=2)

こちらが訓練下の経過と結果です。

データセットの中身を表示
# ヘルパーライブラリのインポート
import numpy as np
import matplotlib.pyplot as plt
#データを10*6に出力
for i in range(0,60):
  plt.subplot(6,10,i+1)
  plt.imshow(x_train[i],cmap='gray')
plt.show()
print(y_train[0:60])

データセットの中身はこんな風になっています。28*28の手書き数字の画像データと数字ラベルが入っていることが分かりますね。

おわりに

TensorFlow2.1.0をWindows10のPython3.7上で使い、mnistの手書き数字のデータセットを元にニューラルネットワークのモデルを訓練してみました。次は自分で用意した手書き数字を予測させてみたいですね。

出典

「pip での TensorFlow のインストール」 https://www.tensorflow.org/install/pip?hl=ja#windows