はじめに
Keras にはモデルを定義するための大きく分けて2つのスタイルがあり、
それぞれ用途や表現力に特徴があります。以下で順番に解説します。
1. Sequential API
概要
-
tf.keras.Sequential
クラスを使い、層(Layer)を上から下へ積み重ねるだけでモデルを定義できるシンプルな方法。 - 入力から出力への流れが一直線で、ブランチ(分岐)やスキップ接続が不要な場合に最適。
特長
- 簡潔:コード量が少なく、初心者にも分かりやすい。
- 直感的:ネットワーク構造がそのまま層のリストとして表現される。
-
制限あり:
- 単一の入力・単一の出力 のみ対応。
- 層の間で分岐や複数の並列パスを作れない。
使い方の例
import tensorflow as tf
model = tf.keras.Sequential([
tf.keras.layers.Dense(64, activation='relu', input_shape=(32,)), # 入力層
tf.keras.layers.Dense(64, activation='relu'), # 隠れ層
tf.keras.layers.Dense(10, activation='softmax') # 出力層
])
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
-
input_shape
は最初の層でのみ指定。 - 以降は自動的に前層の出力形状を引き継ぐ。
2. Functional API
概要
- 関数型(Functional)スタイルでテンソルどうしの演算としてモデル構造を定義していく方法。
- 入出力のテンソルを直接結びつけることで、複雑な分岐や並列パス、複数入力・複数出力モデルが自在に構築できる。
特長
-
高い柔軟性:
- 異なる層を分岐させてマージしたり、残差接続(ResNet のようなスキップ)を組み込んだり、グラフ構造を自由に設計可能。
- 複数の入力・複数の出力 に対応。
- 再利用性:同じ層オブジェクトを複数の場所で使い回せる。
- 可読性:構造がテンソルの流れとして明示的に書けるので、大規模モデルでも把握しやすい。
使い方の例:並列経路とマージ
import tensorflow as tf
# 入力テンソルを宣言
input_tensor = tf.keras.Input(shape=(32,))
# 分岐パスA
x1 = tf.keras.layers.Dense(64, activation='relu')(input_tensor)
x1 = tf.keras.layers.Dense(64, activation='relu')(x1)
# 分岐パスB
x2 = tf.keras.layers.Dense(32, activation='relu')(input_tensor)
x2 = tf.keras.layers.Dense(32, activation='relu')(x2)
# 分岐を結合(マージ)
merged = tf.keras.layers.concatenate([x1, x2])
# 結合後の出力層
output_tensor = tf.keras.layers.Dense(10, activation='softmax')(merged)
# モデルを定義
model = tf.keras.Model(inputs=input_tensor, outputs=output_tensor)
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
-
tf.keras.Input
で入力形状を持つテンソルを作成。 - 各層を「関数呼び出し」のようにチェーンしていき、最終的に
Model(inputs=…, outputs=…)
で組み立てる。
どちらを使うべき?
特徴 | Sequential API | Functional API |
---|---|---|
モデル構造 | 単純な直線的ネットワーク | 分岐・並列・スキップなど自由 |
入力/出力数 | 単一 | 複数可 |
コードの簡潔さ | ◎ | ○ |
拡張性・再利用性 | △ | ◎ |
初心者向け | ◎ | ○ |
- まずは Sequential でシンプルなモデルを素早く試したい → Sequential API
- 複雑なアーキテクチャ(ResNet, Inception, マルチタスク学習 など)を組みたい → Functional API
まとめ
-
Sequential API
- 層をリストとして積み重ねるだけの簡単な書き方
- 単一入力・単一出力のネットワーク向き
-
Functional API
- テンソル同士の演算でモデルを“グラフ”として柔軟に定義
- 分岐・並列・複数入出力・スキップ接続など自由度が高い
用途に応じて使い分けることで、Keras の魅力である「シンプルかつパワフル」な深層学習開発が実現できます。