DataLoaderクラスを利用したミニバッチの生成
訓練で用いるデータを複数のグループに分割し、グループ毎にニューラルネットに入力することで学習を行うような手法のことをミニバッチ学習という。全てのデータをまとめて入力とするバッチ学習(参考:損失関数(バッチ学習))と比べると、処理速度やメモリ負荷の点で優れているとされる。
ここでは前節で作成したデータセットを用いて、ミニバッチを生成するための手法を示す。
DataLoader関数【torch】を用いて、ミニバッチの生成器を作る。
プログラムを見てみよう。先程のbatch1.pyに以下のコードを追加する。
code:(続き)batch1.py
# データローダの生成
data_loader = DataLoader(
dataset = dataset_train,
batch_size = 2,
shuffle = False,
)
# 確認のため表示
for i, (X, y) in enumerate(data_loader):
print(i, '番目のバッチ --------------')
print('学習データ:\n', X)
print('教師データ:\n', y)
関連:enumerate関数【builtin】
code:追加部分の結果.y
0 番目のバッチ --------------
学習データ:
tensor([0., 1.,
2., 3.])
教師データ:
tensor([0,
1])
1 番目のバッチ --------------
学習データ:
tensor([4., 5.,
6., 7.])
教師データ:
tensor([2,
3])
2 番目のバッチ --------------
学習データ:
tensor(8., 9.)
教師データ:
tensor(4)
これでデータセットに含まれる全データをバッチサイズで分割し、学習データと教師データの組を順に取り出せるようになった。
備考:
全データをバッチサイズで分割したときに出た端数は、最後のバッチとして出力される。
/icons/hr.icon
※ ブラウザのバックボタンで戻る