You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于PyTorch DataLoader的时序图像多步预测数据加载方案咨询

实现思路与核心代码示例

1. 自定义Dataset实现滑动窗口采样

这是实现需求的核心,通过自定义Dataset类,根据索引生成**输入窗口(10张)+ 预测窗口(10张)**的样本,天然支持0-19、1-20这类滑动窗口:

import torch
from torch.utils.data import Dataset

class TimeSeriesImageDataset(Dataset):
    def __init__(self, image_sequence, input_window=10, pred_window=10):
        self.imgs = image_sequence  # 按时间顺序排列的图像数组/列表
        self.in_len = input_window
        self.pred_len = pred_window
        self.total_window = self.in_len + self.pred_len
        # 计算有效索引的最大值,避免越界
        self.max_valid_idx = len(self.imgs) - self.total_window

    def __len__(self):
        # 返回所有有效滑动窗口的数量
        return self.max_valid_idx + 1

    def __getitem__(self, idx):
        if idx > self.max_valid_idx:
            raise IndexError("Index out of valid window range")
        # 取当前窗口的所有图像
        window_slice = slice(idx, idx + self.total_window)
        window_imgs = self.imgs[window_slice]
        # 拆分输入和预测部分
        input_imgs = window_imgs[:self.in_len]
        target_imgs = window_imgs[self.in_len:]
        # 转成张量(根据你的图像格式调整,比如PIL转Tensor)
        input_imgs = torch.tensor(input_imgs).float()
        target_imgs = torch.tensor(target_imgs).float()
        return input_imgs, target_imgs

2. DataLoader配置

因为是时间序列,必须关闭shuffle,保证窗口的时间顺序:

from torch.utils.data import DataLoader

# 假设你已经有按时间排序的图像序列image_list
dataset = TimeSeriesImageDataset(image_list)
dataloader = DataLoader(dataset, batch_size=1, shuffle=False, num_workers=2)

迭代这个dataloader时,每个返回的batch就是一组(输入10张, 目标10张)的样本,依次对应0-19、1-20、2-21这类滑动窗口。

3. 训练与验证切换逻辑

  • 方案1:拆分数据集
    把原始图像序列分成训练段和验证段,比如前N-20张做训练,最后20张做验证。训练时用训练集的dataloader,每完成一轮训练后,用验证集的dataloader做预测验证。
  • 方案2:按步数切换
    训练时记录当前处理的窗口索引,当处理到索引10(对应覆盖第10-29张图像)时,切换到验证模式,用验证集的dataloader生成样本做预测验证。

内容的提问来源于stack exchange,提问作者MM360

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 12:25:02