按顺序拆分配对张量为训练测试集时遇图像裁剪问题求助
解决Pix2Pix配对张量的训练/测试拆分问题
核心思路:保配对、防裁剪
train_test_split会打乱顺序破坏配对关系,直接手动按索引拆分就行——关键是对两个张量用完全一致的切片/索引规则,同时确保切片操作只针对样本维度,不碰图像本身的尺寸维度。
具体解决方法
1. 先确认张量维度
正常图像张量结构应该是(样本总数, 图像高度, 图像宽度, 通道数),第一维是样本数量,后面是图像本身的维度。如果你的张量维度顺序不对(比如通道数在前),切片很容易误改图像尺寸,先调整维度到标准格式。
2. 按比例连续拆分(最常用)
比如按8:2的比例拆分训练/测试集,直接对样本维度做切片,两个张量用完全相同的切片范围:
# 计算拆分点,比如取80%作为训练集 split_idx = int(len(real_image_tensors) * 0.8) # 训练集:前80%的样本,保持real和drawing的索引完全对应 train_real = real_image_tensors[:split_idx] train_drawing = drawing_tensors[:split_idx] # 测试集:后20%的样本,同样配对无误 test_real = real_image_tensors[split_idx:] test_drawing = drawing_tensors[split_idx:]
3. 非连续但仍配对的随机拆分(可选)
如果不想只用后20%当测试集,想随机选但保持配对,可以先生成固定索引数组再提取:
import numpy as np # 生成所有样本的索引数组 indices = np.arange(len(real_image_tensors)) # 设置随机种子保证结果可复现,随机选80%的索引作为训练集 np.random.seed(42) train_indices = np.random.choice(indices, size=split_idx, replace=False) # 测试集索引是剩下的部分 test_indices = np.setdiff1d(indices, train_indices) # 用索引提取样本,确保real和drawing一一对应 train_real = real_image_tensors[train_indices] train_drawing = drawing_tensors[train_indices] test_real = real_image_tensors[test_indices] test_drawing = drawing_tensors[test_indices]
之前切片出现裁剪的原因
大概率是你误操作了图像的高度/宽度维度,比如写成了real_image_tensors[:, :split_idx]——这种写法会裁剪图像的宽度,而不是拆分样本。记住:要对第一维(样本数维度)做切片。
内容的提问来源于stack exchange,提问作者Spencer
相关产品推荐
相关产品推荐

