Skip to main content
 首页 » 编程设计

python之如何在前馈神经网络中使用 RGB 值

2025年05月04日19sharpest

我有 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)”。我是否应该将图像 reshape 为 (1, 1200) 维张量?预先感谢您的回答。

请您参考如下方法:

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

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

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

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