【问题标题】:How to put a list of tensor into a new tensor in pytorch?如何将张量列表放入pytorch中的新张量中?
【发布时间】: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


【解决方案1】:

你必须使用 torch.cat(input1, input2, dim)

【讨论】:

    猜你喜欢
    • 2020-08-05
    • 2019-07-29
    • 2019-04-25
    • 2021-06-18
    • 1970-01-01
    • 2021-10-11
    • 2021-06-27
    • 2022-10-17
    相关资源
    最近更新 更多