🐘

【図解】kerasでモデルを作成する

2022/09/05に公開

はじめに

Keras を使って、ディープラーニングのモデルを作成してみましょう。

■ 対象者

機械学習に関する用語をある程度知っている方を対象としています。
具体的には、次のような基本用語がなんとなくイメージできるなら OK です。

  • ニューラルネットワーク
  • 入力層、中間層、出力層
  • 重み、バイアス
  • 順伝搬

補足:DeepLearning の基礎を知りたい方はこちらからどうぞ ↓
https://zenn.dev/nekoallergy/books/904df952389317

■ この記事で分かること

  • Keras でモデルを作る方法
  • モデルに層を追加する方法
  • モデルや重みの詳細を確認する方法

ここまでできれば、ひとまず基本的なモデルは作れるようになるでしょう。

■ モデル作成の方法 2 つ

Keras でモデルを作成するには2つの方法があります。

  1. Sequential モデル(tf.keras.Sequential)で作成する方法 
    ⇒ 割と簡単なモデルを作るとき
  2. FunctionalAPI(tf.keras.Model)で作成する方法 
    ⇒ 複雑なモデルを作るとき

簡単なモデルを作りたい場合、どちらを使っても同様のモデルを作成することができます。構造が複雑なモデルを作る場合は、FunctionalAPI を使う必要があります。

とりあえず、はじめての方は Sequential モデルの方がより理解しやすいと思います。今回は、Sequential を使ってモデルを作成する手順を解説します。

■ モデル作成の流れ

  1. モデルの枠組みを作成
  2. モデルに層を追加していく
  3. モデルの詳細を表示してみる

この流れで作っていきます。


Created by NekoAllergy

0. 必要なライブラリの読み込み

ライブラリを読み込んでおきます。

# 必要なライブラリの読み込み
import numpy as np
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers

1. モデルの枠組みを作成

モデル作成
# モデルを作成
model = keras.Sequential(name="my_model")

上記のコードで、モデルの枠組みを作ることができます。このとき、引数nameにモデルの名前を付けることで、あとで管理がしやすくなります。
最終的には、modelというインスタンスが生成されます。これがモデルの本体です。こいつに対して、「層を追加しろ」とか「学習しろ」とか「結果を見せろ」とかの指示を出すことで、AI を作っていきます。

# modelを確認
print(model)
出力
<keras.engine.sequential.Sequential object at 0x00000220E23221F0>

print(model)で表示すると、インスタンスが作られていることが分かります。

ただ、これだけではまだモデルの枠を作っただけです。中身は空っぽです。このmodelに層を追加していきます。

2. モデルに層を追加していく

層追加
# addメソッドで層を追加
model.add(layers.Dense(units=10, input_shape=(5,)))
model.add(layers.Dense(units=10))

上記のコードで、modelに層を追加できます。層を追加するときは、addメソッドを使います。model.add()と書くことで、さっき作った空っぽのモデルに、層を追加することができます。

この時、addメソッドの引数として渡すのは、レイヤーの情報です。ニューラルネットワークでは、様々な種類の層を重ねていくことで、モデルを作り上げていきます。Keras でも多種なレイヤーが用意されていて、それらを組み合わせていきます。レイヤーはkeras.layersに含まれています。次のような層をよく使用します。

  • Dense : 全結合層
  • Conv2D : 畳み込み層
  • MaxPooling2D : プーリング層
  • Dropout : ドロップアウト層
  • Flatten : データの変形(1 次元に変形)
  • Reshape : データの変形(指定した次元に変形)

今回のプログラムでは、全結合のDenseレイヤーを使いました。

1 行目は 1 層目です。units=10で指定しているのは、ニューロン数(ユニット数)です。また、入力層なので、入力されるデータの形状を指定する必要があります。これは入力層のみ必要な処理です。input_shape=(5, )により、入力されるデータは 5 つの数値ということを指定できました。5 つの数値が 10 ニューロンに全結合されているイメージです。

2 行目は 2 層目です。1 層目と同じように 10 ニューロンを指定しました。つまり、1 層目の 10 ニューロンと 2 層目の 10 ニューロンが全結合しているイメージです。今回はこの層が最後の層なので、出力されるデータの大きさは10という事が分かります。

以上のたった 2 行により、モデルに層を追加することができました。
このモデルは、「入力された 5 個の数値をもとに計算し、10 個の数値を出力する」という変換器です。

3. モデルの詳細を確認してみる

作ったmodelの構造を確認してみましょう。

よく使う確認方法は 4 つあります。

  • model.summary()メソッド
  • model.layers属性
  • model.weights属性
  • model.output_shape属性


.
.
.


続きの内容は本にまとめてあります。手に取って頂けるととても喜びます ↓
https://zenn.dev/nekoallergy/books/deeplearning-advanced

人工知能/AI/機械学習をもっと詳しく

ねこアレルギーのAI

ねこアレルギーの AI
YouTube で機械学習について発信しています。お時間ある方は覗いていただけると喜びます。



Created by NekoAllergy

Discussion