Categories: CUDATensorflow

Tensorflow+Kerasの環境構築

Kerasは、Pythonで書かれたDeep Learning用のアッパーライブラリで、TensorflowやTheano、CNTKのアッパーライブラリとして使用することができます。

例えばTensorflowでコーディングを行うときに、記述が煩雑だったコードを、Kerasをインストールとしてアッパーライブラリとして被せることで、少ない行数で簡略にプログラミングを行うことが可能になります。

一言で言うと、TensorflowなどのDeep Learningライブラリを簡単に扱い、コーディングしやすくするためのライブラリです。

Tensorflowを使っている人は、結構Kerasをアッパーライブラリとして使っている人が多い気がするので、今回はKerasを使ってみたいと思います。

また、以下は補足ですが、最近はKerasがTensorflowに統合され、Tensorflowをダウンロードしたときに統合版Kerasも付いてきます。結果、

① Tensorflowの環境を構築した後に、Kerasの環境構築も別にする方法

② Tensorflowの環境を構築した際に付いてきた統合版Kerasを使う方法

と二種類のやり方が存在し、ライブラリのインポートの仕方なども微妙に異なってきます(二種類のやり方において、全く同じコードでは動きません)。

今回は、①のTensorflowとKerasをそれぞれ環境構築する方法でやってみたいと思います。

今回の環境

・OS : Windows10(64bit)
・GPU: GeForce GTX 950
・Anaconda ⇒ 一応記事内で導入
・CUDA 9.0(導入済) ⇒ 一応記事内で導入
・cuDNN v7.0.5(導入済) ⇒ 一応記事内で導入
・Tensorflow 1.11.0
・Keras 2.2.4

手順

一応、
(1) Anacondaの環境構築
(2) CUDA&cuDNNの環境構築
(3) Tensorflowの環境構築
(4) Kerasの環境構築
の順番で書いていきますが、既に環境構築されている部分は読み飛ばしてください。

(1) Anacondaの環境構築

今回はAnacondaの仮想環境を使って、TensorflowとKerasの環境構築を行っていきます。それでは、以下のページからAnacondaのインストーラをダウンロードしましょう。

https://www.anaconda.com/download/

ダウンロードの選択肢としては、Python2.7とPython3.6があります。

Tensorflowは3系対応なので、左の3系のインストーラをダウンロードしましょう。

メールアドレスの入力を求められますが、「No Thank you」でも大丈夫です。

ダウンロードしたインストーラを起動します。インストーラは基本的に指示通りに次に進んでいけばOKです。

インストールのタイプを選べと問われますが、ここもデフォルトの「Just Me」でOKです。次のページで保存場所を問われますが、好きな場所に保存してください。

では、デフォルトの設定のままで「Install」してみましょう。

これでインストールが開始されると思うので、完了まで待ちましょう。

以下の画面まで進めば、Anacondaのインストールは完了です。それではTensorFlowの環境構築に入っていきます。

Installが終わったら、環境変数を確認します。環境変数で検索し、「システム環境変数の編集」を開きます。

システムのプロパティの右下にある「環境変数」より環境変数を設定します。開発をしていると環境変数は非常によく使うので、手順を覚えておくと便利です。

ユーザー環境変数の中にある「Path」の中身を変更します。黒塗りになっている部分は私のユーザー名が入っていた部分なので隠しています。ご了承ください。

「Path」の末尾に① Anacondaをインストールしたフォルダ と、② Scripts ③ Library\binの三つを追加しました。

以上で、Anacondaの環境構築は終了です。

(2) CUDAとcuDNNの環境構築

次に、CUDAとcuDNNの環境構築を行います。

使っている方はご存知かもしれませんが、Tensorflow(GPU版)はCUDAとcuDNNのバージョンに非常に繊細で、どのバージョンのTensorflowに対して、どのCUDA及びcuDNNのバージョンが必要かということが決まっており、上手くバージョンを合わせないと動きません。

ちなみに公式によると以下の対応らしいのです。

CUDAも9と書かれていますが、現在ではCUDA9.0よりも新しいバージョンとしてCUDA 9.1やCUDA 9.2もあったりして、安易に9.1とか9.2とかを入れるとちゃんと動かないなんてことも頻発します。

Version Python version cuDNN CUDA
tensorflow_gpu-1.11.0 3.5-3.6 7 9
tensorflow_gpu-1.10.0 3.5-3.6 7 9
tensorflow_gpu-1.9.0 3.5-3.6 7 9
tensorflow_gpu-1.8.0 3.5-3.6 7 9
tensorflow_gpu-1.7.0 3.5-3.6 7 9
tensorflow_gpu-1.6.0 3.5-3.6 7 9
tensorflow_gpu-1.5.0 3.5-3.6 7 9
tensorflow_gpu-1.4.0 3.5-3.6 6 8
tensorflow_gpu-1.3.0 3.5-3.6 6 8
tensorflow_gpu-1.2.0 3.5-3.6 5.1 8
tensorflow_gpu-1.1.0 3.5 5.1 8
tensorflow_gpu-1.0.0 3.5 5.1 8

こればっかりは割とやってみないとわからないというところが正直なところだったりします。

今回はまず、最新版の「tensorflow_gpu-1.11.0」を入れることに決め、それに対応するCUDA9とcuDNN7を入れました。

CUDAとcuDNNの環境構築については、以下の記事を参照してください。バージョンが違いますが、やり方は基本的に全く同じのはずです。

今回、私が成功した環境はPython 3.6+Tensorflow 1.11.0 + CUDA 9.0 + cuDNN 7.0.5 です。揃えれば動く可能性は高いと思います。

・CUDAの環境構築

過去記事①:CUDA 8.0の導入と環境構築(Windows 10) | 技術的特異点

・cuDNNの環境構築

過去記事②:Tensorflow導入に向けたcuDNN環境構築(Windows 10) | 技術的特異点

(3) 仮想環境の構築とTensorflowの動作確認

それではTensorflowとKerasを動かすための仮想環境を作っていきます。

それではまず、Anaconda Promptを検索して、起動してみましょう。

プロンプトを開いたら、「keras」という名前で仮想環境を作っていきます。プロンプトに以下を打ち込みましょう。

kerasという名前で、Python3.6をベースとした仮想環境を作ります。

conda create -n keras Python=3.6 anaconda

PythonのInstallが完了したら、以下のコマンドで仮想環境が正常にできていることを確認しましょう。

conda info -e

ちゃんと、kerasという仮想環境が生成されています。

次に、kerasという仮想環境に対してTensorflowやKerasを設定していきたいので、仮想環境kerasを有効化します。

activate keras

ここまでできたら、次はTensorflowをインストールしていきましょう。

pip install tensorflow-gpu

ちなみにこのコマンドだとTensorflow(GPU)の最新版が入ります。現在は1.11.0が最新バージョンなのでTensorflow1.11.0が入ります。

ただ、新しいバージョンが出ると、随時そちらがインストールされるコマンドとなるので、バージョンを指定してインストールしたい場合は、

pip install tensorflow-gpu==1.11.0

で行けるはずです。

これで、Tensorflowの環境構築までは終わりました。

それでは、以下のテストコードを実行してみましょう。

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

正しくHello TensorFlowが表示されればTensorflowの環境構築までは上手くいっています。

仮想環境上でのコードの実行のやり方について、もし不明であれば、以下にPycharmを用いて実行する例を書いていますので参考にしてみてください。

過去記事③:PyCharmでTensorflow(Windows10) | 技術的特異点

(4) Kerasのインストール

次に、KerasをAnaconda Promptでインストールしていきます。

pip install keras

上記コマンドでkerasの最新版のkeras 2.2.4が入りました。

環境構築としてはこれだけなので非常に簡単です。

(5) KerasでMNISTのテストコードを実行

最後に以下のKerasのテストコードを実行して、正常動作を確認してみてください。

import keras
from keras.datasets import mnist
from keras.models import Sequential
from keras.layers import Dense, Dropout
from keras.optimizers import RMSprop

batch_size = 128
num_classes = 10
epochs = 20

# モデルの生成関数
def createModel():
    model = Sequential()
    model.add(Dense(512, activation='relu', input_shape=(784,)))
    model.add(Dropout(0.2))
    model.add(Dense(512, activation='relu'))
    model.add(Dropout(0.2))
    model.add(Dense(10, activation='softmax'))

    model.compile(loss='categorical_crossentropy',
                  optimizer=RMSprop(),
                  metrics=['accuracy'])
    return model

# Mnistデータのロード
(x_train, y_train), (x_test, y_test) = mnist.load_data()

x_train = x_train.reshape(60000, 784) # 2次元配列を1次元に変換(訓練データ)
x_test = x_test.reshape(10000, 784) # 2次元配列を1次元に変換(テストデータ)
x_train = x_train.astype('float32') # int型をfloat32型に変換
x_test = x_test.astype('float32') # int型をfloat32型に変換
x_train /= 255                     # [0-255]の値を[0.0-1.0]に変換
x_test /= 255

# 正解ラベルのOne hot vector化
y_train = keras.utils.to_categorical(y_train, num_classes)
y_test = keras.utils.to_categorical(y_test, num_classes)

# モデルの定義
model = createModel()

# 学習の実行
history = model.fit(x_train, y_train,  # 画像とラベルデータ
                    batch_size=batch_size,
                    epochs=epochs,     # エポック数の指定
                    validation_data=(x_test, y_test))

# モデル構成の確認
model.summary()

score = model.evaluate(x_test, y_test, verbose=0)
print('Test loss:', score[0])
print('Test accuracy:', score[1])

実行結果は下記のようになります。簡単なモデルですが、98%程度の精度が出ていることが確認できます。

また、summary()関数で簡単にモデルの構成を確認することも可能です。

まとめ

今回はTensorflow+Kerasの環境構築を行ってみました。Kerasを使うことで、Tensorflowでのコーディングの負荷を減らすことができそうです。

Kerasについても随時勉強していきたいと思います。

Haruoka