理解python命令进行深入学习时的困惑

理解python命令进行深入学习时的困惑,python,deep-learning,pytorch,Python,Deep Learning,Pytorch,我最近开始用pytorch学习深度学习 我对这些代码行有问题 参数train=True表示它将取出训练数据 但50%的培训需要多少数据? 我们如何指定用于培训的数据量。同样,无法理解批处理大小和num\u workers,这在加载数据时意味着什么?batch\u size参数是否与深度学习培训中使用的参数类似 download=True, transform=transform) trainloader = torc

我最近开始用pytorch学习深度学习

我对这些代码行有问题

参数
train=True
表示它将取出训练数据

但50%的培训需要多少数据?

我们如何指定用于培训的数据量。同样,无法理解
批处理大小
num\u workers
,这在加载数据时意味着什么?
batch\u size
参数是否与深度学习培训中使用的参数类似

                                        download=True, transform=transform)
trainloader = torch.utils.data.DataLoader(trainset, batch_size=4,
                                          shuffle=True, num_workers=2)

testset = torchvision.datasets.CIFAR10(root='./data', train=False,
                                       download=True, transform=transform)
testloader = torch.utils.data.DataLoader(testset, batch_size=4,
                                         shuffle=False, num_workers=2)

batch_size
是您想要的批次(您提供的数据集中的数据组)的大小,
num_workers
是在批次上工作的工人数量,基本上是多处理工人

但50%的培训需要多少数据

DataLoader不提供任何方法来控制要提取的样本数量。您必须使用切片迭代器的典型方法

最简单的方法(没有任何库)是在达到所需的样本数后停止

nsamples = 10000
for i, image, label in enumerate(train_loader):
    if i > nsamples:
        break
# Your training code here.
或者,您可以使用itertools.islice获取前10k个样本。像这样

for image, label in itertools.islice(train_loader, stop=10000):

    # your training code here.

您可以参考此

如果之前未拆分数据,列车装载机将使用整个列车文件夹。您可以通过拆分数据来指定培训量,请参见:

from torchvision import datasets

# convert data to a normalized torch.FloatTensor
transform = transforms.Compose([
    transforms.ToTensor(),
    transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))
    ])

# choose the training and test datasets
train_data = datasets.CIFAR10('data', train=True,
                              download=True, transform=transform)
test_data = datasets.CIFAR10('data', train=False,
                             download=True, transform=transform)
valid_size = 0.2

# obtain training indices that will be used for validation
num_train = len(train_data)
indices = list(range(num_train))
np.random.shuffle(indices)
split = int(np.floor(valid_size * num_train))
train_idx, valid_idx = indices[split:], indices[:split]

# define samplers for obtaining training and validation batches
train_sampler = SubsetRandomSampler(train_idx)
valid_sampler = SubsetRandomSampler(valid_idx)

# prepare data loaders (combine dataset and sampler)
train_loader = torch.utils.data.DataLoader(train_data, batch_size=batch_size,
    sampler=train_sampler, num_workers=num_workers)
valid_loader = torch.utils.data.DataLoader(train_data, batch_size=batch_size, 
    sampler=valid_sampler, num_workers=num_workers)
test_loader = torch.utils.data.DataLoader(test_data, batch_size=batch_size, 
    num_workers=num_workers)```
批处理大小是通过迭代(历元)捕获的文件数。例如,如果训练大小为1000,批处理大小为10,则每个历元将包含100次迭代

工人数量用于对批次数据进行预处理。更多的工人将消耗更多的内存,工人有助于加快输入和输出过程。 num_workers=0表示将在需要时加载数据,
num_workers>0表示您的数据将按照您定义的worker数进行预处理。

在上述代码中,它将数据拆分为60-20-20,用于培训、验证和测试?意味着批量大小,与我们通常用于深度学习的一样,不是吗?第二,我如何定义初始变量;如
列车数据
。。我使用的是上面的教程,我想把你的代码放在其中。对于你的第一个问题:算法将
train\u数据
分为80%用于训练,20%用于验证(在训练过程中进行验证)。因此,我有我的
测试数据
(我的神经网络以前从未见过的数据集),在我的神经网络训练后,她被用来测试她的准确性。是的,批量大小相同。关于第二个问题:
train\u data
是您的数据加载器。在这段代码中,我使用的是已经由torchvision提供的CIFAR10数据集。我将编辑我的答案以包含这部分代码。结构是相同的,但是您必须指定数据集的路径、批大小、工作人员的数量,如果您想洗牌图像等等。