深層学習のライブラリ!Kerasの使い方【初心者向け】
初心者向けにディープラーニングのライブラリであるKerasとは何か、どうやって使うのか解説しています。Tensorflowなどと同じく深層学習を使って開発を行う際に使います。実際にプログラムを書いて作成しているので、参考にしてみてください。
テックアカデミーマガジンは受講者数No.1のプログラミングスクール「テックアカデミー」が運営。初心者向けにプロが解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。 ※ アンケートモニター提供元:GMOリサーチ株式会社 調査期間:2021年8月12日~8月16日 調査対象:2020年8月以降にプログラミングスクールを受講した18~80歳の男女1,000名 調査手法:インターネット調査
今回は、深層学習(ディープラーニング)のライブラリであるKerasについて解説します。
Kerasを学習することで、簡単なコードで機械学習のアルゴリズムのライブラリを利用できます。
実務でも、文章自動生成、画像認識、自動応答などの分野でKerasを利用するので、Kerasを学習してみてください。
目次
田島メンター!Kerasというのは何でしょうか?
深層学習(ディープラーニング)のライブラリのことだよ。TensorFlowやTheanoのような他のライブラリより、簡単にプログラムを書くことができるんだ。
どのような機能があるのですか?
例を見ながら説明していくね!
Kerasとは
Kerasは、オープンソースの 深層学習(ディープラーニング) のライブラリです。
ライブラリとは、便利な機能を使いやすくまとめているプログラムです。
ライブラリについては、自分で必要な本を書くのではなく、図書館のように読みたい本がまとまっている施設で、必要な本を読んで利用するというような便利機能です。
Kerasは、「ケラス」と読みます。
Kerasは、TensorFlowやMicrosoft Cognitive Toolkit(CNTK)、ONNX、Theanoといった他の深層学習(ディープラーニング)のライブラリの上で動作します。
TensorFlowとは、「テンソルフロー」や「テンサーフロー」と読みます。
TensorFlowは、Googleが開発したニューラルネットという脳機能の特徴をシミュレーションする計算ライブラリです。
Microsoft Cognitive Toolkit(CNTK)とは、「マイクロソフトコグニティブツールキット」と読みます。
Microsoft Cognitive Toolkit(CNTK)は、マイクロソフトが開発した統合深層学習ツールキットです。
Theanoとは、「テアノ」と読みます。
Theanoは、直感的な数式を実装することで、深層学習の微分を実行することができるライブラリです。
Kerasの情報は、公式サイトやブログ、GitHubなどから入手できます。
Keras公式サイト
Kerasに関する情報を体系的に得ることができます。
簡単なチュートリアル(Getting Start)もあります。
Keras公式ブログ
Kerasに関する最新情報、サンプルプログラムなどが公開されています。
Keras 公式GitHub
Kerasのソースコードが公開されています。
Kerasを利用するには
Kerasを利用するには、Anacondaなどの開発環境のパッケージを使うのが簡単です。
Anacondaについては、効率的に開発!AnacondaでPythonの環境構築する方法 を参考にしてみてください。
Anacondaは、データ分析やグラフ描画など、Pythonでよく利用されるライブラリを含んだ開発環境です。
なお、Anacondaなどの開発環境を利用せず、手動でKerasをインストールして利用することもできますが、今回は解説しておりません。
テックアカデミーAIコースでは、コマンドから指定してTensorFlowをインストールしたり、プログラム内でKerasをインポートして利用する学習を行っておりますので、ご興味があればぜひご覧ください。
Kerasのインストール方法
AnacondaにKerasをインストールするには、次の操作を参考にしてください。
1.メニュー画面のEnvironmentsから、Not Installedを選択し、検索BOXに「keras」と入力します。
2.一覧にKerasが表示されますので、チェックボックスで選択し、画面右下のApplyボタンを押すことでインストールできます。
同様に、TensorFlowも検索し、インストールしておきましょう。
Kerasを使った深層学習(ディープラーニング)
それでは、Kerasを使った深層学習(ディープラーニング)のプログラムを作ってみましょう。
このプログラムは、KerasのGitHubのサンプルプログラム「mnist_mlp」を参考にしています。
このプログラムは、MNISTという手書き文字の画像のデータセットを分類するものです。
MNISTは60,000件の訓練データと10,000件のテストデータで構成されています。
各データ(画像)は28×28ピクセルの白黒画像です。
ソースコード全体はこちらです。
一部コメントを日本語にしています。
開発環境によってエラーが出る場合は、ご自身の環境に合わせて実行環境の修正をしておくと良いですよ。
サンプルコード
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でモデルを作成して学習する部分を見ていきましょう。
その他の部分は、ソースコードのコメントを参考にしてください。
# Kerasでは、Sequentialという箱を用意して、そこに深層学習(ディープラーニング)のネットワーク層を追加していきます。
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.add(Dense(512, activation='relu', input_shape=(784,)))
これが、1つのネットワーク層を表します。
Denseというのは、入力と出力をすべて接続するネットワークです。
入力と出力について
model.add(Dense(512, activation='relu', input_shape=(784,)))
について解説します。
input_shape=(784,)
では、入力が784(28×28)であることを意味します。
512
では、出力が512であることを意味します。
ドロップアウト層について
model.add(Dropout(0.2))
について解説します。
Dropoutとは、学習を防止するドロップアウト層を意味します。
今回はドロップアウトの引数を0.2にしていますが、一般的には、0.2から0.5の間の数値で指定します。
ドロップアウトというのは、意図的に一定割合のノードを使わないように指示することによって、使用したノードの重みを最適化する手法です。
ドロップアウトは、ランダムで指定された割合の出力値を0にします。
深層学習(ディープラーニング)の場合、一部の答えを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の情報が掲載されている公式サイト、公式ブログ、公式GitHubを紹介しました。
Kerasを簡単に利用することができる、Anacondaでインストールする方法を紹介しました。
Kerasを実際に動作させてみるサンプルプログラムを解説しました。
これからKerasを勉強したい、機械学習を使って何か作ってみたいという方は最初に理解しておくと良いですよ。
機械学習・AIを学習中の方へ
これで解説は終了です、お疲れさまでした。
- つまずかず「効率的に」学びたい
- 副業や転職後の「現場で使える」知識やスキルを身につけたい
機械学習・AIを学習していて、このように思ったことはありませんか?
テックアカデミーのAIコースでは、第一線で活躍する「プロのエンジニア」が教えているので、効率的に実践的なスキルを完全オンラインでしっかり習得できます。
合格率10%の選考を通過した、選ばれたエンジニアの手厚いサポートを受けながら、Pythonのライブラリを使い、機械学習の応用までを実践的に学ぶことができます。
まずは一度、無料体験で学習の悩みや今後のキャリアについて話してみて、「現役エンジニアから教わること」を実感してみてください。
時間がない方、深く知ってから体験してみたい方は、今スグ見られる説明動画から先に視聴することをおすすめします!