🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
PyTorch

PyTorchは、オープンソースのPython向けの機械学習ライブラリ。Facebookの人工知能研究グループが開発を主導しています。強力なGPUサポートを備えたテンソル計算、テープベースの自動微分による柔軟なニューラルネットワークの記述が可能です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1932閲覧

pytorchのDataLoaderの作り方

taro_yamada

総合スコア55

PyTorch

PyTorchは、オープンソースのPython向けの機械学習ライブラリ。Facebookの人工知能研究グループが開発を主導しています。強力なGPUサポートを備えたテンソル計算、テープベースの自動微分による柔軟なニューラルネットワークの記述が可能です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/02/21 03:21

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がリストになるように?)したいのですが、どのように処理すればよろしいでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

labelを追加したらうまく動きました。

投稿2021/02/21 12:11

taro_yamada

総合スコア55

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問