Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.

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

14 821 vues

Publié le

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

Publié dans : Technologie
  • Soyez le premier à commenter

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

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

×