私は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)の値を変更すると、データの読み込みが機能しなくなるのはなぜですか?
テストデータセットも変換する必要がありますか?
私は、彼らが行うこのデータ変換と少し混同しています。
_transforms.Compose
_は、提供されたすべての変換をクラブします。そのため、_transforms.Compose
_のすべての変換が1つずつ入力に適用されます。
transforms.RandomResizedCrop(224)
:これは、入力画像からサイズ_(224, 224)
_のパッチをランダムに抽出します。そのため、このパスを左上、右下、またはその間の任意の場所から選択する場合があります。したがって、この部分ではデータの増強を行っています。また、この値を変更しても、モデルの完全に接続されたレイヤーではニースが再生されないため、これを変更することはお勧めしません。transforms.RandomHorizontalFlip()
:サイズ_(224, 224)
_の画像ができたら、それを反転することを選択できます。これは、データ拡張の別の部分です。transforms.ToTensor()
:これは入力画像をPyTorchテンソルに変換するだけです。transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
:これは単なる入力データのスケーリングであり、これらの値(平均と標準)はデータセットに対して事前に計算されている必要があります。これらの値を変更することもお勧めしません。transforms.Resize(256)
:最初に、入力画像のサイズが_(256, 256)
_に変更されますtransforms.CentreCrop(224)
:形状の画像の中央部分をトリミングする_(224, 224)
_残りは電車と同じです
追伸:これらの変換の詳細については、 公式ドキュメント
データ増大に関するあいまいさについては、この回答を参照してください。
しかし、要するに、画像のデータセットを反復処理するときに、ランダムな水平反転変換のみがあると仮定すると、一部は元として返され、一部は反転として返されます(反転された画像の元の画像は返されません)。つまり、1回の反復で返される画像の数は、データセットの元のサイズと同じであり、増加しません。