ディープラーニングを実務や個人開発で使い始めると、「モデルを自分で定義してみたい」と思う場面が必ず出てきます。そのとき最初に触れることが多いのが、TensorFlow/Kerasの「Sequential(シーケンシャル)モデル」です。
この記事では、keras Sequentialの考え方や基本構文から、MLP・CNNの“そのまま動くテンプレ”、compile〜fit〜evaluateまでの学習フロー、Functional APIとの違い、そしてよくあるエラーとデバッグのコツまでを一気通貫で整理します。読み終えるころには、「とりあえずこれを書けば動く」という土台を持ったうえで、自分のタスクに合わせてSequentialモデルを迷わず組めるようになるはずです。
📖この記事のポイント
- keras Sequentialは「レイヤーを順に積む」最もシンプルなモデル構築手法で、入門〜プロトタイプに最適!
- 最初のレイヤーに書くu0026lt;input_shapeu003eは「バッチ次元を除いた1サンプルの形」で、形状理解が最重要ポイント!
- MLP(表形式)とCNN(画像)の“そのまま動くテンプレ”を押さえれば、多くの基本タスクに即応できる!
- compile→fit→evaluateの学習フローをセットで理解すると、Sequentialモデルを実務レベルで扱えるようになる!
- 構造が複雑・分岐・複数入力/出力が必要になったら、SequentialではなくFunctional APIに移行する!
- shapeエラーやsummary未表示はinput_shapeや中間出力形状の確認で特定しやすく、デバッグの基本になる!
- たった2時間の無料セミナーで会社に依存しない働き方&AIスキルを身につけられる!
- 今すぐ申し込めば、すぐに月収10万円UPを目指すための超有料級の12大特典も無料でもらえる!
\ 累計受講者10万人突破 /
無料特典を今すぐ受け取るkeras Sequentialとは?基本の考え方と使いどころ
kerasのSequentialモデルは、レイヤーを順番に積み上げていく、最もシンプルなモデル定義方法です。機能としてはシンプルですが、表形式データのMLPから、小規模な画像分類用のCNNまで、かなり広い範囲をカバーできます。
特徴を整理すると、次のようになります。
- レイヤーが1本道で直線的につながる構造(途中で分岐したり、後ろの層にスキップ接続したりしない)
- 1入力・1出力のネットワークが基本で、構造をイメージしやすい
- 表形式データ(Tabular)、小さめの画像分類、シンプルな時系列など、入門〜プロトタイプ用途でとても扱いやすい
一方で、次のようなケースではSequentialだけでは表現しきれません。
- 入力が複数ある(例:画像+テキスト)
- 出力が複数ある(例:カテゴリ+回帰値の同時予測)
- ResNetのようにスキップ接続(残差接続)を入れたい
- 途中で分岐させて、異なる特徴量処理を並行して行いたい
- 同じレイヤーを複数の経路で共有したい
このような複雑な構造が必要になったときに登場するのがFunctional APIです。現場では、最初はkeras Sequentialでシンプルに組む → モデルが込み入ってきたらFunctionalに移行するという流れが王道になっています。
keras Sequentialの基本構文とinput_shapeの書き方
まずは、keras Sequentialの書き方と、最初のつまずきポイントになりやすい input_shape の考え方を整理します。
Sequential([…])でレイヤーをまとめて渡す書き方
import tensorflow as tf
model = tf.keras.Sequential([
tf.keras.layers.Dense(64, activation="relu", input_shape=(20,)),
tf.keras.layers.Dense(32, activation="relu"),
tf.keras.layers.Dense(1, activation="sigmoid"),
])短いモデルをサッと書きたいときに最も便利な書き方です。SequentialにPythonのリストを渡し、DenseやConv2Dなどのレイヤーを順番に並べるだけで、ネットワークが1本のパイプラインとして定義されます。
model.add()で1層ずつ積み上げる書き方
import tensorflow as tf
model = tf.keras.Sequential()
model.add(tf.keras.layers.Dense(64, activation="relu", input_shape=(20,)))
model.add(tf.keras.layers.Dense(32, activation="relu"))
model.add(tf.keras.layers.Dense(1, activation="sigmoid"))
こちらは、条件分岐をしながらレイヤーを追加したいときや、ループの中でレイヤーを増やしたいときに便利なスタイルです。ifの結果によってレイヤーを増減させるなど、少し柔軟な組み方をしたい中級者以上がよく使います。
input_shapeの意味とデータごとの書き方
keras Sequentialで非常に重要なのが、最初のレイヤーに指定する input_shapeです。これは、
「モデルに渡す1サンプルあたりの形状(バッチ次元を除いた形)」を表します。バッチサイズはKerasが内部で扱うので、(batch_size, 特徴量数)のような形を持つ入力データのうち、先頭のバッチ次元を除いた部分だけを書くと覚えておくとスムーズです。
| データの種類 | 入力データの形状の例 | input_shape の指定例 |
|---|---|---|
| 表形式データ(特徴量20個) | (バッチサイズ, 20) | (20,) |
| 28×28の白黒画像(1チャネル) | (バッチサイズ, 28, 28, 1) | (28, 28, 1) |
| 64×64のRGB画像(3チャネル) | (バッチサイズ, 64, 64, 3) | (64, 64, 3) |
| 時系列データ(タイムステップ100・特徴量3) | (バッチサイズ, 100, 3) | (100, 3) |
input_shapeを間違えると、後述する「shapeエラー」が頻発します。keras Sequentialを使うときは、まず自分の学習データの X_train.shape がどうなっているかを確認するクセをつけておくと安全です。
keras Sequentialで作る基本モデルテンプレ(MLP・CNN)
ここからは、keras Sequentialでよく使うモデルの“そのまま動くテンプレ”を2種類紹介します。実務でも頻出のパターンなので、自分のタスクに合わせてユニット数や層の数を調整すると、そのままベースラインになります。
表形式データ向け:MLP(多層パーセプトロン)テンプレ
import tensorflow as tf
# 特徴量が10個、2値分類を想定
model = tf.keras.Sequential([
tf.keras.layers.Dense(32, activation="relu", input_shape=(10,)),
tf.keras.layers.Dense(16, activation="relu"),
tf.keras.layers.Dense(1, activation="sigmoid"),
])ポイントは次の通りです。
- 最初のDenseにだけ
input_shape=(10,)を指定(特徴量が10個) - 中間層ではReLUを使うことが多い
- 2値分類なので、出力層の活性化は
sigmoid、出力ユニット数は1
小規模画像分類向け:CNNテンプレ(MNISTなど)
import tensorflow as tf
# 28×28の白黒画像(1チャネル)、クラス数10を想定
model = tf.keras.Sequential([
tf.keras.layers.Conv2D(32, (3, 3), activation="relu", input_shape=(28, 28, 1)),
tf.keras.layers.MaxPooling2D((2, 2)),
tf.keras.layers.Conv2D(64, (3, 3), activation="relu"),
tf.keras.layers.MaxPooling2D((2, 2)),
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(64, activation="relu"),
tf.keras.layers.Dense(10, activation="softmax"),
])ここでは、Conv2D → MaxPooling2Dを2回繰り返し、全結合層につなげる典型的な構成にしています。input_shape=(28, 28, 1) の「1」はチャンネル数(白黒画像)で、RGBなら(高さ, 幅, 3)になります。
keras Sequentialの学習フロー:compile・fit・evaluateまで
モデルを定義しただけでは学習は始まりません。keras Sequentialでは、通常次の流れで学習を行います。
# 1. モデルの定義(上で紹介したものを使用)
model = tf.keras.Sequential([
tf.keras.layers.Dense(32, activation="relu", input_shape=(10,)),
tf.keras.layers.Dense(16, activation="relu"),
tf.keras.layers.Dense(1, activation="sigmoid"),
])
# 2. コンパイル:損失関数や最適化手法を指定
model.compile(
optimizer="adam",
loss="binary_crossentropy",
metrics=["accuracy"],
)
# 3. 学習(fit)
history = model.fit(
X_train,
y_train,
batch_size=32,
epochs=10,
validation_split=0.2,
)
# 4. 評価(evaluate)
test_loss, test_acc = model.evaluate(X_test, y_test)
print("test accuracy:", test_acc)それぞれのステップの役割は次の通りです。
- compile:学習時に使う損失関数(
loss)や最適化アルゴリズム(optimizer)、評価指標(metrics)を指定する - fit:トレーニングデータ(
X_train, y_train)を使ってモデルのパラメータを更新する - evaluate:テストデータに対する損失・指標を計算し、汎化性能をざっくり確認する
まずは上記の「とりあえず動く」セットをベースにし、epochsやbatch_size、validation_splitなどを自分のデータ量に合わせて調整していくのがおすすめです。
keras SequentialとFunctional APIの違い・使い分け
TensorFlow/Kerasには複数のモデル構築方法がありますが、現場でよく使うのは「Sequential」と「Functional」の2つです。違いを“言葉”だけでなく、“コード”でも比較しておくと、切り替えタイミングが分かりやすくなります。
同じMLPをSequentialとFunctionalで書き比べる
先ほどのMLPを、まずはkeras Sequentialで書くと次の通りです。
# Sequential版
model = tf.keras.Sequential([
tf.keras.layers.Dense(32, activation="relu", input_shape=(10,)),
tf.keras.layers.Dense(16, activation="relu"),
tf.keras.layers.Dense(1, activation="sigmoid"),
])同じ構造をFunctional APIで書くとこうなります。
# Functional API版
inputs = tf.keras.Input(shape=(10,))
x = tf.keras.layers.Dense(32, activation="relu")(inputs)
x = tf.keras.layers.Dense(16, activation="relu")(x)
outputs = tf.keras.layers.Dense(1, activation="sigmoid")(x)
model = tf.keras.Model(inputs=inputs, outputs=outputs)この例だけを見ると、「どっちもあまり変わらない」と感じるかもしれません。ただしFunctionalでは、inputsや中間のxが明示的な“テンソル”になっており、途中で分岐させたり、別の経路と足し合わせたりできるのが大きな違いです。
Functional APIが必要になる代表的なパターン
- 複数入力:画像入力とテキスト入力を別々に処理し、最後に結合するようなケース
- 複数出力:1つの画像からクラスとバウンディングボックス座標の両方を予測するケース
- スキップ接続:ResNetのように、前の層の出力を後ろの層に足し合わせる構造を持つケース
- サブネットワークの再利用:同じ特徴抽出ネットワークを複数の入力に対して共有したいケース
目安としては、入力も出力も1つで、構造も一本道ならkeras Sequential、それ以外はFunctionalと覚えておけば、大きく迷うことはありません。
keras Sequentialでよくあるエラーとデバッグのコツ
keras Sequentialを使い始めたときに、多くの人がつまずくポイントをエラー別に整理します。エラーメッセージは英語ですが、原因パターンはだいたい決まっています。
「Sequential is not defined」などのNameError(importミス)
最も単純ですが、意外とよくあるのがインポート忘れです。TensorFlow経由でkeras Sequentialを使うので、次のようにインポートしておきます。
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras import layers
model = Sequential([
layers.Dense(32, activation="relu", input_shape=(10,)),
layers.Dense(1, activation="sigmoid"),
])どちらのスタイルでも構いませんが、記事やチュートリアルに合わせて統一しておくと、後で読み返しやすくなります。
shapeエラー(Input is incompatible with the layer)
ValueError: Input 0 of layer "dense" is incompatible with the layer ...最も頻出なのが、入力の形状がレイヤーの期待する形と合っていないというエラーです。原因と対処の代表パターンは次の通りです。
- input_shapeが間違っている
→print(X_train.shape)で実際の形状を確認し、バッチ次元を除いた部分をinput_shapeに指定する。 - Conv2Dに渡す画像のチャンネル順が違う
→ Kerasはデフォルト設定だと(高さ, 幅, チャンネル)を想定。(チャンネル, 高さ, 幅)になっていないか確認する。 - Flattenを挟み忘れている
→ Conv2DやMaxPooling2DのあとにDenseへ接続する場合は、tf.keras.layers.Flatten()を入れて、2次元+チャネルの特徴マップを1次元ベクトルに変換する。
形状関連のエラーが出たときは、X_train.shapeや、中間層の出力形状(model.summary()で確認可能)を一つずつ確認していくと、どこで次元が合っていないかが見えてきます。
model.summary()が表示されない/形状が“None”のまま
最初のレイヤーにinput_shapeが指定されていないと、モデルが「まだ入力形状を知らない」状態のままになり、model.summary()を呼び出しても期待した形状が表示されません。
- 最初のレイヤーに必ず
input_shapeを指定する - または、
model.build(input_shape=(None, 特徴量数))を明示的に呼ぶ
どちらかの方法でモデルに入力形状を教えてあげることで、summaryで各層の出力形状やパラメータ数を確認できるようになります。
よくある質問(FAQ)
- Q. input_shapeは必ず書かないといけませんか?
A. 最初のレイヤーには基本的に必要です。ここで1サンプルの形を教えておくことで、以降のレイヤーの形も自動的に推論されます。Functional APIではtf.keras.Input(shape=...)で同じ情報を渡しますが、どちらにしても「最初に入力形状を定義する」ことが重要です。 - Q. keras Sequentialで残差接続(skip connection)は作れますか?
A. 原則として難しいです。residualのように経路をまたいで足し合わせる構造は、途中で分岐・合流させる必要があるため、Functional APIを使う前提で設計するのがおすすめです。 - Q. Denseレイヤーは何層くらい入れるのが良いですか?
A. データセットやタスクによりますが、表形式データでは2〜3層程度から始めることが多いです。層を増やしすぎると、パラメータ数が増えて過学習しやすくなるので、まずは浅めのモデルで試し、必要に応じて少しずつ深くしていくのが安全です。 - Q. 最初はkeras SequentialとFunctionalのどちらから学ぶべきですか?
A. 多くの場合、Sequentialから始めるのが理解・実装ともにスムーズです。入出力が1つのシンプルなタスクをSequentialで経験してから、「複数入力が必要になった」「残差接続を入れたい」といったタイミングでFunctionalにステップアップすると、構造の違いも理解しやすくなります。 - Q. keras Sequentialで作ったモデルを、そのまま本番運用に使っても大丈夫ですか?
A. 構造がシンプルなタスクであれば問題ありません。実際、多くのWebサービスや業務システムで、Tabularデータ向けのモデルはSequentialで書かれています。ただし、モデルが複雑になってきた場合や、将来的な拡張を見据える場合は、早めにFunctional APIへ移行しておいた方が保守性は高くなります。
まとめ
- keras Sequentialは、レイヤーを順に積み重ねる最もシンプルなモデル構築方法で、入門〜プロトタイプに最適
- 最初のレイヤーの
input_shapeは「バッチ次元を除いた1サンプルの形」で、表・画像・時系列で書き方が変わる - MLPやCNNのテンプレに、compile・fit・evaluateの流れを組み合わせることで、そのまま実務でも使えるベースラインモデルになる
- 複数入力・複数出力・スキップ接続などが必要になったら、Functional APIへ切り替えるのがセオリー
- shapeエラーやsummaryが出ない問題は、
input_shapeと中間の出力形状を確認することで、原因特定がしやすくなる
keras Sequentialを一度きちんと押さえておくと、その先のFunctional APIやより高度なアーキテクチャの理解もスムーズになります。まずはこの記事のテンプレと学習フローをベースに、手元のデータで実際にモデルを動かしてみてください。試行錯誤を重ねるうちに、「このタスクならSequentialで十分」「ここから先はFunctionalで書こう」という感覚が自然と身についていきます。
romptn ai厳選のおすすめ無料AIセミナーでは、AIの勉強法に不安を感じている方に向けた内容でオンラインセミナーを開催しています。
AIを使った副業の始め方や、収入を得るまでのロードマップについて解説しているほか、受講者の方には、ここでしか手に入らないおすすめのプロンプト集などの特典もプレゼント中です。
AIについて効率的に学ぶ方法や、業務での活用に関心がある方は、ぜひご参加ください。
\累計受講者10万人突破/




