【问题标题】:how can i reshape these images as a 2d images tensors?我如何将这些图像重塑为二维图像张量?
【发布时间】:2021-03-02 23:17:34
【问题描述】:

我目前正在处理加载为张量的 rgb 图像,我想将它们重塑为二维张量以在它们上实现深度神经网络

我目前正在处理的形状是:

images.shape

torch.Size([32, 3, 244, 244])

我不知道如何处理最后两个字段以及如何展平 3 个颜色通道

【问题讨论】:

    标签: python tensorflow pytorch tensor


    【解决方案1】:

    您的要求太模糊,不清楚您想用这些图片实现什么目标。它们带有标签吗?如果没有,您是否要使用自动编码器等无监督方法?查看images 张量的形状:

    torch.Size([32, 3, 244, 244])
    

    这意味着这个张量中有 32 个颜色 (RGB) 图像。如果您对 2D 的定义意味着将它们转换为灰度图像,那么您可以使用 torchvision 库。

    images = [torchvision.transforms.ToPILImage()(img) for img in images]
    images = [torchvision.transforms.Grayscale()(img) for img in images]
    

    要将 PIL 灰度图像转换回火炬张量,请使用:

    images = [torchvision.transforms.ToTensor()(img) for img in images]
    images = torch.stack(images).to(device)
    

    现在,images 的形状将是 [32, 244, 244]

    不推荐在第一层展平高分辨率图像。因此,这就是为什么您在计算机视觉文献中看到人们在模型架构的开头应用了很少的卷积层,以便将它们下采样到更小尺寸(分辨率)的特征描述符。

    【讨论】:

      【解决方案2】:

      你可以做一些简单的事情

      image = image.view(image.shape[0], -1)
      

      这会将图像展平为具有两个维度的批量大小和其他三个维度的乘积。

      【讨论】:

      • 这将创建一个形状像 torch.Size([32, 178608]) 的图像,用这种大小的图像构建一个神经网络是否方便,我不知道,因为我仍然是一个初学者。就像我在最后一层有两个输出一样,需要多少隐藏层才能预测输出
      • 不,我以为你会先通过几个 CNN。通常只有在通过几个 CNN 层使其变小后才能将其展平。如果你不希望你的模型是 rgb,你可以像在第二个答案中那样使用灰度。
      猜你喜欢
      • 2017-09-12
      • 2018-10-19
      • 1970-01-01
      • 1970-01-01
      • 2022-01-18
      • 2014-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多