neural-network - 使用 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)
如果训练数据集DataLoader
在 我想使用训练数据集中的最后 10000 个示例作为验证数据集(我知道我应该做 CV 以获得更准确的结果,我只想在这里快速验证)。
解决方案
在 PyTorch 中将训练数据集拆分为训练和验证结果比它应该做的要困难得多。
首先,将训练集拆分为训练和验证子集(类Subset
),它们不是数据集(类Dataset
):
train_subset, val_subset = torch.utils.data.random_split(
train, [50000, 10000], generator=torch.Generator().manual_seed(1))
然后从这些数据集中获取实际数据:
X_train = train_subset.dataset.data[train_subset.indices]
y_train = train_subset.dataset.targets[train_subset.indices]
X_val = val_subset.dataset.data[val_subset.indices]
y_val = val_subset.dataset.targets[val_subset.indices]
请注意,这种方式我们没有对象Dataset
,因此我们不能使用DataLoader
对象进行批量训练。如果您想使用 DataLoaders,它们直接与子集一起使用:
train_loader = DataLoader(dataset=train_subset, shuffle=True, batch_size=BATCH_SIZE)
val_loader = DataLoader(dataset=val_subset, shuffle=False, batch_size=BATCH_SIZE)
推荐阅读
- python - python Serialport写入十进制
- ruby - 与 ruby net/ssh gem 建立连接后如何进行 SSH
- apache-camel - 如何将肥皂剧保存到 apache camel 中的文件?
- xamarin - 如何在xamarin表单web视图android端传递json数据
- mysql - 32位windows安装MYSQL工作台失败
- python - 关于 pytesseract
- android-studio - 如何在android studio中禁用文件工具栏
- python - 在比较两个列表之前排序
- python - 我想向 QVBoxLayout 添加滚动条
- python - 如何使用熊猫在 jupyter 单元格中显示多个表格/图表?