KerasとPythonで始めるディープラーニング入門ガイド

プログラミング
記事内に広告が含まれています。
スポンサーリンク

Kerasとは? – 概要と特徴

Kerasは、Pythonベースのディープラーニングフレームワークで、初心者から上級者まで幅広い層に利用されている高水準APIです。Kerasの最大の特徴は、そのシンプルさと柔軟性にあります。多くの機能が直感的に理解しやすく、わずか数行のコードで複雑なニューラルネットワークを構築できます。Kerasはもともと独立したライブラリとして開発されていましたが、現在ではTensorFlowに統合されており、TensorFlowの一部としても利用されています。

brian
brian

ディープラーニングに興味があるけど、どう始めたらいいか分からない…そんな方にぴったりのガイドを作りました!PythonとKerasを使って、ディープラーニングの基礎から丁寧に解説しています。初心者でも楽しみながら学べる内容なので、ぜひ気軽に読んでみてくださいね!

Kerasの特徴

  1. シンプルで使いやすいAPI
    Kerasはシンプルで直感的なAPIを提供しており、初心者でも手軽にディープラーニングモデルを構築できます。コードの可読性が高く、少ないコード量でモデルを定義できるため、プロトタイピングにも最適です。
  2. バックエンドの柔軟性
    Kerasは、もともとTensorFlow、Theano、Microsoft Cognitive Toolkit(CNTK)など、複数のバックエンドをサポートしていましたが、現在は主にTensorFlowが推奨されています。TensorFlowの強力な機能を活かしつつ、Kerasの高水準APIで簡単に操作が可能です。
  3. 多くのモデルタイプに対応
    Kerasは、ディープラーニングにおけるさまざまなモデル(CNN、RNN、DNNなど)を簡単に構築できるように設計されています。また、画像、テキスト、時系列データなど、さまざまなデータタイプに対応するため、幅広いアプリケーションに応用できます。
  4. 豊富なコミュニティとドキュメント
    Kerasには多くのユーザーがいるため、ネット上に多くの情報やチュートリアル、実装例が存在します。これにより、問題が発生した場合でも、解決策を見つけやすい環境が整っています。
  5. 高度なカスタマイズが可能
    初心者にとって使いやすい反面、上級者向けのカスタマイズも可能です。例えば、独自のレイヤーや損失関数を定義したり、モデルの構造を細かく調整したりすることもできます。
スポンサーリンク

Kerasでの基本的なモデル構築手順

Kerasでは、ディープラーニングモデルの構築がシンプルで直感的に行えるように設計されています。以下は、Kerasを使って基本的なニューラルネットワークモデルを構築するための流れです。

モデルの定義

Kerasでモデルを構築する際、主に2つのAPIを利用します。

  • Sequential API
    シンプルなモデル構築に適したAPIで、層を順番に積み重ねる構造(シーケンシャル)です。層が一列に並ぶ構造であれば、このAPIを使って容易にモデルを作成できます。
  • Functional API
    より複雑なネットワーク構造を構築するためのAPIです。複数の入力や出力、分岐するネットワーク(例:Residual Network、Attention Mechanismなど)などに対応しており、柔軟にモデルを定義できます。

層(レイヤー)の追加

ニューラルネットワークの各層(レイヤー)は、Kerasで「Layer」として定義されます。以下のようにして層を積み重ね、モデルに追加します。

Python
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense

# モデルの作成(Sequentialモデル)
model = Sequential()

# 入力層と1つ目の隠れ層
model.add(Dense(units=64, activation='relu', input_shape=(input_dim,)))

# 2つ目の隠れ層
model.add(Dense(units=64, activation='relu'))

# 出力層
model.add(Dense(units=output_dim, activation='softmax'))

モデルのコンパイル

モデルを定義した後、学習に必要な設定を行うため「コンパイル」をします。この段階で、損失関数や最適化アルゴリズム、評価指標(metrics)を指定します。

Python
model.compile(optimizer='adam',
              loss='categorical_crossentropy',
              metrics=['accuracy'])
  • optimizer(最適化アルゴリズム):学習を効率的に進めるためのアルゴリズム。例:adamsgdrmspropなど。
  • loss(損失関数):モデルの誤差を評価するための関数。分類問題の場合、categorical_crossentropybinary_crossentropyがよく使われます。
  • metrics(評価指標):モデルの性能を測定するための指標。例:accuracy(正解率)。

モデルの学習

学習データを用いてモデルをトレーニングします。このとき、fitメソッドを用います。

Python
model.fit(x_train, y_train, epochs=10, batch_size=32, validation_split=0.2)
  • epochs:学習データに対する反復回数。回数を増やすほどモデルはデータを学習しますが、多すぎると過学習のリスクがあります。
  • batch_size:データを分割して学習する単位。通常は16、32、64などが使用されます。
  • validation_split:データの一部を検証用に分け、学習中にモデルの性能を確認します。

モデルの評価

学習後、テストデータを使ってモデルの性能を確認します。評価には、evaluateメソッドを用います。

Python
test_loss, test_accuracy = model.evaluate(x_test, y_test)
print(f'Test Loss: {test_loss}, Test Accuracy: {test_accuracy}')
スポンサーリンク

Kerasでのニューラルネットワーク構築の例

ここでは、Kerasを使って多層パーセプトロン(MLP:Multi-Layer Perceptron)モデルを構築する方法を具体例で紹介します。このモデルは、基本的なニューラルネットワークの一種で、主に分類問題や回帰問題に用いられます。

以下の例では、手書き文字認識データセット「MNIST」を使用して、手書き数字(0~9)の分類を行います。MNISTデータセットには、28×28ピクセルのグレースケール画像が含まれており、それぞれ0から9までのラベルが付与されています。

手順1: ライブラリのインポートとデータの準備

Python
import numpy as np
from tensorflow.keras.datasets import mnist
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Flatten
from tensorflow.keras.utils import to_categorical

手順2: データの読み込みと前処理

まず、MNISTデータセットを読み込み、入力データとラベルデータを適切な形式に変換します。

Python
# データセットの読み込み
(x_train, y_train), (x_test, y_test) = mnist.load_data()

# ピクセル値の正規化(0~255から0~1へスケーリング)
x_train = x_train / 255.0
x_test = x_test / 255.0

# ラベルデータをOne-hotエンコード形式に変換
y_train = to_categorical(y_train, 10)
y_test = to_categorical(y_test, 10)

手順3: モデルの構築

Sequential APIを用いて、入力層、2つの隠れ層、出力層を持つ多層パーセプトロンを構築します。Flattenレイヤーで28×28の入力画像を1次元に変換し、Denseレイヤーで全結合層を追加しています。

Python
# モデルの定義
model = Sequential()

# 入力層:Flattenレイヤーで画像を1次元に変換
model.add(Flatten(input_shape=(28, 28)))

# 隠れ層:64ユニット、ReLU活性化関数
model.add(Dense(64, activation='relu'))

# 隠れ層:64ユニット、ReLU活性化関数
model.add(Dense(64, activation='relu'))

# 出力層:10ユニット(数字0〜9)、softmax活性化関数
model.add(Dense(10, activation='softmax'))

手順4: モデルのコンパイル

次に、損失関数、最適化アルゴリズム、評価指標を設定してモデルをコンパイルします。

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

手順5: モデルの学習

fitメソッドを用いて、トレーニングデータを使ってモデルを学習させます。学習時には、10エポックにわたって反復し、データの20%を検証用に分けてモデルの性能を監視します。

Python
history = model.fit(x_train, y_train, epochs=10, batch_size=32, validation_split=0.2)

手順6: モデルの評価

学習したモデルをテストデータで評価し、精度を確認します。

Python
test_loss, test_accuracy = model.evaluate(x_test, y_test)
print(f'Test Loss: {test_loss}, Test Accuracy: {test_accuracy}')

このコードにより、Kerasを用いた基本的な多層パーセプトロンの構築、学習、および評価が完了します。

スポンサーリンク

Kerasを使ったモデルのコンパイルと学習

Kerasでニューラルネットワークモデルを構築した後、学習を行う前に「コンパイル」を行う必要があります。コンパイルは、モデルがどのように学習するかを決定する重要なステップで、損失関数や最適化アルゴリズム、評価指標(メトリクス)を設定します。また、学習プロセスでは、データの分割やエポック数、バッチサイズなどのパラメータを指定し、最適なモデルを得るための設定を行います。

モデルのコンパイル

モデルをコンパイルする際には、以下の要素を指定します。

  • 損失関数(Loss Function)
    損失関数は、モデルの誤差を測定するための指標です。損失関数の値が小さいほど、モデルの予測精度が高いとされます。
    • 分類問題の場合:categorical_crossentropy(多クラス分類)、binary_crossentropy(2クラス分類)など。
    • 回帰問題の場合:mean_squared_error(平均二乗誤差)など。
  • 最適化アルゴリズム(Optimizer)
    最適化アルゴリズムは、損失関数を最小化するためのアルゴリズムです。最もよく使われるのが「Adam」で、他にも「SGD」や「RMSprop」などがあります。
    • adam: 学習率を自動調整し、効率的に学習を行います。
    • sgd(確率的勾配降下法): シンプルな最適化アルゴリズムで、学習率を指定して使用します。
  • 評価指標(Metrics)
    学習中や評価時のパフォーマンスを測定するための指標です。分類問題の場合にはaccuracy(精度)が一般的です。

コンパイル例

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

モデルの学習

コンパイル後、モデルの学習を行います。学習では、データの反復(エポック)、1回の更新に使用するデータの量(バッチサイズ)、データ分割などのパラメータが必要です。学習にはfitメソッドを使用します。

Python
history = model.fit(x_train, y_train, epochs=10, batch_size=32, validation_split=0.2)
  • epochs: モデルが訓練データ全体を何回繰り返し学習するかを指定します。一般的には10〜100エポックで設定されることが多く、設定はデータやモデルに応じて最適化されます。
  • batch_size: 一度に学習に使うデータの数です。通常16、32、64などの2の累乗で指定されます。バッチサイズが大きすぎるとメモリ不足を引き起こす場合があります。
  • validation_split: 訓練データのうち、指定した割合を検証用に分割します。検証データを使用することで、学習中にモデルがどの程度一般化されているかを確認できます。たとえば、validation_split=0.2と指定すると、20%が検証用に使用されます。

学習の結果を確認する

fitメソッドの戻り値であるhistoryには、学習中の損失と精度の変遷が記録されています。これを可視化することで、モデルの学習過程を評価できます。

Python
import matplotlib.pyplot as plt

# 精度のプロット
plt.plot(history.history['accuracy'], label='Train Accuracy')
plt.plot(history.history['val_accuracy'], label='Validation Accuracy')
plt.xlabel('Epochs')
plt.ylabel('Accuracy')
plt.legend()
plt.show()

# 損失のプロット
plt.plot(history.history['loss'], label='Train Loss')
plt.plot(history.history['val_loss'], label='Validation Loss')
plt.xlabel('Epochs')
plt.ylabel('Loss')
plt.legend()
plt.show()

学習過程で、トレーニングデータと検証データに対する精度や損失の変動を観察し、必要に応じてエポック数や学習率の調整を行うと、より良いモデルが得られます。

スポンサーリンク

Kerasを使ったモデルの評価と予測

Kerasでニューラルネットワークモデルの学習が完了した後、そのモデルの性能を評価し、実際に新しいデータを入力して予測を行います。モデルの評価は、テストデータに対する精度を測定する重要なステップです。また、予測は新しいデータに対してモデルがどのように応答するかを確認します。

モデルの評価

学習済みモデルを評価するには、テストデータを用います。テストデータはモデルの学習に一切使用されていないため、モデルの汎化性能(一般化能力)を測るのに適しています。

評価には、evaluateメソッドを使用します。このメソッドは、損失と指定したメトリクス(例:accuracy)を返します。

Python
# テストデータでモデルの性能を評価
test_loss, test_accuracy = model.evaluate(x_test, y_test)
print(f'Test Loss: {test_loss}, Test Accuracy: {test_accuracy}')
  • Test Loss: テストデータに対する損失値。損失が小さいほどモデルの予測が正確です。
  • Test Accuracy: テストデータに対する精度(classificationの場合)。精度が高いほどモデルが正確に分類していることを示します。

モデルによる予測

学習済みのモデルを用いて、新しいデータに対して予測を行うことができます。予測には、predictメソッドを使用します。このメソッドは、入力データに対してモデルが出力する確率を返します。

Python
# 予測の実行
predictions = model.predict(x_test)

# 最初のテストデータに対する予測結果を表示
print(predictions[0])

出力は、各クラスに属する確率のリストになります。分類問題であれば、この確率が最も高いクラスを予測結果として採用するのが一般的です。

予測結果のラベル化

予測結果をわかりやすくするため、argmaxを使って予測確率が最も高いクラスを選択します。

Python
import numpy as np

# 最も確率の高いクラスを選択
predicted_labels = np.argmax(predictions, axis=1)

# 最初のテストデータに対する予測ラベルと実際のラベル
print(f'Predicted Label: {predicted_labels[0]}, True Label: {np.argmax(y_test[0])}')

ここで、np.argmaxは、各サンプルについて最も高い確率を持つクラスのインデックスを返します。これにより、モデルがどのクラスを予測しているかをラベル形式で確認できます。

モデル評価結果の解釈

予測精度が高い場合は、そのままモデルを保存して利用することができます。一方、予測精度が低い場合は、次のような対策が考えられます。

  • モデルの再学習
    エポック数を増やす、学習率を調整する、あるいはデータを増やすことで、モデルがより深く学習できるようにする。
  • モデルの改善
    層の数やユニット数を増やす、正則化(ドロップアウトなど)を追加する、または異なるネットワークアーキテクチャを試してみる。
スポンサーリンク

モデルの保存と読み込み

モデルの学習や評価が完了したら、モデルを保存して再利用できるようにします。Kerasでは、学習済みモデルの保存と読み込みが簡単にできるため、モデルの再学習を避けて、必要なときにすぐに予測や評価が行えます。ここでは、モデルの保存と読み込み方法、またその際の注意点について解説します。

モデルの保存

Kerasでは、モデルの保存にmodel.saveメソッドを使用します。このメソッドを使うと、モデルの構造、重み、コンパイル時の設定を含むファイルとして保存できます。

Python
# モデルを保存
model.save('my_model.h5')

上記のコードでは、モデルをmy_model.h5というファイルとして保存しています。.h5は、HDF5形式というデータフォーマットの拡張子で、Kerasがモデルの情報を効率よく保存できる形式です。

保存時のポイント

  • ファイル名とパス
    ファイル名を明確にしておくと、後で複数のモデルを扱う際に便利です。ファイル名に日付やバージョン番号を入れておくと管理がしやすくなります。
  • エポック数やパラメータの記録
    モデル保存と同時に、学習時のエポック数やバッチサイズ、評価指標なども別途記録しておくと、再トレーニング時に役立ちます。

保存したモデルの読み込み

保存したモデルは、load_model関数を使用して簡単に読み込むことができます。この関数により、保存時の状態(構造、重み、設定)を復元し、そのまま使用することが可能です。

Python
from tensorflow.keras.models import load_model

# 保存したモデルを読み込み
loaded_model = load_model('my_model.h5')

読み込んだloaded_modelは、元のモデルと同じように利用できます。例えば、評価や予測を以下のように行うことができます。

Python
# テストデータで評価
test_loss, test_accuracy = loaded_model.evaluate(x_test, y_test)
print(f'Test Loss: {test_loss}, Test Accuracy: {test_accuracy}')

# 新しいデータに対する予測
predictions = loaded_model.predict(x_new)

モデルの構造のみ保存する場合

モデルの構造だけを保存したい場合は、model.to_json()を使用してJSON形式で保存できます。重みは含まれないため、再度利用する際には重みの読み込みが必要です。

Python
# モデルの構造をJSON形式で保存
model_json = model.to_json()
with open("model_structure.json", "w") as json_file:
    json_file.write(model_json)

# モデルの重みを保存
model.save_weights("model_weights.h5")

読み込む際には、モデルの構造を読み込んだ後、保存された重みを適用します。

Python
from tensorflow.keras.models import model_from_json

# モデルの構造を読み込む
with open("model_structure.json", "r") as json_file:
    loaded_model_json = json_file.read()
loaded_model = model_from_json(loaded_model_json)

# 重みを読み込む
loaded_model.load_weights("model_weights.h5")

TensorFlow SavedModel形式での保存

Kerasモデルは、TensorFlowのSavedModel形式でも保存可能です。この形式は、モデルを複数のプラットフォーム(TensorFlow ServingやTensorFlow Liteなど)で利用する場合に便利です。

Python
# TensorFlow SavedModel形式で保存
model.save("my_model_tf", save_format="tf")

この形式で保存したモデルもload_model関数を使って読み込めます。

保存と読み込みの際の注意点

  • 互換性
    TensorFlowやKerasのバージョンが異なる場合、特定の機能がサポートされないことがあります。異なる環境でモデルを利用する際は、バージョン互換性を確認しておきましょう。
  • カスタムオブジェクト
    カスタムレイヤーやカスタム損失関数などがある場合、モデル読み込み時にエラーが発生することがあります。この場合は、custom_objects引数でそれらを指定して読み込みます。

これで、モデルの保存と読み込みについての解説が完了です。以上が、Kerasを用いたディープラーニングモデルの構築から運用までの基本的な手順となります。

brian
brian

ここまで読んでいただきありがとうございます!

UdemyのPythonコースにはオンラインで学習ができる動画コンテンツがたくさんあります。

当ブログのような文章メインの説明では足りない箇所を補えると思うので、もっと詳しく勉強したいという方はぜひチェックしてみてください!

コメント

タイトルとURLをコピーしました