113 Views
September 19, 17
スライド概要
Deep Learning JP:
http://deeplearning.jp/hacks/
DL輪読会資料
PytorchのDataLoader - torchtextのソースコードを読んでみた20170904 松尾研 曽根岡 1
PytorchのDataLoader周り 2
実装手順 • DataLoader • モデル作成 • 損失関数 • 訓練 • ハイパーパラメータチューニング 3
実装手順 • DataLoader ← 当たり前だけど最初にやるべき • モデル作成 • 損失関数 • 訓練 • ハイパーパラメータチューニング 4
DataLoader周り実装手順 1. DataSetの作成 DataSetのサブクラスでラップする 2. Dataの前処理 Transformで前処理を定義する 3. DataLoader DataLoaderでDatasetをバッチで取り出せるようにする 5
1. DataSet • torch.utils.data.Dataset :ただの抽象クラス (getとlenをoverrideして使う) https://github.com/pytorch/pytorch/blob/master/torch/utils/data/dataset.py 6
1. DataSet例:FaceLandmarks http://pytorch.org/tutorials/beginner/data_loading_tutorial.html 7
1. DataSet例:FaceLandmarks ← getで取るときに変換 http://pytorch.org/tutorials/beginner/data_loading_tutorial.html 8
2. Transform TransformオブジェクトをDatasetに渡すことで前処理を行う 9
2. Transform TransformオブジェクトをDatasetに渡すことで前処理を行う ← callを定義する (initも書く) 10
2.Transforms 復数の前処理:torchvision.transforms.Compose 11
(余談)2.Transforms 復数の前処理:torchvision.transforms.Compose ただfor文回すだけ。なぜtorchvisionなのか不明 12
2. Transform • torchvision.transforms内に画像系はすでにある - Scale:大きさ変更 - CenterCrop:真ん中でクロッピング - RandomCrop:ランダムにクロッピング - RandomHorizontalFlip:ある確率でFlip - Normalize:正規化 - ToTensor:PIL.ImageやnumpyをTensor化 http://pytorch.org/docs/master/torchvision/transforms.html 13
3. DataLoader Datasetを渡すことでミニバッチを返すIterableなオブジェクトに マルチスレッドとかいろいろやってくれている優秀なやつ 14
余談 • torchvisionのLoaderはpytorch以外でも使える - torchのモデルに依存せずnumpy等で返してくれる - torch.util.data.Datasetだけは使う • 他のloaderってどうなのだろう? 15
ここまでは チュートリアルとDocでわかること (ソースコードも少し) 16
[WIP]torchtextを読み解いてみた 2017/9/4時点 17
torch text • Pytorchグループが作るテキスト処理用のDataLoader https://github.com/pytorch/text • torchvisionやpytorchのdataloaderとは別物感 - 複雑な構造 - ドキュメントが薄い - pipで入らない(git cloneしてdirectory取ってきた 結構つらいので、他にいいのがあればそれでもいいかも 18
利用できるデータセット • ポジネガ分析:SST, IMDbb • 質問分類:TREC • 自然言語推論:SNLI • 原簿モデリング:Wikitext-2 19
ただデータを欲しい時 イテレータの作成 イテレータを回すとき 20
DataSet構造 Dataset Example Field Vocab fieldの名前属性に Preprocess 前処理済みのデータ itos stoi len vectors 21
DataSet構造 Dataset Example Field Vocab fieldの名前属性に Preprocess 前処理済みのデータ itos stoi len vectors 22
Dataset • initでself.examples , self.fieldsを保持 • splits:train, dev, validをそれぞれのpathから返す • get, getattr, iter, len:exampleの値を返す • サブクラス:TabularDataset, ZipDataset 23
DataSet構造 Dataset Example Field Vocab fieldの名前属性に Preprocess 前処理済みのデータ itos stoi len vectors 24
Example • 前処理後のデータ群 - TextFieldが持つpreprocessを使って前処理 - Datasetのfields(辞書)のkeyでアクセス可 25
DataSet構造 Dataset Example Field Vocab fieldの名前属性に Preprocess 前処理済みのデータ itos stoi len vectors 26
Field • データの種類ごとの前処理とVocabを保持 • .preprocess(data):設定した前処理を行う - tokenize引数で前処理を渡す • .build_vocab(data):引数のデータからvocab作成 • .pad(minibatch):paddingされたデータを作成 • .numericalize(data):Variableに変換 27
DataSet構造 Dataset Example Field Vocab fieldの名前属性に Preprocess 前処理済みのデータ itos stoi len vectors 28
Vocab • テキスト関係の処理 • init:データから下記を作成 - freqs:単語のカウンター - itos:indexから文字のリスト - stoi:文字からindexのリスト - wordvectors:埋め込み行列(Tensor型 • wv_typeを引数で渡すとgloveとかを取る 29
Iterator周り • Datasetを引数にミニバッチを返すiterator - pytorchのでデフォルトと異なる - Padding最小にするBucketIteratorなど、 テキスト周り用に少しカスタマイズされている • Batchオブジェクトを返す 30