今までは初心者向け練習環境として、TensorFlow のTFLearn を利用していました。
今後は、より複雑で実用向けの結果を得るために、深層学習ライブラリの Keras も使ってみます。
Keras は TensorFlow 専用ではなく、 CNTK, Theano 用のライブラリもあるそうです。
Keras では、既存の学習済みモデルを活用しやすく、より実用的なシステムを構築するのに向いていると思います。

参考URL
https://keras.io/

(1)Keras (TensorFlow用) のインストール

Ubuntsu の TensorFlow インストール済の Anaconda仮想環境に Keras をインストールしました。

> pip install keras
……
Installing collected packages: keras
Successfully installed keras-2.1.6
……

これで、keras-2.1.6 がインストールされました。

※しかし、詳細は後述しますが、学習モデル作成の実行時にエラーが出たので、少し前のバージョン(2.1.3)にしました。
※やり直し
> pip install keras==2.1.3

(2)学習とテスト (MNISTを試す)

TensorFlow + TFLearn で作成した MNIST(手書き文字のデータセット) を Keras でも試してみます。
深層学習 TensorFlow を MNIST で試す」の全結合型の Python プログラムを keras 用に書き換えて実行しました。

———————- 全結合1層 Python ブログラム
## keras をインポート
import tensorflow as tf
import keras as kr
## 結果の評価 数値計算用
import numpy as np

## trainX 学習用データ、trainY 正解データ、testX テスト用データ、testY 正解データ
(trainX, trainY), (testX, testY) = kr.datasets.mnist.load_data()

## 形式変換
# テストデータを変換
trainX = trainX.reshape(60000, 784)
trainX = trainX/255.
testX = testX.reshape(10000, 784)
testX = testX/255.
# 正解データを変換
trainY = kr.utils.to_categorical(trainY, 10)
testY = kr.utils.to_categorical(testY, 10)

## モデル構築
# 中間層1層 全結合型
model = kr.models.Sequential()
model.add(kr.layers.Dense(units=256, input_shape=(784,), activation=’relu’))
model.add(kr.layers.Dropout(0.5))

# 出力層
model.add(kr.layers.Dense(units=10, activation=’softmax’))

## 学習
model.compile(optimizer=’sgd’, loss=’categorical_crossentropy’, metrics=[‘accuracy’])
model.fit(trainX, trainY, batch_size=100, epochs=20, validation_split=0.1)

## テスト
result = model.predict(testX)

## 結果を表示
pred = np.array(result).argmax(axis=1)
print(pred)
label=testY.argmax(axis=1)
print(label)
accuracy = np.mean(pred == label, axis=0)
print(accuracy)

———————————————————–

kerasのバージョン 2.1.6 で実行すると下記のようなエラーが出ました。

TypeError: softmax() got an unexpected keyword argument ‘axis’

少し前のバージョンで試すとエラーがでないので keras==2.1.3 に変更しました。

———– 実行結果
[7 2 1 … 4 5 6]
[7 2 1 … 4 5 6]
0.9461
———————————–

とりあえず、Keras の環境ができました。

 

(S.Onda 2018/6/9)