了解 CNN 中的 batch_size

lum*_*uri 4 python conv-neural-network pytorch

假设我在 Pytorch 中有一个 CNN 模型和以下大小的 2 个输入:

  • input_1: [2, 1, 28, 28]
  • input_2: [10, 1, 28, 28]

注意事项

  • 重申一下,input_1 是batch_size == 2,input_2 是batch_size == 10。
  • Input_2input_1的超集。即input_2包含input_1中相同位置的 2 张图像。

我的问题是:CNN 如何处理两个输入中的图像?即 CNN 是否按顺序处理批次中的每个图像?或者它是否将批量大小的所有图像连接起来,然后按照通常的方式执行卷积?

我问的原因是因为:

  • CNN(input_1) != CNN(input_2)[:2] 的输出

也就是说,batch_size 的差异导致相同位置的两个输入的 CNN 输出略有不同。

Jat*_*aki 6

CNN是卷积神经网络的总称。根据特定的架构,它可能会做不同的事情。CNN 的主要构建块是卷积,它不会在批处理项目之间引起任何“串扰”,而像ReLU这样的逐点非线性也不会引起任何“串扰” 。然而,大多数架构还涉及其他操作,例如归一化层——可以说最流行的是批处理规范,它确实引入了串扰。许多模型还将使用dropout,它在eval模式之外随机表现(默认模型在训练中模式)。上述两种效果都可能导致上述观察到的结果,以及可能导致批次间串扰的其他自定义操作。

除此之外,由于数字精度问题,您的代码可能不会给出完全相同的结果,即使它没有任何跨批处理操作。此错误非常小,但足以在使用CNN(input_1) == CNN(input_2)[:2]. 最好使用allclose合适的 epsilon来代替。