【问题标题】:how to use RGB values in feedforward neural network?如何在前馈神经网络中使用 RGB 值?
【发布时间】:2020-01-17 21:17:38
【问题描述】:

我有 ndarray (100, 20, 20, 3) 和 100 个相应标签形式的彩色图像数据集。将它们作为输入传递给完全连接的神经网络(不是 CNN)时,我应该如何处理 RGB 的 3 个值?平均它们可能会丢失一些信息,但如果不操纵它们,我的主要问题是批量大小,如下面的 pytorch 演示。

for epoch in range(n_epochs):
    for i, (images, labels) in enumerate(train_loader):
        # because of rgb values, now images is 3 times the length of labels
        images = Variable(images.view(-1, 400))
        labels = Variable(labels)
        optimizer.zero_grad()
        outputs = net(images)
        loss = criterion(outputs, labels)
        loss.backward()
        optimizer.step()

这将返回“ValueError:预期的输入 batch_size (300) 以匹配目标 batch_size (100)。”我应该将图像重塑为 (1, 1200) 维张量吗?提前感谢您的回答。

【问题讨论】:

    标签: python image pytorch


    【解决方案1】:

    使用灰度图像减少批量大小

    【讨论】:

      【解决方案2】:

      由于标签大小为(100,),因此您的批处理数据的形状应为(100, H, W, C)。我假设您的数据加载器正在返回一个形状为(100,20,20,3) 的张量。发生错误是因为您将张量重塑为(300,400)

      1. 检查您的网络架构输入张量形状是否为(20,20,3)

      2. 如果您的网络只能接受单通道图像,您可以先将 RGB 转换为灰度图像。

      3. 或者,修改您的网络架构以使其接受 3 通道图像。一种方便的方法是添加一个额外的层,将 3 个通道减少到 1 个通道,并且您不需要更改网络的其他部分。

      【讨论】:

      • 当前我的第一层只是 nn.Linear(input_nodes, hidden_​​nodes) 和 input_nodes 100。但是我可以制作我的输入数据 (100, 400*3)。我想知道这是否有意义。以及如何将 3 个通道减少到 1 个通道(最好不要添加层)?它是平均 R、G 和 B 吗?谢谢。
      • 有很多方法可以将 rgb 转换为灰度图像。 This 会很有用。一个要点是简单地平均三个值 (R+G+B)/3
      • 谢谢。新手问题:不做成400*3的原因是什么?
      • 你可以这样做。但是通常情况下,全连接层会比卷积层引入更多的参数。
      猜你喜欢
      • 1970-01-01
      • 2015-06-04
      • 1970-01-01
      • 2016-11-29
      • 2018-12-11
      • 2020-07-03
      • 2018-09-25
      • 2020-04-16
      • 1970-01-01
      相关资源
      最近更新 更多