【发布时间】:2021-05-24 03:51:07
【问题描述】:
如何将张量列表合并为单个张量?
我有一个包含 64 个图像(128x128,RGB)的列表,我想创建一批这样大小的图像:torch.Size([64, 3, 128, 128])
我尝试使用torch.stack(),但如果不对其进行迭代,我无法获取列表的所有元素。
我该怎么做?
lfw_dataset = ImageFolder(os.path.join(root_dir), transform=test_transform)
lfw_dataset_train, lfw_dataset_val = torch.utils.data.random_split(lfw_dataset_train1, [train_values, validation_values])
train_loader = DataLoader(lfw_dataset_train, batch_size, num_workers=4, shuffle=True)
val_loader = DataLoader(lfw_dataset_val, batch_size, num_workers=4, shuffle=False)
# Define dictionary of loaders
loaders = {"train": train_loader,
"val": val_loader}
positive_list= []
negative_list= []
positive_img = []
negative_img = []
for i, (input, labels) in enumerate(loaders["train"]):
for num, x in enumerate(labels):
target = x.item()
k = [i for i, (imgs, label_pos) in enumerate(lfw_dataset.imgs) if label_pos==target]
group_pos = (target, k)
positive_list.append(group_pos)
for i, (imgs, label_neg) in enumerate(lfw_dataset.imgs):
if label_neg!=target:
j = [i]
break
group_neg = (target, j)
negative_list.append(group_neg)
anchor_img=input[num]
positive = random.choice(positive_list[num][1])
negative = random.choice(negative_list[num][1])
positive_img.append(lfw_dataset[positive][0])
negative_img.append(lfw_dataset[negative][0])
【问题讨论】:
-
如果可以这样获取所有元素,迭代会有什么问题?
-
如果我正确理解您的问题
torch.stack()应该可以。你能显示你绑定的代码吗? -
@mkrieger1 因为torch.stack() 需要一次运行所有元素
-
@Akavall 当然,我把它放在这里:pastebin.com/SmUKkKLQ
-
@Akavall 如你所见,我创建了一个正负图像列表,但现在我必须创建一个批次(因此,我必须创建一个具有该大小的张量)跨度>
标签: python list pytorch tensor