データセットと DataLoader を使用して PyTorch でデータをカスタマイズする

データセットと DataLoader を使用して PyTorch でデータをカスタマイズする

大規模なデータセットを扱う場合、データ全体を一度にメモリにロードすることが非常に困難になることがあります。

したがって、唯一の方法は、処理のためにデータをバッチでメモリにロードすることであり、これを行うには追加のコードを記述する必要があります。この目的のために、PyTorch はすでに Dataloader 関数を提供しています。

データローダー

PyTorch ライブラリの DataLoader 関数の構文とそのパラメータ情報を以下に示します。

  1. DataLoader(データセット、batch_size=1、shuffle= False 、sampler=None、
  2. batch_sampler=なし、num_workers=0、collat​​e_fn=なし、
  3. pin_memory= False 、drop_last= False 、タイムアウト=0、
  4. worker_init_fn=なし、*、prefetch_factor=2、
  5. persistent_workers = False )

いくつかの重要なパラメータ

  • データセット: まずデータセットを使用して DataLoader クラスを構築する必要があります。
  • シャッフル: データを再編成するかどうか。
  • Sampler : オプションの torch.utils.data.Sampler クラス インスタンスを参照します。サンプラーは、サンプルを順番に、ランダムに、またはその他の方法で取得するための戦略を定義します。サンプラーを使用する場合は、シャッフルを false に設定する必要があります。
  • Batch_Sampler: バッチレベル。
  • num_workers: データをロードするために必要な子プロセスの数。
  • collat​​e_fn : サンプルをバッチにまとめます。 Torch ではカスタム照合が可能です。

組み込みのMNISTデータセットをロードする

MNIST は手書きの数字を含む有名なデータセットです。 DataLoader 機能を使用して PyTorch の組み込み MNIST データセットを処理する方法を説明します。

  1. 輸入トーチ
  2. matplotlib.pyplot をpltとしてインポートします。
  3. torchvisionからデータセットをインポートし、変換する

上記のコードは、torchvision の torch コンピュータ ビジョン モジュールをインポートします。これは画像データセットを操作するときによく使用され、画像の正規化、サイズ変更、切り抜きに役立ちます。

MNIST データセットの場合、次の正規化手法が使用されます。

ToTensor() は、0〜255 のグレースケール範囲を 0〜1 に変換できます。

  1. 変換 = transforms.Compose([transforms.ToTensor()])

必要なデータセットを読み込むには、次のコードを使用します。 PyTorchDataLoader を使用して、batch_size = 64 を指定してデータをロードします。 shuffle=True はデータをシャッフルします。

  1. trainset = datasets.MNIST( '~/.pytorch/MNIST_data/' 、 download= True 、 train= True 、 transform=transform)
  2. トレインローダー = torch.utils.data.DataLoader(トレインセット、バッチサイズ = 64、シャッフル = True )

データセット内のすべての画像を取得するには、通常、iter 関数とデータ ローダー DataLoader を使用します。

  1. dataiter = iter(trainloader)
  2. 画像、ラベル = dataiter.next ()
  3. 印刷(images.shape)
  4. 印刷(ラベル.形状)
  5. plt.imshow(images[1].numpy().squeeze(), cmap= 'Greys_r' )

カスタムデータセット

次のコードは、1000 個の乱数を含むカスタム データセットを作成します。

  1. torch.utils.dataからデータセットをインポート
  2. ランダムにインポート
  3.   
  4. クラスSampleDataset(データセット):
  5. __init__(self,r1,r2)を定義します。
  6. ランダムリスト=[]
  7. iが範囲(120)内にある場合:
  8. n = ランダム.randint(r1,r2)
  9. ランダムリストに追加(n)
  10. self.samples = ランダムリスト
  11.   
  12. __len__(自分)を定義します:
  13. len(self.samples)を返す
  14.   
  15. __getitem__(self, idx)を定義します。
  16. 戻り値(self.samples[idx])
  17.   
  18. データセット=サンプルデータセット(1,100)
  19. データセット[100:120]

ここに画像の説明を挿入

最後に、カスタム データセットでデータローダー関数を使用します。 batch_size は 12 に設定され、num_workers = 2 で並列マルチプロセス データ ロードも有効になります。

  1. torch.utils.dataからDataLoader をインポートします
  2. ローダー = DataLoader(データセット、バッチサイズ=12、シャッフル= True 、num_workers=2)
  3. iの場合 enumerate(loader)バッチ処理します。
  4. print(i, バッチ)

以下では、いくつかの例を通して、大量のデータをバッチでメモリにロードする際の PyTorch Dataloader の役割について学習します。

<<:  再帰アルゴリズム: 不可解なスイッチ「ライトを引く」

>>:  Go データ構造とアルゴリズムの基本クイックソート

ブログ    
ブログ    

推薦する

パンデミックの中で、これらの16の業界は技術のアップグレードを緊急に必要としている

パンデミックはビジネスを混乱させ、場合によっては世界を停止させ、ほぼすべての業界が事業運営方法を再考...

...

...

データが多すぎたり、乱雑すぎたり、複雑すぎたりしていませんか?このようなデータガバナンスプロセスが必要です

機械学習の基盤となるデータは、GB、TB、PB と数え切れないほど増加してきました。現在、より大規模...

アルゴリズムがバグをキャッチ:ディープラーニングとコンピュータービジョンが昆虫学を変える

[[390223]]導入コンピュータ アルゴリズムは、ソフトウェア プログラムのバグを検出するのに役...

SQLデータベースに基づくアルゴリズムを学ぶ

データベースは、データを保存し、大規模な計算を実行する場所です。現実世界の問題を解決するために、デー...

Pythonを学ぶときは、学習の方向性と開発ツールの選択を明確に知っておく必要があります。

Python はスクリプト言語であり、さまざまな他のプログラミング言語で記述されたモジュールを結合...

MetaMindによるNLP研究の徹底分析:機械学習をスキップさせる方法

自然言語処理は、人工知能研究における中心的な課題の 1 つです。最近、Salesforceによる買収...

AIプロジェクトが失敗する6つの理由

データの問題は、企業の AI プロジェクトが意図した目標を達成できない主な理由です。しかし、企業が失...

AI、機械学習、ディープラーニングのつながりと違いを1つの記事で理解する

急速に変化する今日のテクノロジーの世界では、人工知能 (AI)、機械学習 (ML)、ディープラーニン...

大きなモデルをベンチマークに騙されないでください!テストセットが事前トレーニングにランダムに挿入され、スコアが人為的に高くなり、モデルが愚かになる

「大きなモデルがベンチマークによって台無しにされないようにしてください。」これは、中国人民大学情報学...

自分でゴミを分別できるスマートゴミ箱が登場するまで、どれくらい時間がかかるのでしょうか?

あなたの市では今日から「ゴミの分別」が始まりましたか?上海が先導して実証を進め、北京、天津、重慶、成...

モノのインターネット – インド国防軍にとっての可能性

世界がインダストリー4.0へと向かうにつれ、モノのインターネットへの世界的な支出は2022年までに1...

...

ソフトウェア配信における機械学習の活用方法

現代のほとんどのソフトウェア チームにとって、ソフトウェアの配信は継続的なプロセスです。ソフトウェア...