去除张量的第一个维度(批量维度--batch_size)是因为这个维度在处理模型的特征时通常不需要参与总元素数量的计算,。在深度学习和机器学习中,输入数据通常会以一个 batch(批次)的形式进行处理,数据的形状通常是 (batch_size, height, width, channels),其中:
batch_size(第一个维度):表示一次前向传播中处理的样本数量。height和width(第二、三维度):表示每个样本(例如图像)的空间尺寸。channels(第四个维度):表示特征图的通道数量(例如,对于RGB图像有3个通道,深度特征图可以有多个通道)。
为什么要去掉批量维度?
-
计算特征数量:
- 在构建全连接层时,需要知道每个样本的特征数量,而不是整个批次的特征。如果将批量维度也考虑在内,会得到总特征数量乘以批量大小,导致无意义的输出。
- 例如,如果特征图的输出为形状
(batch_size, height, width, channels),则每个样本的特征数量是height * width * channels。去掉批量维度后,得到的形状为(height, width, channels)。
-
展平操作:
- 在卷积神经网络中,卷积层的输出通常是多维的(例如,图像块),而在进入全连接层之前,通常需要展平这些输出,使得每个样本的特征可以表示为一个一维向量。
- 所以去除批量维度后,计算展平后的长度(特征数量)是非常重要的。
-
保持一致性和可扩展性:
- 在模型的不同阶段,批量大小可能会有所不同。在构建模型时,使用绝对数值(如每个样本的特征数量)而不是考虑批量大小的数值,使模型能够在不同的批量输入条件下保持一致性。
举例说明
假设该全连接层的上一层为self.pool5,若 self.pool5 的形状为 (32, 7, 7, 512),其中 32 是批量大小。若去掉第一个维度,剩下的形状是 (7, 7, 512)。
- 计算元素数量:( 7 * 7 * 512 = 25088 ),这里是每个样本的特征数。
- 如果我们不去掉批量维度,可能会错误得到 ( 32 * 25088 = 803456 ),这并不代表单个样本的特征数量,因为其中掺入了批次的特征。
在实施模型训练或推理时,模型每次都会处理一个批次的数据,我们通常只关心每个样本的特征数量,因此去掉批量维度是我们一般情况下更好的选择。
66

被折叠的 条评论
为什么被折叠?



