相关疑难解决方法(0)

pytorch 数据集中每个类的实例数

我正在尝试使用 PyTorch 制作一个简单的图像分类器。这是我将数据加载到数据集和 dataLoader 中的方式:

batch_size = 64
validation_split = 0.2
data_dir = PROJECT_PATH+"/categorized_products"
transform = transforms.Compose([transforms.Grayscale(), CustomToTensor()])

dataset = ImageFolder(data_dir, transform=transform)

indices = list(range(len(dataset)))

train_indices = indices[:int(len(indices)*0.8)] 
test_indices = indices[int(len(indices)*0.8):]

train_sampler = SubsetRandomSampler(train_indices)
test_sampler = SubsetRandomSampler(test_indices)

train_loader = torch.utils.data.DataLoader(dataset, batch_size=batch_size, sampler=train_sampler, num_workers=16)
test_loader = torch.utils.data.DataLoader(dataset, batch_size=batch_size, sampler=test_sampler, num_workers=16)
Run Code Online (Sandbox Code Playgroud)

我想分别打印出训练和测试数据中每个班级的图像数量,如下所示:

在火车数据中:

  • 鞋子:20
  • 衬衫:14

在测试数据中:

  • 鞋子:4
  • 衬衫:3

我试过这个:

from collections import Counter
print(dict(Counter(sample_tup[1] for sample_tup in dataset.imgs)))
Run Code Online (Sandbox Code Playgroud)

但我收到了这个错误:

AttributeError: 'MyDataset' object has no attribute 'img'
Run Code Online (Sandbox Code Playgroud)

python torch pytorch dataloader

8
推荐指数
1
解决办法
3079
查看次数

类型错误:“numpy.int64”类型的对象没有 len()

我正在制作一个DataLoaderfrom DataSetin PyTorch

从加载DataFrame所有dtype作为开始np.float64

result = pd.read_csv('dummy.csv', header=0, dtype=DTYPE_CLEANED_DF)

这是我的数据集类。

from torch.utils.data import Dataset, DataLoader
class MyDataset(Dataset):
    def __init__(self, result):
        headers = list(result)
        headers.remove('classes')

        self.x_data = result[headers]
        self.y_data = result['classes']
        self.len = self.x_data.shape[0]

    def __getitem__(self, index):
        x = torch.tensor(self.x_data.iloc[index].values, dtype=torch.float)
        y = torch.tensor(self.y_data.iloc[index], dtype=torch.float)
        return (x, y)

    def __len__(self):
        return self.len
Run Code Online (Sandbox Code Playgroud)

准备train_loader and test_loader

train_size = int(0.5 * len(full_dataset))
test_size = len(full_dataset) - train_size
train_dataset, test_dataset = torch.utils.data.random_split(full_dataset, [train_size, test_size]) …
Run Code Online (Sandbox Code Playgroud)

python numpy dataset pandas pytorch

6
推荐指数
1
解决办法
3万
查看次数

从PyTorch DataLoader获取单个随机示例

如何从PyTorch获得单个随机exmaple DataLoader

如果我DataLoader给出了多个图像和标签的分页,我如何获得单个随机图像和标签?

请注意,我不希望每个小批量单个图像和标签,我想要一个例子.

python pytorch

5
推荐指数
5
解决办法
5085
查看次数

迭代 torch.utils.data.random_split 的子集

我目前正在加载一个包含人工智能训练数据的文件夹。子文件夹代表标签名称以及内部相应的图像。使用 pyTorch 的 ImageFolder 加载器可以很好地实现这一点。

def load_dataset():
    data_path = 'C:/example_folder/'

    train_dataset_manual = torchvision.datasets.ImageFolder(
        root=data_path,
        transform=torchvision.transforms.ToTensor()
    )

    train_loader_manual = torch.utils.data.DataLoader(
        train_dataset_manual,
        batch_size=1,
        num_workers=0,
        shuffle=True
    )

    return train_loader_manual

full_dataset = load_dataset()
Run Code Online (Sandbox Code Playgroud)

现在我想将此数据集分为训练数据集和测试数据集。我为此使用 random_split 函数:

training_data_size = 0.8

train_size = int(training_data_size * len(full_dataset))
test_size = len(full_dataset) - train_size
train_dataset, test_dataset = torch.utils.data.random_split(full_dataset, [train_size, test_size])
Run Code Online (Sandbox Code Playgroud)

full_dataset 是类型的对象torch.utils.data.dataloader.DataLoader。我可以用这样的循环来迭代它:

for batch_idx, (data, target) in enumerate(full_dataset):
    print(batch_idx)
Run Code Online (Sandbox Code Playgroud)

train_dataset类型的对象torch.utils.data.dataset.Subset。如果我尝试循环它,我会得到:

TypeError“DataLoader”对象不可下标:

for batch_idx, (data, target) in enumerate(train_dataset):
    print(batch_idx)
Run Code Online (Sandbox Code Playgroud)

我怎样才能循环它?我对 Python 比较陌生。

谢谢!

python loops pytorch

5
推荐指数
1
解决办法
5100
查看次数

使用 DataLoaders 在 PyTorch 中验证数据集

我想在 PyTorch 和 Torchvision 中加载 MNIST 数据集,将其分为训练、验证和测试部分。到目前为止,我有:

def load_dataset():
    train_loader = torch.utils.data.DataLoader(
        torchvision.datasets.MNIST(
            '/data/', train=True, download=True,
            transform=torchvision.transforms.Compose([
                torchvision.transforms.ToTensor()])),
        batch_size=batch_size_train, shuffle=True)

    test_loader = torch.utils.data.DataLoader(
        torchvision.datasets.MNIST(
            '/data/', train=False, download=True,
            transform=torchvision.transforms.Compose([
                torchvision.transforms.ToTensor()])),
        batch_size=batch_size_test, shuffle=True)
Run Code Online (Sandbox Code Playgroud)

如果训练数据集在DataLoader. 我想使用训练数据集中的最后 10000 个示例作为验证数据集(我知道我应该做 CV 以获得更准确的结果,我只想在这里快速验证)。

neural-network pytorch

5
推荐指数
1
解决办法
2597
查看次数

如何使用 torchvision.datasets.Imagefolder 将数据拆分为训练集和测试集?

在我的自定义数据集中,一种图像在一个文件夹中,torchvision.datasets.Imagefolder 可以处理,但如何将数据集拆分为训练和测试?

machine-learning image-processing computer-vision pytorch

4
推荐指数
1
解决办法
2355
查看次数