データ処理のpytorch

PyTorchにおいて、データローディングは、カスタムデータセットオブジェクトによって達成することができます。データセットのデータセットのニーズを統合するカスタムを達成するために、データセットオブジェクトDataSetクラスとして抽出され、2つのメソッドを実装しています。

__getitem__:データやサンプルを返します。

__len__:サンプル数を返します。

時々、データが画像である、異なるサイズおよび形状の画像は、サンプルの値は[-1,1]への復帰を正規化。torchvisionの提供モジュールは、共通のオブジェクトとテンソルPILイメージオブジェクトに変換操作を提供し、ここで多くのツールビジョン画像処理、。

次のようにPILイメージの一般的な操作は次のとおりです。

リサイズ:画像サイズを調整します

CenterCrop、RandomCrop、RandomSizedCrop:クロップ画像

パッド:充填

ToTensor:テンソルにPIL画像オブジェクトは、自動的に[0,255]を[0,1]に正規化しました。

 

テンソルの一般的な操作は次のとおりです。

ノーマライズ:正常化しました。つまり、マイナスの平均値を標準偏差で割った値

ToPILImage:テンソルPILにImageオブジェクト。

あなたは絵より多くの操作をしたい場合は、一緒に縫い合わせることでnn.Sequentialに似たこれらの操作を、構図。

transform = transforms.Compose(
                [transforms.Resize(224), # 缩放图片,保持长宽比不变
                 transforms.CenterCrop(224), # 从图片中间切出224 * 224的图片
                 transforms.Totensor(), # 将图片转换成Tensor,归一化至[0,1]
                ])
class MyData(data.DataSet):
    def __init__(self, root, transforms=None):
        imgs = os.listdir(root)
        self.imgs = [os.path.join(root, img) for img in imgs]
        self.transforms = transforms
    
    def __getitem__(self, index):
        img_path = self.imgs[index]
        label = 0 if 'dog' in img_path.split('/')[-1] else 1
        data = Image.open(img_path)
        if self.transforms:
            data = self.transforms(data)
        return data, label
    
    def __len__(self):
        return len(self.imgs)

torchvisionが以前CIFAR-10、ImageNet、COCO、MNIST、LSUN他のデータセットを含む、一般的に使用されるデータセットを達成した、オブジェクトに対応する呼関連データを呼び出して設定することができます。

ここではDataSetは - 次のようにImageFolder、ImageFolderはクラスとして、フォルダで保存されているすべてのファイルは、各ファイルは、画像の同じカテゴリーの下に格納されていることをフォルダ名を想定して、そのコンストラクタは次のとおりです。

ImageFolder(根、変換=なし、traget_transform =なし、ローダー= default_loader)

これは、主に次の4つのパラメータがあります。

ルート:指定したルートパス内の画像を検索します。

PIL画像変換操作に、入力画像は、オブジェクトを返すために、ローダを使用して読み込まれる変換:変換。

target_transform:ラベルの変換。

ローダー:指定機能はPILのImageオブジェクトのデフォルトのアクションとして読み、絵をロードします。

ラベル名が格納された後、すなわち{クラス名:(0から始まる)クラス番号}、辞書へのフォルダの順序に従ってソート、一般に、好ましくは直接0から始まる名前のフォルダから、それが実際ImageFolder意志一貫性のあるラベル。

データセットは、コール__getitem__戻っ一つだけのサンプル抽象データに対してのみ責任があります。データのバッチが動作するとき、ニューラルネットワークを訓練して、先に述べたが、また、並行して加速度のデータをシャッフルする必要があります。この点で、Pytorchは、私たちは、これらの機能を実現するデータローダーヘルプを提供します。

データローダー(データセット、BATCH_SIZE = 1、シャッフル= Falseを、サンプラー=なし、num_workers = 0、collat​​e_fn = default_collat​​e、pin_memory = Falseを、drop_last =偽)

datadset:データセットを読み込みます

BATCH_SIZE:バッチサイズ

シャッフル:データ怒っているかどうか

サンプラー:サンプル採取

num_workers:ロード処理の処理は、複数のプロセスを使用しないように、0を複数の番号を使用して。

collat​​e_fn:どのように一般的スプライシングができ、デフォルトを使用して、バッチにスプライスマルチ個人データをサンプリングします。

pin_memory:データがピンメモリに記憶されているか否かを、より速くGPUにピンメモリデータを切り替えます。

drop_last:データセット内のデータ数がBATCH_SIZEの整数倍でなくてもよいです。

データローダの目的は、反復的であり、それは、反復子を使用して似ているとして使用することができます。

 

 

 

 

 

 

 

 

 

公開された16元の記事 ウォンの賞賛3 ビュー719

おすすめ

転載: blog.csdn.net/FeNGQiHuALOVE/article/details/104505202