【问题标题】:Pytorch lightning validation set has different image sizes than training setPytorch 闪电验证集的图像大小与训练集不同
【发布时间】:2022-08-14 14:59:12
【问题描述】:

当我尝试训练 cnn 时,对于同一个数据加载器,我得到了不同的形状,我不知道为什么。这是我输入模型的形状的输出:

可以看到我的验证形状是[batch size, 1, image height and width]。出于某种原因,图像大小在最后一步发生了变化,批量大小为 1。当我事先使用 pytorch 闪电的健全性检查时也会发生同样的情况,我暂时禁用了它。这是获取数据加载器的 pytorch 闪电数据模块的外观:

class MRIDataModule(pl.LightningDataModule):
    def __init__(self, batch_size, data_paths):
        super().__init__()
        self.batch_size = batch_size
        self.data_paths = data_paths
        self.train_set = None
        self.val_set = None

    def setup(self, stage=None):
        loader = get_data_loader()
        self.train_set = loader(self.data_paths[\'train_dir\'], transform=None, dimension=DIMENSION, nslice=NSLICE)
        self.val_set = loader(self.data_paths[\'val_dir\'], transform=None, dimension=DIMENSION, nslice=NSLICE)

    def train_dataloader(self):
        return DataLoader(self.train_set, batch_size=self.batch_size, num_workers=NUM_WORKERS, shuffle=True)

    def val_dataloader(self):
        return DataLoader(self.val_set, batch_size=self.batch_size, num_workers=NUM_WORKERS, shuffle=False)

这是完整的代码,打印语句直接来自我模型的 forward 函数: https://colab.research.google.com/drive/1yfbCZlwNMqaW1egaTF8HHRD4Ko8iMTxr?usp=sharing

  • 您可以在引入打印语句的地方添加代码吗?以及MRIDataModule 模块的初始化?
  • @Ivan 将其添加为 google colab 文件,它在 pytorch 闪电的 train/val 步骤和我的模型的前向函数中
  • 很好,但请在此处包含相关代码而不是完整代码。还提供用于初始化MRIDataModule 的参数。

标签: pytorch conv-neural-network dataloader pytorch-lightning


【解决方案1】:

假设您的 val_dataloader 包含 2113 个数据实例(32(批量大小)x 66 个完整批次 + 1 个包含单个元素的批次)。如果您批处理 2113 个数据实例,您将拥有 2113 % 32 = 1。这意味着您最后一批将只包含一个元素,这就是您所看到的

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-05
    • 2013-06-18
    • 2020-02-29
    相关资源
    最近更新 更多