web-dev-qa-db-ja.com

PyTorchの変換は何に使用されますか?

私はPytorchの初心者であり、CNNの専門家ではありません。 Tutorial Pytorch を提供するチュートリアルで成功した分類器を作成しましたが、データをロードするときに何をしているのか本当にわかりません。

トレーニングのためにデータの増強と正規化を行いますが、パラメーターを変更しようとすると、コードが機能しません。

# Data augmentation and normalization for training
# Just normalization for validation
data_transforms = {
    'train': transforms.Compose([
        transforms.RandomResizedCrop(224),
        transforms.RandomHorizontalFlip(),
        transforms.ToTensor(),
        transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
    ]),
    'val': transforms.Compose([
        transforms.Resize(256),
        transforms.CenterCrop(224),
        transforms.ToTensor(),
        transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
    ]),
}

トレーニングデータセットを拡張していますか?データの増加は見られません。

Transforms.RandomResizedCrop(224)の値を変更すると、データの読み込みが機能しなくなるのはなぜですか?

テストデータセットも変換する必要がありますか?

私は、彼らが行うこのデータ変換と少し混同しています。

7
carioka88

_transforms.Compose_は、提供されたすべての変換をクラブします。そのため、_transforms.Compose_のすべての変換が1つずつ入力に適用されます。

変換を訓練する

  1. transforms.RandomResizedCrop(224):これは、入力画像からサイズ_(224, 224)_のパッチをランダムに抽出します。そのため、このパスを左上、右下、またはその間の任意の場所から選択する場合があります。したがって、この部分ではデータの増強を行っています。また、この値を変更しても、モデルの完全に接続されたレイヤーではニースが再生されないため、これを変更することはお勧めしません。
  2. transforms.RandomHorizontalFlip():サイズ_(224, 224)_の画像ができたら、それを反転することを選択できます。これは、データ拡張の別の部分です。
  3. transforms.ToTensor():これは入力画像をPyTorchテンソルに変換するだけです。
  4. transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]):これは単なる入力データのスケーリングであり、これらの値(平均と標準)はデータセットに対して事前に計算されている必要があります。これらの値を変更することもお勧めしません。

検証変換

  1. transforms.Resize(256):最初に、入力画像のサイズが_(256, 256)_に変更されます
  2. transforms.CentreCrop(224):形状の画像の中央部分をトリミングする_(224, 224)_

残りは電車と同じです

追伸:これらの変換の詳細については、 公式ドキュメント

17
layog

データ増大に関するあいまいさについては、この回答を参照してください。

PyTorchでのデータ増強

しかし、要するに、画像のデータセットを反復処理するときに、ランダムな水平反転変換のみがあると仮定すると、一部は元として返され、一部は反転として返されます(反転された画像の元の画像は返されません)。つまり、1回の反復で返される画像の数は、データセットの元のサイズと同じであり、増加しません。

1
Ashkan372