DEEP LEARNING / LESSON 08

データを小分けにして学ぶ

DatasetとDataLoaderを使い、データを少しずつ取り出して学習へ渡そう。

図から学ぶ
データを小分けにして学ぶを表すキャラクターと学習内容のイラスト
TODAY'S GOAL

この回でつかむこと

1件・1バッチ・1エポックの違いを言える。

ことばの窓
01 / SEE THE IDEA

データを小分けにして学ぶって何だろう?

Datasetは入力と正解の組を1件ずつ扱い、DataLoaderは指定したバッチサイズで取り出します。全データを一通り見たら1エポックです。

あおい

全部いっぺんに運ぶと、ROBORONの腕がいっぱい!

AI先生

いい例えだね。小分けの箱を順番に運ぶのがミニバッチなんだよ。

はる

1回の更新で使う件数がバッチサイズですね。

10件なら4・4・2に分かれる。1バッチは最大4件。最後の2件も使う。3バッチで全件を一巡。
図8 10件なら4・4・2に分かれる。1バッチは最大4件。最後の2件も使う。3バッチで全件を一巡。

あおい 最後の2件もちゃんと入ってる! 置き忘れずにすんだね。

図を読むと

10件を4件ずつなら、4・4・2件の3バッチになる。 Datasetは入力と正解の組を1件ずつ扱い、DataLoaderは指定したバッチサイズで取り出します。全データを一通り見たら1エポックです。

小さなコードで確かめるまず結果を予想しよう
import torch
from torch.utils.data import TensorDataset,DataLoader
x = torch.arange(10).float().unsqueeze(1)
y = x*2
loader = DataLoader(TensorDataset(x,y),batch_size=4,shuffle=False)
print([len(a) for a,b in loader])
実行結果[4, 4, 2]

なぜそうなる? 最後の2件も落とさずに使う設定です。

02 / GO ONE STEP FURTHER

順番を混ぜる理由

学習用では順番を混ぜることがあります。ただし、時系列予測では窓の作り方や分割順を先に考えます。

print(len(loader.dataset))
print(len(loader))
実行結果10 と 3

ここに注目 datasetの長さは件数、loaderの長さはバッチ数です。

03 / YOUR TURN

予想して、理由を話そう

答えを選んで、説明を確かめよう。外れても発見が一つ増えるよ。

10件を4件ずつ、余りも使うと?

答えを選ぶと理由が表示されます。

04 / TRY ON COLAB

Colabで試してみよう

コードの実行はColaboratoryの実行環境で行います。まずノートブックを保存し、Colabで「ファイル → ノートブックをアップロード」から開いてください。上から順に実行し、最後に値を変えてみましょう。

保存ボタンを押しても画面は切り替わりません。通常はブラウザの「ダウンロード」フォルダに .ipynb が保存されます。見つからない場合はダウンロード履歴を確認してください。Colabの実習は小さな例から始められます。

COFFEE BREAK

身近な技術とつなげてみよう

AI先生

AI先生:給食を10人分、4人ずつ運ぶと3往復。最後の2人分も忘れないでね。

KEY TERMS

この回の重要な用語

本文で出会った言葉を、ここで意味と一緒に振り返ろう。上の「ことばの窓」からも説明を開けるよ。

Dataset
入力と正解を1件ずつ取り出せるデータのまとまりです。
DataLoader
Datasetをバッチにして順番に渡す道具です。
ミニバッチ
全件より少ない数を一度の更新で使う単位です。
エポック
学習用データ全体を一巡することです。