Programming Lab

【徹底解説】PytorchのDataLoaderの使い方

【徹底解説】PytorchのDataLoaderの使い方

 

 

  • PytorchのDataLoaderを何となく使ってるけど、実はよくわかってない…
  • DataLoaderとDatasetの仕組みを勉強しようと思ったけど挫折した…

本記事では、その悩みと疑問を解決していきます。

PyTorchのDataLoaderとDatasetを使用することで、簡単にミニバッチ勾配降下法を実装することができます。

最初は、DataLoaderとDatasetが複雑に感じますが一度理解すると、なくてはならない存在になります。

本記事では、特にDataLoaderに焦点を当てて解説していきます。

『DataLoader, Datasetってなんだ?』という方でも理解できるように解説するので安心してください。

 

 

PyTorchのDatasetとDataLoaderについて

PytorchのDataLoaderとDatasetを使用することで、簡単にデータの一部(ミニバッチ)をデータから取り出すことができます。

では、DatasetとDataLoaderについてもう少し詳しく説明します。

 

PyTorchのDatasetとは

 

PyTorchのDatasetとは、PyTorchが扱いやすいように、データを一つにまとめたデータベースのようなものです。

このDatasetをDataLoaderに渡すことで、データベースからミニバッチを簡単に取り出すことができるようになります。

Datasetの詳しい解説は下記を参考にしてください。

 

PytorchのDatasetを徹底解説(自作データセットも作れる)PyTorchのDataset作成方法を徹底的に解説しました。本記事を読むことで、Numpy, PandasからDatasetを作成したり、自作のDatasetを作成しモジュール化する作業を初心者の方でも理解できるように徹底的に解説しました。...

 

PyTochのDataLoaderとは

 

DataLoaderは、Datasetを受け取ってデータからミニバッチを取り出すことができます。

DataLoaderは、配列ではなくイテラブルとなり、For文等でデータを取り出すことができます。

主に、DataLoaderを使用するメリットは以下の2つです。

  1. ミニバッチでDataをランダムに取り出すことができる
  2. Pytorchで学習するための型で返してくれる

イテラブルとは、『繰り返し可能なオブジェクト』のことです。

基本的には、『for i in 【イテラブル】』のような使い方ができるものだと思っておけば問題はありません。

 

PyTorchのDataLoaderの使い方

 

ここからは、具体的な例を使用し、PyTorchの動作を詳しく解説します。

以下の流れで解説していきます。

  1. Datasetの作成 
  2. DataLoaderの使い方
  3. DataLoaderの動作確認
  4. ミニバッチを確認しながらDataを取り出す方法

 

ここからの話は『Dataset』の基本的な理解が必要です。

詳しい理解は不要ですが、『Dataset』を聞いたことのない読者は下記を一読してから読み進めてください。

 

PytorchのDatasetを徹底解説(自作データセットも作れる)PyTorchのDataset作成方法を徹底的に解説しました。本記事を読むことで、Numpy, PandasからDatasetを作成したり、自作のDatasetを作成しモジュール化する作業を初心者の方でも理解できるように徹底的に解説しました。...

 

Datasetの作成

 

まずは、サンプルのデータをロードし、Datasetを作成します。

今回は、手書き数字のMNISTデータセットを使用します。

MNIST = torchvision.datasets.MNIST(root='./data',
                                        train=True,
                                        transform=transforms.ToTensor(),
                                        download=True)

 

中身を簡単に確認しておきましょう。

<Input>

print(MNIST)

 

<output>

Dataset MNIST
    Number of datapoints: 60000
    Root location: ./data
    Split: Train
    StandardTransform
Transform: ToTensor()

 

では、DataLoaderを次節で紹介します。

 

DataLoaderの使い方

 

DataLoaderは、Datasetを入力して作成することができます。

具体的なコードを見てみましょう。

Loader = torch.utils.data.DataLoader(dataset=MNIST, 
                                         batch_size=10000, 
                                         shuffle=True, 
                                         num_workers=2)

 

これで、DataLoaderを作成することができます。

具体的な引数について説明します。

DataLoader  
第一引数 Dataset
batch_size ミニバッチの個数
shuffle Trueにするとミニバッチをランダムに取り出す
num_workers 複数処理するかどうか

 

では、次節で動作を確認していきましょう。

 

DataLoaderの動作確認

 

では、DataLoaderの確認をしていきます。

DataLoaderはイテラブルなので、For文を使って取り出すことができます。

実際に取り出してみましょう。

for images, label in Loader:
    images, label = images, label

 

images, labeになりが入っている確認してみましょう。

<Input>

# バッチサイズ, チャンネル数, 縦, 横
print(images.size())

# ラベル
print(label.size())

 

<Output>

torch.Size([10000, 1, 28, 28])
torch.Size([10000])

 

imageは、『バッチサイズ, チャネル(今回は白黒だから1), 縦, 横』の順番で取り出せされます。

ミニバッチ内の1番目に対応する数字を具体的に可視化してみてみましょう。

<Input>

# 可視化して確認する
fig, ax = plt.subplots()
ax.imshow(images[0][0])
ax.axis('off')
ax.set_title(f'images, label={label[0]}', fontsize=20)
plt.show()

 

<Output>

minibatchのデータサンプル

 

ミニバッチを確認しながらDataを取り出す方法

 

どのミニバッチを使用しているのか確認できるようにするためには、『enumerate関数』を使用します。

『enumerate関数?』という方は下記を参考にしてください。

 

enumerate関数の説明はこちら

では、具体的なコードで確認しましょう。

<Input>

# どのMini-Batchを使用しているのかを明らかにする
for i , (images, label) in enumerate(Loader):
    images = images
    label = label
    print(i)

 

<output>

0
1
2
3
4
5

 

ここまでが基本的な使い方です。

次章では、ミニバッチが割り切れない時の対処方法を説明します。

DataLoaderのミニバッチが割り切れない場合の対処方法

 

全データセットに対して、ミニバッチサイズが割り切れないとき、最後のミニバッチデータセットは中途半端な数になってしまいます。

そのようなミニバッチデータセットは、学習に悪い影響を与えることがあるので基本的には取り除きます。

PytorchのDataLoaderの場合、割り切れなかったミニバッチデータセットを除去するためには、『drop_last』をTrueにすることで除去することができます。

今回は、60000枚の画像なので、ミニバッチデータセットを10000枚にした上述例の場合、割り切れるので6つのミニバッチデータセットができました。

今回は、ミニバッチデータセットを10001枚に設定して『drop_last』の挙動を確認してみます。

<Input>

# 割り切れない場合
Loader = torch.utils.data.DataLoader(dataset=MNIST, 
                                         batch_size=10001, 
                                         shuffle=True, 
                                         num_workers=2,
                                         drop_last = True)

# 最後にデータ数の異なるミニバッチを除去
for i , (images, label) in enumerate(Loader):
    images = images
    label = label
    print(i)

 

<Output>

0
1
2
3
4

 

このように4つの10001枚のミニバッチデータセットが作成され、最後の9997枚のミニバッチデータセットは除去されました。

これで、問題なくDataLoaderを使用することができますね。

 

PytorchのDataLoaderの注意事項

 

PyTorchのDataLoaderはイテラブルなので、全てのデータを取り出すまで、一度取り出したデータを再び取り出すことができません。

そのため中途半端に取り出してしまうと、後ほどの学習で全てのデータが使用できないです。

動作を確認するときは注意してください。

 

まとめ

 

今回は、DataLoaderの使用方法に焦点を当てて解説しました。

皆様も具体例を使ってDataLoaderを動かしてみてください。

そうすることで、DataLoaderの理解度が格段に上がります。

本記事が、皆様にとって有益であることを願います…

具体的に、ディープラーニングを実装してみたいという方は下記を参考にしてください。

 

【PyTorch入門】多層パーセプトロンでMNISTを分類本記事では、PyTrochで多層パーセプトロンを構築し、手書き文字のデータセットのMNISTを分類しました。本記事を理解することでPytorchを使用してディープラーニングを構築する基本が身につきます。...
ABOUT ME
努力のガリレオ
【運営者】 : 東大で理論物理を研究中(経歴)東京大学, TOEIC950点, NASA留学, カナダ滞在経験有り, 最優秀塾講師賞, オンライン英会話講師試験合格, ブログと独自コンテンツで収益6桁達成 【編集者】: イングリッシュアドバイザーとして勤務中(経歴)中学校教諭一種免許取得[英語],カナダ留学経験あり, TOEIC650点
【必見】オンライン英会話を利用しないのは時代遅れ?

 

 

英語学習でオンライン英会話を利用しないのは、時代遅れです…

 

『スピーキングができないから、オンライン英会話はまだまだ後回し…』と思っている方は大間違いです。

 

最近のオンライン英会話は、教材が豊富で、もはや参考書・問題集は不要になりつつあります…

また、多くのオンライン英会話が最新メソッドを導入して、スピーキングのみならず、リーディング・リスニング・ライティングの能力も上がる教材を導入しています。

さらに、効率的な記憶ツールや学習カウンセリングのサービスが提供されることもあります!!

 

特に初心者の方は、下記の記事で紹介しているオンライン英会話をチェックしてみてください。

 

【東大生が厳選】初心者にオススメなオンライン英会話10選実は、最適なオンライン英会話はユーザーによって異なります。本記事では、複数のオンライン英会話を経験した私が、他社と比較しつつ特徴を明確にして本当にオススメできるオンライン英会話を10個厳選しました。...

 

中には、2週間の無料体験期間を提供しているオンライン英会話もあります。

英語学習が滞っている方や英語学習を習慣化できていない方は無料体験期間で良いので挑戦してみてください。

何事も行動することが大切です。

 

また、多くのオンライン英会話がTOEICやTOEFL等の外部英語試験の対策レッスンを提供してきています。

中には、追加料金なしで、本番さながらの対策や面接対策を行うことができるオンライン英会話もあります。

 

特にTOEIC対策に強いオンライン英会話は下記を参考にしてください。

 

【徹底比較】TOEIC対策に強いオンライン英会話5選|東大生が厳選!オンライン英会話はTOEICのスコアを効率的に上げる最強のツールです。本記事では、TOEICにオンライン英会話が効果的な理由とTOEIC対策に強いオンライン英会話を厳選しました。詳しい内容は記事を参考にしてください。...

 

TOEFL対策に強いオンライン英会話に関しては下記を参考にしてください。

 

【徹底比較】TOEFL対策に強いオンライン英会話5選|東大生が厳選!TOEFL対策にオンライン英会話は有効です。事実、私もTOEFL対策のためにオンライン英会話を使用してTOEFL ibtの4技能、TOEFL itpのスコアを爆上げすることができました。この記事では、私が思うTOEFL対策に最適なオンライン英会話を紹介しました。...