---
title: #80 モデルのコンパイル、トレーニング、評価
tags: 
author: [猫のタロー](https://docswell.com/user/Cat_Taro)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/K74ZR89RE1.jpg?width=480
description: 本スライドは、ディープラーニングの基本構造と、Kerasを用いたモデルのコンパイル・トレーニング（学習）・評価の手順を解説したものです。     ディープラーニングの仕組み：入力・重み・バイアス・活性化関数からなる「ノード（人工ニューロン）」で計算を行います。学習時は予測誤差を入力側へ逆伝播させてパラメータを更新する「バックプロパゲーション」を利用します。     コンパイル（model.compile）：最適化手法（Adam）、損失関数（SparseCategoricalCrossentropy）、評価指標（Accuracy）を指定し、学習のルールを設定します。     トレーニング（model.fit）：指定回数（エポック数）のループで予測・採点・パラメータ更新を繰り返し、正答率を上昇させます。     評価（model.evaluate）：未学習のテストデータで正解率を検証します。テスト時の正解率が訓練時より低下する現象（過学習）についても解説しています。
published: October 31, 26
canonical: https://docswell.com/s/Cat_Taro/5276WV-2026-10-31-185238
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/K74ZR89RE1.jpg)

5th STEP ディープラーニング
Section 6
モデルのコンパイル、トレーニング、評価
データサイエンス チュートリアル
1


# Page. 2

![Page Image](https://bcdn.docswell.com/page/LJ1RQ2KVJG.jpg)

ディープラーニングのしくみ (1)
さて、ここで、ディープラーニングのしくみについて、理解しておきましょう。
複数の隠れ層（中間層）を持つニューラルネットワーク、すなわちディープラーニングは、神経細胞をモデルにシステム上で
動くように設計されたものです。神経細胞のニューロンに対応した人工ニューロンをノードと呼びます。図1では、〇で表されて
いるところです。
このノードを拡大すると、図2のようになります。入力、入力の数、重み、バイアス、活性化関数、出力によって表されます。
図2
▲ 図1
データサイエンス チュートリアル
2


# Page. 3

![Page Image](https://bcdn.docswell.com/page/GJW1MRD3E2.jpg)

ディープラーニングのしくみ (2)
重み
入力情報の重要度を決定する倍率（係数）です。
トレーニング前はランダムな初期値ですが、model.fit() によって最適な値に書き換えられていきます。
バイアス
ノードの感度・発火のしやすさを調整する閾値（定数）です。
重みと入力の積の総和に対して、ノード1個に対して1個の定数値として足し算されます。重みと同様にトレーニングによって
自動更新されます。
活性化関数
生物学的なニューロンにおける「一定以上の刺激を受けると発火する」動作を再現するスイッチの役割を担っています。
この関数を用いて出力を算出するのですが、ニューラルネットワークや
ディープラーニングでは、この関数を用いることにより単なる一次関数
ではなく、複雑な曲線や境界線（非線形なパターン）を学習する
表現力を獲得することになります。
出力
ノードの最終計算結果、すなわち次の層への入力値となります。
「会議の発言がどう伝わるか」で考えるたとえ話が秀逸です！
【参考】 AI がざっくりわかる https://note.com/nice_sable4056/n/nd989bea2c114
データサイエンス チュートリアル
3


# Page. 4

![Page Image](https://bcdn.docswell.com/page/4EZPQRGGJ3.jpg)

ディープラーニングのしくみ (3)
ノードを構成している入力、入力の数、重み、バイアス、活性化関数を用いると出力は一つの数式で表すことができます。
すなわち、計算可能になります。
では、ここで出力を求める計算式を考えてみましょう。
① 刺激の総和uは、ノードに入力されたx1からxｎの信号が、下記のような式で表すように設計されています。
𝒏
入力:x、重み:w、入力の数:n、バイアス:b とすると、
𝒖 = ෍ 𝒙 𝒌𝒘 𝒌 + 𝒃
となります。
𝒌=𝟏
② 出力は、活性化関数を f とすれば 、 𝒚 = 𝒇 𝒖
と表されますから、下記の式で表すことができます。
𝒏
𝒚=𝒇 𝒖 =𝒇
෍ 𝒙𝒌𝒘𝒌 + 𝒃)
𝒌=𝟏
データサイエンス チュートリアル
4


# Page. 5

![Page Image](https://bcdn.docswell.com/page/Y76M6RYQEV.jpg)

ディープラーニングのしくみ (4)
ニューラルネットワークやディープラーニングでは、前のスライドの式によって各ノードの出力を行いますが、結果に対して、重み付
けやバイアスをチューニングして性能を向上させていくのが、バックプロパゲーション（Backpropagation／誤差逆伝播法）
です。予測の誤差を、出力側から入力側へと「逆方向」に伝えていき、各層のパラメーター（重み、バイアス）をどれくらい修
正すべきかを計算する機能ということができます。
ニューラルネットワークやディープラーニングのトレーニングでは、このバックプロパゲーションを使います。
データサイエンス チュートリアル
5


# Page. 6

![Page Image](https://bcdn.docswell.com/page/G75Z68G2J4.jpg)

model.compile()関数 (1)
モデルのトレーニングを行う前に、モデルのコンパイルを行います。
これは、作成したモデルに、トレーニングを進める方法や評価基準をどうするかというルールを設定して、モデルのトレーニング
の準備することを意味します。
具体的には、model.compile()関数に次の3つの引数を指定します。
●オプティマイザ optimizer
●損失関数 loss
●評価指標 metrics
公式チュートリアルでは、下記のように引数を指定しています。
model.compile(optimizer=&#039;adam‘,
loss=keras.losses.SparseCategoricalCrossentropy(from_logits=True),
metrics=[&#039;accuracy’])
コンパイルを行わずに model.fit() を呼び出すと、「どうやって採点すればいいの？どうやって重みを直せばいいの？」とAIが
パニックを起こしてエラーになってしまいます。
データサイエンス チュートリアル
6


# Page. 7

![Page Image](https://bcdn.docswell.com/page/9J2RMKY17R.jpg)

model.compile()関数 (2)
●オプティマイザ optimizer
→ 予測を外したときに、『重み』や『バイアス』をどのように調整・更新するかという計算アルゴリズムを指定します。
→ adam（Adaptive Moment Estimation）というアルゴリズムが指定されていますが、AI開発において、現在、
ほとんどの場面で optimizer=‘adam’ が標準となっています。他のアルゴリズムに関しては、下記を参照してください。
【参照】 機械学習のAdamやRMSPropなどの最適化手法まとめ：効率的なモデル構築の秘訣
●損失関数 loss
→ これは、AIが出した予測と実際の正解を比べて、どれくらい間違えているか（誤差）を計算するルールを設定しています。
→ 『keras.losses.』の部分はKerasが提供する損失関数のモジュールから呼び出す指示を表し、
『SparseCategoricalCrossentropy( ) 』の部分は、使用する具体的な損失関数の名前と詳細設定を指示してい
ます。SparseCategoricalCrossentropyとは、多クラス分類問題を解決するために一般的に使われる損失関数
で、(from_logits=True)はモデルの出力はロジット（生データ）であることを指定しています。
●評価指標 metrics
→ トレーニングの評価指標を指定しています。
→ 『=[‘accuracy’]』は、予測と、正解ラベルを全データ分比較して、正解した割合を算出して保持します。
データサイエンス チュートリアル
7


# Page. 8

![Page Image](https://bcdn.docswell.com/page/DEYDXNG4EM.jpg)

モデルのトレーニング (1)
モデルのトレーニングの準備、すなわちコンパイルを行った後に、model.fit関数を使って、モデルをトレーニングしていきます。
他の機械学習と同様に、実際のデータを読み込ませて、教師あり学習を実行していきます。
model.fit関数は、モデルのコンパイルに従って、 設定した回数（引数epochs=数字）だけ、以下のループを繰り返す
指示をしています。
１．予測してみる（順伝播 / Forward Pass）
→現在の重みとバイアスを使って、画像を読み込み「これはスニーカーかな？」と予測を出します。
２．採点する（損失の計算）
→ 『model.compile関数』で指定した損失関数を使って、正解ラベルとの「ズレの大きさ」を採点します。
３．間違えた原因を後ろから辿る（バックプロパゲーション）
→ 「どのノードの重みやバイアスが原因で予測を外したのか？」を、出力層から入力層に向かって逆向きに微分の計算を
して突き止めます。
４．重みとバイアスを書き換える（パラメータの更新）
→『model.compile関数』で指定したオプティマイザ（adam）が、誤差が減る方向へ重みとバイアスをほんの少しだけ
修正します。
データサイエンス チュートリアル
8


# Page. 9

![Page Image](https://bcdn.docswell.com/page/VJN61XG6J8.jpg)

モデルのトレーニング (2)
model.fit関数の主な引数は下記のとおりです。
model.fit(入力データ名1,入力データの正解ラベル1, epochs=整数）
ここで、『epochs=整数』は、訓練データ全体を何回くり返して学習するかを指定するハイパーパラメータ（設定値）です。
今回は、10回に設定しました。
model.fit(train_images, train_labels, epochs=10)
データサイエンス チュートリアル
9


# Page. 10

![Page Image](https://bcdn.docswell.com/page/YE9L58WR73.jpg)

モデルのトレーニング (3)
の結果は下記のようになります。
内の『accuracy
（正答率）』がトレーニングを
繰り返すことによって、徐々に
上昇していることがわかります。
データサイエンス チュートリアル
10


# Page. 11

![Page Image](https://bcdn.docswell.com/page/GE8XY8NGJD.jpg)

【参考】 Google Colaboratoryのハードウエア アクセラレーター
モデルのトレーニングには、多くの時間がかかります。
Google Colaboratoryの設定を下記のように変更して
おくことをお勧めします。
編集→ノートブックの設定→ハードウエア アクセラレーター
で、デフォルトの『CPU』を無料版でも利用可能な
『T4 GPU』に変更しておきましょう。
ハードウエア アクセラレーターとは、コラボの頭脳である
「CPU」の代わりに、特定の処理を専門的に超高速で肩
代わり（加速）してくれる専用のハードウェア（チップや集
積回路）のことです。
データサイエンス チュートリアル
11


# Page. 12

![Page Image](https://bcdn.docswell.com/page/LEL84RPX7R.jpg)

正解率を評価する (1)
次に、トレーニングされたモデルが検証用のテストデータセットでどのように機能するか、正解率を評価します。
①
②
① 計算結果として『test_loss』、『test_acc』2つの数値を返す指示をしているコードです。
test_loss（損失/誤差）：正解データとモデルの予測結果のズレの大きさを示します（数値が小さいほど優秀）。
test_acc（正解率 / Accuracy）：モデルが正確に分類できた画像の割合を示します（1.0が100%）。
model.evaluate(...)：学習済みのモデルに『まだ見せていないテスト用データ』を投入し、どのくらい正確に予測できる
かを計算する関数です。
test_images、test_labels：評価に使用する画像のデータセットとその正解ラベルです。
verbose=2→評価処理の実行ログ（進捗状況）をどのように表示するかを指定する引数です。『2』 は「エポックごとに1
行のログを出力する」という標準的な表示モードです（0 は非表示、1 はプログレスバー表示）。
② 評価結果である正解率（test_acc）を画面に表示します。¥n は改行を意味しており、ログの表示と被らないように見
やすく整えています。
データサイエンス チュートリアル
12


# Page. 13

![Page Image](https://bcdn.docswell.com/page/4JM6KR43EW.jpg)

正解率を評価する (2)
結果は、下記のようになりました。
313/313→処理したバッチ（データのまとまり）の数です。このチュートリアルでは、10,000枚のテスト画像を32枚ごとの
グループ（バッチ）に分けて処理します（10000/32≒313）。すべての処理が完了したことを示しています。
2s - 5ms/step→評価にかかった時間です。全体で2秒かかり、1ステップ（1バッチ）あたり約5ミリ秒で処理されました。
accuracy: 0.8800→テストデータに対する正解率（Accuracy）です。小数点表示なので、88.00% の割合で正し
い画像を予測できたことを示します。
loss: 0.3475→損失値（Loss）です。モデルの予測と実際の正解との「誤差の大きさ」を表しており、数値が小さけれ
ば小さいほど優秀です。
Test accuracy→0.88 ではなく末尾に細かい数字が並んでいるのは、コンピュータ（浮動小数点数）内部の計算誤差
によるもので、意味としては 約88.0%（約8,800枚を正解）と同じです。
データサイエンス チュートリアル
13


# Page. 14

![Page Image](https://bcdn.docswell.com/page/PJRPXRWRE9.jpg)

正解率を評価する (3)
テスト用データセットでの正解率は、トレーニング用データセットでの正解率よりも少し低くなります。
（※ 正解率は、若干異なっている場合があります）
このトレーニング時の正解率とテスト時の正解率の差は、過学習の一例です。
過学習とは、新しいデータに対する機械学習モデルの性能が、トレーニング時と比較して低下する現象です。過学習モデル
は、トレーニングデータセットのノイズと詳細を「記憶」するため、新しいデータでのモデルのパフォーマンスに悪影響を及ぼします。
データサイエンス チュートリアル
14


