我有 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)。
检查您的网络架构,输入张量形状是否为
(20,20,3)。如果您的网络只能接受单 channel 图像,您可以先将 RGB 图像转换为灰度图像。
或者,修改您的网络架构,使其接受 3 channel 图像。一种方便的方法是添加一个额外的层,将 3 个 channel 减少到 1 个 channel ,并且您不需要更改网络的其他部分。
