MNISTのデータ分類をニューラルネットワークで分類するプログラムを、独自の画像データのDatasetを使って実行したいと考えています。
元のプログラムでのDataLoaderは上のソースコードで作っています。
私が別のHPを参考に作ったプログラムは下のソースコードになります。
https://qiita.com/sugulu_Ogawa_ISID/items/e3c01a0776a5df3ad552
# MNISTの画像をダウンロードし、DataLoaderにする(TrainとTest) from torchvision import datasets, transforms batch_size_train = 512 train_loader = torch.utils.data.DataLoader( datasets.MNIST('.', train=True, download=True, transform=transforms.Compose([ transforms.ToTensor(), ])), batch_size=batch_size_train, shuffle=True, drop_last=True) # drop_lastは最後のミニバッチが規定のサイズより小さい場合は使用しない設定 test_loader = torch.utils.data.DataLoader( datasets.MNIST('.', train=False, transform=transforms.Compose([ transforms.ToTensor(), ])), batch_size=1024, shuffle=False)
from pathlib import Path from torch.utils.data import DataLoader, Dataset from torchvision import transforms from PIL import Image class ImageFolder(Dataset): IMG_EXTENSIONS = [".jpg", ".jpeg", ".png", ".bmp"] def __init__(self, img_dir, transform=None): # 画像ファイルのパス一覧を取得する。 self.img_paths = self._get_img_paths(img_dir) self.transform = transform def __getitem__(self, index): path = self.img_paths[index] # 画像を読み込む。 img = Image.open(path) if self.transform is not None: # 前処理がある場合は行う。 img = self.transform(img) return img def _get_img_paths(self, img_dir): """指定したディレクトリ内の画像ファイルのパス一覧を取得する。 """ img_dir = Path(img_dir) img_paths = [ p for p in img_dir.iterdir() if p.suffix in ImageFolder.IMG_EXTENSIONS ] return img_paths def __len__(self): """ディレクトリ内の画像ファイルの数を返す。 """ return len(self.img_paths) # Transform を作成する。 transform = transforms.Compose([transforms.Resize(256), transforms.ToTensor()]) # Dataset を作成する。 dataset = ImageFolder("./tmp", transform) # DataLoader を作成する。 train_loader = DataLoader(dataset, batch_size=3)
for batch in train_loader:
print(batch)
で中身を確認すると、
上のソースコードでは、以下のとおり
[tensor([[[[0., 0., 0., ..., 0., 0., 0.],
[0., 0., 0., ..., 0., 0., 0.],
[0., 0., 0., ..., 0., 0., 0.],
...,
[0., 0., 0., ..., 0., 0., 0.],
[0., 0., 0., ..., 0., 0., 0.],
[0., 0., 0., ..., 0., 0., 0.]]],
[[[0., 0., 0., ..., 0., 0., 0.], [0., 0., 0., ..., 0., 0., 0.], [0., 0., 0., ..., 0., 0., 0.], ..., [0., 0., 0., ..., 0., 0., 0.], [0., 0., 0., ..., 0., 0., 0.], [0., 0., 0., ..., 0., 0., 0.]]],
下のソースコードでは以下のとおりとなります。
tensor([[[[1., 1., 1., ..., 1., 1., 1.],
[1., 1., 1., ..., 1., 1., 1.],
[1., 1., 1., ..., 1., 1., 1.],
...,
[1., 1., 1., ..., 1., 1., 1.],
[1., 1., 1., ..., 1., 1., 1.],
[1., 1., 1., ..., 1., 1., 1.]],
上と同じDataLoaderに(batchがリストになるように?)したいのですが、どのように処理すればよろしいでしょうか?
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。