6. 機械学習の例

6.1 セクション6のねらい

_images/slide_06_020.png

Keras(ケラス) とは、 Deep Learning の APIであり、 AI機械学習などの分野で 広く使われています。

KerasのWebサイトには Keras のAPIを用いた プログラム例も 多数収録されています。

このセクションでは Keras の Web サイト上の そのようなプログラムを 実際に動かす方法を見てみます。

このセクションでは、Google Colab を用います。 2.8 Google Colab にしたがってGoogle Colab が準備ができていれば、 パソコンやタブレット上のブラウザで動作します。

なお、Keras の Web サイトは常に更新されており、 今後も変わっていく場合があります。 このセクションの説明と実際のサイトが異なる場合がありますのでご了承ください。

6.2 Keras とは

_images/slide_06_030.png

Keras とは、 Deep Learning の APIであり、 AI機械学習などの分野で 広く使われています。

ここでは、その基礎を学び、サンプルプログラムを動かしていきます。

ここでは、以下の機械学習プログラム例を実行しようと思います。

  • 画像識別実験
  • 文字認識実験

プログラムの実行には Google Colab を使います。

Google Colab の利用の準備がまだできていない場合は、 セクション2の、2.8 Google Colab に従って準備してください。

6.3 Keras の Code examples の見方

Kerasのwebサイトは、 url: https://keras.io/ で開くことができます。

_images/keras_06_02_010.png

このトップページから、

  • Get started
  • Code example
  • Computer vision

という順番にクリックすることで、Computer Vision のぺージを開けます。

_images/keras_06_02_020.png _images/keras_06_02_030.png

Computer Vision は画像や映像の識別、認識のプログラム例を集めたものです。

このセクションではこのうち、以下の二つのプログラムを見ることにします。

  • Image classification from scratch
  • Simple MNIST convnet

6.4 Image classification from scratch

Image classification from scratch とは、 from scratch つまりゼロから、Image classification つまり 画像の識別を行うという意味です。

機械学習の技術が進む以前は、画像識別は特徴抽出や 識別の判定を、人間がプログラムとして与えることが普通でした。

つまり特徴を抽出するためのアルゴリズムや、 どの特徴に注目して識別すべきか、といったアルゴリズムを プログラムとして与えていました。

しかし現代の機械学習のアルゴリズムを使うと、 たとえば猫と犬の写真を多数与えるだけで、 特徴抽出や識別の方法は、 機械学習が自動的に作ってしまうのです。

そこで、それを「ゼロから作る画像識別」と呼んでいるわけです。

プログラムを実行してみるのはとても簡単です。

View in Colab という部分をクリックすると、 Google Colab 上でこのプログラムが開きます。

_images/keras_06_03_010.png

まず Setup から始めましょう。

_images/keras_06_03_020.png

Google Colab は Jupyter Notebook をベースにしていますが、 見かけが若干異なります。 セルを実行するにはセルの左の部分をクリックします。

_images/keras_06_03_030.png

なお、Keras の Jupyter Notebook を開こうとすると最初にこのような警告が出ます。 これは Google Colab 以外のファイルを開こうとしているからで、 Keras のサイトは信頼してよいので、 「このまま実行」をクリックします。

_images/keras_06_03_040.png

こうして順次セルを実行していきます。

_images/keras_06_03_050.png

Build a model は機械学習の処理モデルを指定するところです。 このプログラムで機械学習の処理の構造を指定しています。 応用によってこの構造は変化します。

_images/keras_06_03_060.png

結果はこのような図で表示されます。 つまり機械学習の処理の構造によって、この図も変化します。

_images/keras_06_03_070.png

これで機械学習の処理の準備が整いました。 スタートします。

機械学習では、全部の学習用データを学習することを、 何度かくりかえします。 この繰り返しの回数を、 epochs という数値で指定します。 またその下の分数は、全体何個中何個のデータを学習したかを 表します。

_images/keras_06_03_080.png

自分で実行してみた場合、epochsや処理をしているデータ数の変化をみてください。 終了するまでに非常に時間がかかることがわかるでしょう。

このスピードで計算が進むのであれば、終了までに数10時間かかるだろうと予想されます。

そんなに待てないので、セル左側の四角マーク、ストップボタンを クリックして実行を中断します。

_images/keras_06_03_090.png

計算時間を短縮する方法は2つあります。

まず epochs = 50 を epochs = 1 にすること。 これは繰り返しを1回としてしまうことで、 結果が完全には最適値に収束しないので、 認識率は下がりますが、 一応認識はできます。

そこで、ここでは、

epochs = 1

と変更して再度スタートすることにします。

もうひとつは GPU を使うことです。 GPUはCPUよりもはるかに高速に数値計算をするハードウエアで、 Google Colab ではGPUも無料で利用できます。ただし、無料の利用には 制限があります。 GPUの設定方法は後で説明します。 とりあえず epochs = 1 で学習してみます。

_images/keras_06_03_100.png

すると1時間前後で計算を終了します。

学習したのとは別の画像で識別実験をしてみます。 画像を指定し、識別すると、90%以上の確率で 猫である、という判定になりました。

これは猫の画像なので、結果は合っていることになります。

_images/keras_06_03_110.png

他の様々な画像でも試してみましょう。

6.5 Simple MNIST convnet

次に Simple MNIST convnet を実行してみます。

_images/keras_06_04_010.png

View in Colab で Google Colab を起動します。 先ほどと同じように警告が出ますが、処理を続行しましょう。

_images/keras_06_04_020.png

先ほどと同様にセルの実行を進めます。

_images/keras_06_04_030.png

このプログラムは待てないほど 、 実行時間が長いわけではないですが、 (せいぜい1時間ですが) 動作確認するだけなので、 epochs = 1 にして実行しましょう。

順次最後まで処理を実行してください。

_images/keras_06_04_040.png

loss = 0.072

accuracy = 0.97

と、なりました。認識率が97パーセントですから、 学習の回数を減らした割にはけっこうよく できています。

_images/keras_06_04_050.png

6.6 GPU の使用方法

GPU を使うためには Google Colab で以下のように設定します。

  • 「編集」から、「ノートパソコンの設定」を選ぶ
  • ハードウエアアクセラレータでGPUを選択する。

先の 6.4 Image classification from scratch は、epochs=1 としても、GPUなしでは1時間程度かかりますが、 GPU を使うとを数分でおわります。

GPU のパワーを実感できるでしょう。

ただしこれを数回やった程度で、無料アカウントのGPUの上限には すぐ達してしまいます。

有料アカウントであれば、本格的な利用が可能です。

6.7 セクション 6 のまとめ

_images/slide_06_040.png
  • Keras の概要を学んだ

    Keras を使って、様々なサンプルプログラムを 試す方法を習得しました。

  • 犬と猫を区別する機械学習プログラムの動作方法を学んだ

    Image classification from scratch を Google Colab で実行しました。

    機械学習を使って犬と猫の画像を識別してみました。 機械学習のプログラミングと、学習の回数などの設定方法を確認しました。 GPU を使った高速化を説明し、未学習の猫の画像を識別して、高い確率で猫 と識別されることを確認しました。

  • 文字認識のサンプルプログラムを学んだ

    Simple MNIST convert を Google Colab で実行しました。 機械学習による文字認識のプログラムを使い、認識を行い、認識率などを確認しました。