公開:

Kerasとは?意味をわかりやすく簡単に解説

text: XEXEQ編集部


Kerasとは

Kerasは、機械学習やディープラーニングのモデル開発を効率化するために作られたPythonのライブラリです。TensorFlowやTheanoなどのバックエンドを利用して、シンプルで直感的なAPIを提供しています。

KerasはGoogleのエンジニアであるFrançois Cholletによって開発され、2015年にオープンソースとしてリリースされました。現在では、TensorFlow 2.0に正式に統合され、TensorFlowの高水準APIとして提供されています。

Kerasの特徴は、モデルの定義や学習、評価などの一連の処理を簡潔なコードで記述できる点です。また、事前に学習済みのモデルを利用したり、独自のレイヤーやモデルを作成したりすることも可能です。

Kerasは、シーケンシャルモデルとファンクショナルAPIという2種類のモデル構築方法を提供しています。シーケンシャルモデルは単純な層の積み重ねで構成されるモデルに適しており、ファンクショナルAPIはより柔軟で複雑なモデルの構築に適しています。

KerasはGPUにも対応しており、大規模なデータセットを用いた高速な学習が可能です。また、コールバック機能を利用することで、学習の進捗状況の監視や、早期打ち切り、モデルの自動保存などを実現できます。

Kerasを使ったニューラルネットワークの構築

Kerasを使ったニューラルネットワークの構築に関して、以下3つを簡単に解説していきます。

  • Kerasにおけるシーケンシャルモデルの構築方法
  • Kerasを用いたファンクショナルAPIによるモデル構築
  • Kerasによる事前学習済みモデルの利用方法

Kerasにおけるシーケンシャルモデルの構築方法

Kerasのシーケンシャルモデルは、層を順番に積み重ねていくことでニューラルネットワークを構築します。まず、Sequential()でモデルのインスタンスを作成し、add()メソッドで層を追加していきます。

各層には、ニューロンの数やアクティベーション関数などのパラメータを指定します。最後に、compile()メソッドでモデルをコンパイルし、損失関数や最適化アルゴリズムを設定します。

以下は、Kerasを用いたシーケンシャルモデルの構築例です。

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

model = Sequential([
    Dense(64, activation='relu', input_shape=(784,)),
    Dense(10, activation='softmax')
])

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

Kerasを用いたファンクショナルAPIによるモデル構築

KerasのファンクショナルAPIは、より柔軟で複雑なモデルの構築を可能にします。入力テンソルと出力テンソルを明示的に定義し、それらを層で結合することでモデルを構築します。

ファンクショナルAPIでは、複数の入力や出力を持つモデルや、層の共有、残差接続などの高度なアーキテクチャを実現できます。また、Model()クラスを使ってモデルをインスタンス化します。

以下は、KerasのファンクショナルAPIを用いたモデル構築の例です。

from tensorflow.keras.models import Model
from tensorflow.keras.layers import Input, Dense

inputs = Input(shape=(784,))
x = Dense(64, activation='relu')(inputs)
outputs = Dense(10, activation='softmax')(x)

model = Model(inputs=inputs, outputs=outputs)

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

Kerasによる事前学習済みモデルの利用方法

Kerasでは、事前に学習済みのモデルを利用することで、転移学習や特徴抽出などを容易に行えます。Kerasは、VGG16やInception、ResNetなどの有名なモデルをkeras.applicationsモジュールで提供しています。

事前学習済みモデルを利用する際は、weightsパラメータに'imagenet'を指定することで、ImageNetで学習済みの重みを読み込むことができます。また、include_topパラメータをFalseに設定することで、出力層を除いたモデルを取得できます。

以下は、Kerasを用いてVGG16の事前学習済みモデルを利用する例です。

from tensorflow.keras.applications import VGG16

model = VGG16(weights='imagenet', include_top=False, input_shape=(224, 224, 3))

for layer in model.layers:
    layer.trainable = False

x = model.output
x = GlobalAveragePooling2D()(x)
x = Dense(1024, activation='relu')(x)
predictions = Dense(num_classes, activation='softmax')(x)

model = Model(inputs=model.input, outputs=predictions)

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

Kerasによるデータの前処理とデータ拡張

Kerasによるデータの前処理とデータ拡張に関して、以下3つを簡単に解説していきます。

  • Kerasを用いたデータの正規化と標準化
  • Kerasにおけるデータ拡張の手法と利用方法
  • KerasのImageDataGeneratorを用いた画像データの前処理

Kerasを用いたデータの正規化と標準化

Kerasでは、データの前処理として正規化や標準化を行うことができます。正規化は、データを0から1の範囲に収めることで、ニューラルネットワークの学習を安定させます。一方、標準化は、データの平均を0、分散を1にすることで、学習を高速化します。

Kerasでは、keras.layers.normalizationモジュールのBatchNormalization層を使用することで、バッチ正規化を適用できます。また、keras.utils.normalize関数を使用して、データの正規化を行うこともできます。

以下は、Kerasを用いてデータの標準化を行う例です。

from tensorflow.keras.datasets import mnist
from tensorflow.keras.utils import normalize

(x_train, y_train), (x_test, y_test) = mnist.load_data()

x_train = normalize(x_train, axis=1)
x_test = normalize(x_test, axis=1)

Kerasにおけるデータ拡張の手法と利用方法

Kerasでは、データ拡張を用いることで、学習データの量を増やし、モデルの汎化性能を向上させることができます。データ拡張には、回転、反転、シフト、拡大縮小などの手法があります。

Kerasでは、keras.preprocessing.imageモジュールのImageDataGeneratorクラスを使用して、画像データの拡張を行えます。ImageDataGeneratorクラスには、回転角度や拡大縮小の範囲などのパラメータを指定できます。

以下は、Kerasを用いて画像データの拡張を行う例です。

from tensorflow.keras.preprocessing.image import ImageDataGenerator

datagen = ImageDataGenerator(
    rotation_range=20,
    width_shift_range=0.2,
    height_shift_range=0.2,
    horizontal_flip=True)

datagen.fit(x_train)

model.fit(datagen.flow(x_train, y_train, batch_size=32),
          steps_per_epoch=len(x_train) / 32,
          epochs=10,
          validation_data=(x_test, y_test))

KerasのImageDataGeneratorを用いた画像データの前処理

KerasのImageDataGeneratorは、画像データの前処理にも利用できます。画像のサイズ変更や、色空間の変換、正規化などを行うことができます。

ImageDataGeneratorを使用する際は、flow_from_directory()メソッドを用いて、ディレクトリ内の画像を自動的に読み込むことができます。また、target_sizeパラメータでリサイズ後の画像サイズを指定し、color_modeパラメータでカラーモードを設定できます。

以下は、KerasのImageDataGeneratorを用いて画像データの前処理を行う例です。

from tensorflow.keras.preprocessing.image import ImageDataGenerator

train_datagen = ImageDataGenerator(
    rescale=1./255,
    shear_range=0.2,
    zoom_range=0.2,
    horizontal_flip=True)

train_generator = train_datagen.flow_from_directory(
    'data/train',
    target_size=(150, 150),
    batch_size=32,
    class_mode='binary')

model.fit(
    train_generator,
    steps_per_epoch=2000,
    epochs=50,
    validation_data=validation_generator,
    validation_steps=800)

参考サイト

  1. Google. https://blog.google/intl/ja-jp/

※上記コンテンツはAIで確認しておりますが、間違い等ある場合はコメントよりご連絡いただけますと幸いです。

「コンピュータ」に関するコラム一覧「コンピュータ」に関するニュース一覧
ブログに戻る

コメントを残す

コメントは公開前に承認される必要があることにご注意ください。