はじめに †

Kerasはディープ・ラーニング・ライブラリーのTensorFlowを使用するためのライブラリーです。

インストール †

ここでは、Anacondaに追加する形でインストールします。

まず、Anaconda Navigatorを起動し、Environmentsを表示します。

nolink

次に、base (root)の横の三角形をクリックし、メニューを表示します。

nolink

メニューから、Open Terminalを選び、ターミナルを開きます。

nolink

ターミナルを開いたら、念の為、CondaとMatplotlibをアップデートします。

conda update conda
conda update matplotlib

CondaとMatplotlibをアップデートしたら、Kerasをインストールします。 TensorFlowはKerasと一緒にインストールされます。

conda install keras

使い方 †

ライブラリーの読み込み †

ライブラリー名は keras です。

import keras

ライブラリーを読み込んで、次のようなメッセージが出てきたら、準備はできています。

Using TensorFlow backend.

予測モデル学習器の生成 †

Kerasを使うことで、ディープ・ラーニング・ライブラリーのTensorFlowをScikit-learnと同じように使えます。

ディープ・ラーニングというのは、ニューラル・ネットワークの中間層が2つ以上のものです。 ここでは、基本的な全結合の4層モデル(入力層、中間層2つ、出力層)を作成する例を示します。

ここで、Scikit-learnに付属しているIrisデータセットを例題として使います。 説明変数は花びらの長さ、幅、萼(がく)片の長さ、幅の4つ、目的変数はSetosaを表す0、Versicolorを表す1、Virginicaを表す2の3種類です。

まず、シーケンシャル・モデルの入れ物を作成します。

print(keras.__version__)

次に、入力層と1つ目の中間層を追加します。

from sklearn import datasets
iris = datasets.load_iris()
X = iris.data
y = iris.target
print(X)
print(y)

Dense は全結合のレイヤーです。 units はこのレイヤーのユニット数、activation は活性化関数(ここではランプ関数 ReLU)を表します。 input_dim オプションは、最初の中間層だけに指定し、入力層のユニット数を表します。 説明変数が4つなので、入力層のユニット数は4です。

続いて、2つ目の中間層を追加します。

[[5.1 3.5 1.4 0.2]
 [4.9 3.  1.4 0.2]
 [4.7 3.2 1.3 0.2]
 ...
 [6.5 3.  5.2 2. ]
 [6.2 3.4 5.4 2.3]
 [5.9 3.  5.1 1.8]]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2
 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
 2 2]

最後に、出力層を追加します。

from keras.utils import np_utils
y = np_utils.to_categorical(y)
print(y)

分類用なので、出力層の活性化関数をソフトマックス Softmax にしています。 出力が3種類なので、出力層のユニット数は3です。

全てのレイヤーを追加したら、モデルをコンパイルします。

[[1. 0. 0.]
 [1. 0. 0.]
 [1. 0. 0.]
 ...
 [0. 0. 1.]
 [0. 0. 1.]
 [0. 0. 1.]]

loss は損失関数、optimizer は最適化手法、metrics は評価尺度を表します。 ここでは、分類用なので、損失関数はカテゴリカル・クロスエントロピー categorical_crossentropy、評価尺度は精度 accuracy にしています。 最適化手法は、最もシンプルな確率的勾配法 SGD にしています。

ニューラル・ネットワークの学習 †

まず、データを準備します。

Scikit-learnに付属しているIrisデータセットの目的変数は、[0, ..., 1, ..., 2, ...] という1次元ベクトルになっていますが、Kerasに付属している np_utils を用いて、これを [[1, 0, 0], ..., [0, 1, 0], ..., [0, 0, 1], ...] というOne hotベクトルに変換します。

from tensorflow.keras.models import Sequential
model = Sequential()

Scikit-learnと同じように、fitメソッドで学習します。

from tensorflow.keras.layers import Dense
model.add(Dense(units=16, activation='relu', input_dim=4))

epochs は繰り返し数、batch_size は重みの更新を事例いくつごとに行うかを表します。 Irisデータセットには事例が150個含まれているので、ここでは全部まとめて重みを更新しています。

この記事はまだ書きかけです。

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS