[DLHacks LT] PytorchのDataLoader -torchtextのソースコードを読んでみた-

>100 Views

September 19, 17

スライド概要

Deep Learning JP:
http://deeplearning.jp/hacks/

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

(ダウンロード不可)

関連スライド

各ページのテキスト
1.

PytorchのDataLoader - torchtextのソースコードを読んでみた20170904 松尾研 曽根岡 1

2.

PytorchのDataLoader周り 2

3.

実装手順 • DataLoader • モデル作成 • 損失関数 • 訓練 • ハイパーパラメータチューニング 3

4.

実装手順 • DataLoader ← 当たり前だけど最初にやるべき • モデル作成 • 損失関数 • 訓練 • ハイパーパラメータチューニング 4

5.

DataLoader周り実装手順 1. DataSetの作成 DataSetのサブクラスでラップする 2. Dataの前処理 Transformで前処理を定義する 3. DataLoader DataLoaderでDatasetをバッチで取り出せるようにする 5

6.

1. DataSet • torch.utils.data.Dataset :ただの抽象クラス (getとlenをoverrideして使う) https://github.com/pytorch/pytorch/blob/master/torch/utils/data/dataset.py 6

7.

1. DataSet例:FaceLandmarks http://pytorch.org/tutorials/beginner/data_loading_tutorial.html 7

8.

1. DataSet例:FaceLandmarks ← getで取るときに変換 http://pytorch.org/tutorials/beginner/data_loading_tutorial.html 8

9.

2. Transform TransformオブジェクトをDatasetに渡すことで前処理を行う 9

10.

2. Transform TransformオブジェクトをDatasetに渡すことで前処理を行う ← callを定義する (initも書く) 10

11.

2.Transforms 復数の前処理:torchvision.transforms.Compose 11

12.

(余談)2.Transforms 復数の前処理:torchvision.transforms.Compose ただfor文回すだけ。なぜtorchvisionなのか不明 12

13.

2. Transform • torchvision.transforms内に画像系はすでにある - Scale:大きさ変更 - CenterCrop:真ん中でクロッピング - RandomCrop:ランダムにクロッピング - RandomHorizontalFlip:ある確率でFlip - Normalize:正規化 - ToTensor:PIL.ImageやnumpyをTensor化 http://pytorch.org/docs/master/torchvision/transforms.html 13

14.

3. DataLoader Datasetを渡すことでミニバッチを返すIterableなオブジェクトに マルチスレッドとかいろいろやってくれている優秀なやつ 14

15.

余談 • torchvisionのLoaderはpytorch以外でも使える - torchのモデルに依存せずnumpy等で返してくれる - torch.util.data.Datasetだけは使う • 他のloaderってどうなのだろう? 15

16.

ここまでは チュートリアルとDocでわかること (ソースコードも少し) 16

17.

[WIP]torchtextを読み解いてみた 2017/9/4時点 17

18.

torch text • Pytorchグループが作るテキスト処理用のDataLoader https://github.com/pytorch/text • torchvisionやpytorchのdataloaderとは別物感 - 複雑な構造 - ドキュメントが薄い - pipで入らない(git cloneしてdirectory取ってきた 結構つらいので、他にいいのがあればそれでもいいかも 18

19.

利用できるデータセット • ポジネガ分析:SST, IMDbb • 質問分類:TREC • 自然言語推論:SNLI • 原簿モデリング:Wikitext-2 19

20.

ただデータを欲しい時 イテレータの作成 イテレータを回すとき 20

21.

DataSet構造 Dataset Example Field Vocab fieldの名前属性に Preprocess 前処理済みのデータ itos stoi len vectors 21

22.

DataSet構造 Dataset Example Field Vocab fieldの名前属性に Preprocess 前処理済みのデータ itos stoi len vectors 22

23.

Dataset • initでself.examples , self.fieldsを保持 • splits:train, dev, validをそれぞれのpathから返す • get, getattr, iter, len:exampleの値を返す • サブクラス:TabularDataset, ZipDataset 23

24.

DataSet構造 Dataset Example Field Vocab fieldの名前属性に Preprocess 前処理済みのデータ itos stoi len vectors 24

25.

Example • 前処理後のデータ群 - TextFieldが持つpreprocessを使って前処理 - Datasetのfields(辞書)のkeyでアクセス可 25

26.

DataSet構造 Dataset Example Field Vocab fieldの名前属性に Preprocess 前処理済みのデータ itos stoi len vectors 26

27.

Field • データの種類ごとの前処理とVocabを保持 • .preprocess(data):設定した前処理を行う - tokenize引数で前処理を渡す • .build_vocab(data):引数のデータからvocab作成 • .pad(minibatch):paddingされたデータを作成 • .numericalize(data):Variableに変換 27

28.

DataSet構造 Dataset Example Field Vocab fieldの名前属性に Preprocess 前処理済みのデータ itos stoi len vectors 28

29.

Vocab • テキスト関係の処理 • init:データから下記を作成 - freqs:単語のカウンター - itos:indexから文字のリスト - stoi:文字からindexのリスト - wordvectors:埋め込み行列(Tensor型 • wv_typeを引数で渡すとgloveとかを取る 29

30.

Iterator周り • Datasetを引数にミニバッチを返すiterator - pytorchのでデフォルトと異なる - Padding最小にするBucketIteratorなど、 テキスト周り用に少しカスタマイズされている • Batchオブジェクトを返す 30