深層学習のライブラリ!Kerasの使い方【初心者向け】

初心者向けにディープラーニングのライブラリであるKerasとは何か、どうやって使うのか解説しています。Tensorflowなどと同じく深層学習を使って開発を行う際に使います。実際にプログラムを書いて作成しているので、参考にしてみてください。

TechAcademyマガジンはオンラインのプログラミングスクールTechAcademy [テックアカデミー]が運営する教育×テクノロジーのWebメディアです。初心者でもすぐ勉強できる記事が2,000以上あります。

今回は、深層学習(ディープラーニング)のライブラリであるKerasについて解説します。

Kerasというキーワードは聞いたことがあるが、他の深層学習ライブラリとの違い、何ができるか、どのような機能があるか、イメージしづらいのでは無いかと思います。

ぜひ、この記事を参考に、Kerasにチャレンジしてみてください。

 

なお本記事は、TechAcademyのAIオンライン講座の内容をもとに作成しています。

 

目次

 

大石ゆかり

田島メンター!Kerasというのは何でしょうか?

田島悠介

深層学習(ディープラーニング)のライブラリのことだよ。TensorFlowやTheanoのような他のライブラリより、簡単にプログラムを書くことができるんだ。

大石ゆかり

どのような機能があるのですか?

田島悠介

例を見ながら説明していくね!

 

Kerasとは

Kerasは、オープンソースの 深層学習(ディープラーニング) のライブラリです。「ケラス」と読みます。Kerasは、TensorFlowやCNTK、Theanoといった他の深層学習(ディープラーニング)のライブラリの上部で動くような作りになっており、それらのライブラリよりも、より簡単にモデル(深層学習のネットワーク)を作ることができるよう設計されています。

Kerasの情報は、公式サイトやブログ、GitHub等から入手することができます。

 

Keras公式サイト

Kerasに関する情報と体系的に得ることができます。簡単なチュートリアル(Getting Start)もあります。

Keras公式サイト

 

ブログ

Kerasに関する最新情報、サンプルプログラムなどが公開されています。

ブログ

 

GitHub

Kerasのソースコードが公開されています。

GitHub

 

[PR]機械学習で挫折しない学習方法を動画で公開中

Kerasを利用するには

Kerasを利用するには、Anacondaなどの開発環境のパッケージを使うのが簡単です。

Anaconda

Anacondaは、データ分析やグラフ描画など、Pythonでよく利用されるライブラリを含んだ開発環境です。

AnacondaにKerasをインストールするには、メニュー画面のEnvironmentsから、Not Installedを選択し、検索BOXに「Keras」と入力します。一覧にKerasが表示されますので、チェックボックスで選択し、画面右下のApplyボタンを押すことでインストールすることができます。

同様に、TensorFlowもインストールしておきましょう。

なお、Anacondaなどの開発環境を利用せず、手動でKerasをインストールして利用することも出来ますが、中級者向けとなるため、手順は省略します。

 

Kerasを使った深層学習(ディープラーニング)

それでは、Kerasを使った深層学習(ディープラーニング)のプログラムを作ってみましょう。このプログラムは、KerasのGitHubのサンプルプログラム「mnist_mlp」を参考にしています。

このプログラムは、MNISTという手書き文字の画像のデータセットを分類するものです。MNISTは60000件の訓練データと10000件のテストデータで構成されています。各データ(画像)は28×28ピクセルの白黒画像です。

MNIST

ソースコード全体はこちらです。一部コメントを日本語にしています。

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  # 訓練データを128ずつのデータに分けて学習させる
num_classes = 10 # 分類させる数。数字なので10種類
epochs = 20 # 訓練データを繰り返し学習させる数

# 訓練データ(train)とテストデータ(test)を取得する
(x_train, y_train), (x_test, y_test) = mnist.load_data()

# 元のデータは1次元の配列なので、それを画像毎の配列に整形する
x_train = x_train.reshape(60000, 784)
x_test = x_test.reshape(10000, 784)
x_train = x_train.astype('float32')
x_test = x_test.astype('float32')
x_train /= 255
x_test /= 255
print(x_train.shape[0], 'train samples')
print(x_test.shape[0], 'test samples')

# y(目的変数)には0から9の数字が入っているが、Kerasで扱いやすい形に変換する
y_train = keras.utils.to_categorical(y_train, num_classes)
y_test = keras.utils.to_categorical(y_test, num_classes)

# モデルの作成
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(num_classes, activation='softmax'))

model.summary()

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

# 学習は、scrkit-learnと同様fitで記述できる
history = model.fit(x_train, y_train,
 batch_size=batch_size,
 epochs=epochs,
 verbose=1,
 validation_data=(x_test, y_test))

# 評価はevaluateで行う
score = model.evaluate(x_test, y_test, verbose=0)
print('Test loss:', score[0])
print('Test accuracy:', score[1])

 

それでは、Kerasでモデルを作成して学習する部分を見ていきましょう。その他の部分はソースコードのコメントを参考にしてください。

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(num_classes, activation='softmax'))

Kerasでは、Sequentialという箱を用意して、そこに深層学習(ディープラーニング)のネットワーク層を追加していきます。

model.add(Dense(512, activation='relu', input_shape=(784,)))

これが、1つのネットワーク層を表します。Denseというのは、入力と出力を全て接続するネットワークです。上記の場合、入力が784(28×28)、出力が512となります。

model.add(Dropout(0.2))

深層学習(ディープラーニング)の場合、一部のネットワークを刈り取る(答えを0にして伝える)ことで、精度が良くなることが知られています。

実行結果は以下のようになります。

Train on 60000 samples, validate on 10000 samples
Epoch 1/20
60000/60000 [==============================] - 12s 200us/step - loss: 0.2476 - acc: 0.9233 - val_loss: 0.0932 - val_acc: 0.9687
Epoch 2/20
60000/60000 [==============================] - 13s 219us/step - loss: 0.1043 - acc: 0.9681 - val_loss: 0.0856 - val_acc: 0.9732
Epoch 3/20
60000/60000 [==============================] - 13s 214us/step - loss: 0.0750 - acc: 0.9771 - val_loss: 0.0963 - val_acc: 0.9722
Epoch 4/20
(中略)
Epoch 19/20
60000/60000 [==============================] - 10s 171us/step - loss: 0.0201 - acc: 0.9951 - val_loss: 0.1096 - val_acc: 0.9829
Epoch 20/20
60000/60000 [==============================] - 11s 176us/step - loss: 0.0179 - acc: 0.9953 - val_loss: 0.1102 - val_acc: 0.9840
Test loss: 0.11024194015
Test accuracy: 0.984

エポックサイズにより20回繰り返し学習しています。徐々に学習精度が上がり、最終的には0.984になっていることが確認できますね。

 

田島悠介

Kerasについて、理解は深まったかな?

大石ゆかり

概要やプログラムの書き方など、勉強になりましたー!

田島悠介

サンプルプログラムをもとに、いろいろ試して学習を深めるといいよ!

深層学習画像認識自然言語処理については、また別のところで説明するね。

大石ゆかり

分かりました。ありがとうございました!

 

今回は、深層学習(ディープラーニング)ライブラリのKerasについて解説しました。

これからKerasを勉強したい、機械学習を使って何か作ってみたいという方は最初に理解しておきたい内容でしょう。

 

また、オンラインのプログラミングスクールTechAcademyでは、AIオンライン講座を開催しています。

AI(人工知能)の構築に必要な機械学習・ディープラーニングについて実践的に学習することができます。

現役エンジニアがパーソナルメンターとして受講生に1人ずつつき、マンツーマンのメンタリングで学習をサポートし、最短4週間で習得することが可能です。

この記事を監修してくれた方

太田和樹(おおたかずき)
ITベンチャー企業のPM兼エンジニア

普段は主に、Web系アプリケーション開発のプロジェクトマネージャーとプログラミング講師を行っている。守備範囲はフロントエンド、モバイル、サーバサイド、データサイエンティストと幅広い。その幅広い知見を生かして、複数の領域を組み合わせた新しい提案をするのが得意。

開発実績:画像認識技術を活用した駐車場混雑状況把握(実証実験)、音声認識を活用したヘルプデスク支援システム、Pepperを遠隔操作するアプリの開発、大規模基幹系システムの開発・導入マネジメント

地方在住。仕事のほとんどをリモートオフィスで行う。通勤で消耗する代わりに趣味のDIYや家庭菜園、家族との時間を楽しんでいる。