计算3D CNN的输出形状



如何计算以下CNN和最大层层的形状?(用keras编写)

model.add(Conv3D(128, (3, 3, 3), activation = "relu"))
model.add(MaxPooling3D((2, 2, 2)))
model.add(Conv3D(128, (3, 3, 3), activation = "relu"))
model.add(MaxPooling3D((2, 2, 2)))

谢谢! 编辑:输入形状为39x100x100。

不知道确切的输入尺寸,就不可能说出确切的输出。但是可以根据输入维度计算输出维度。公式与2D Conv:

相同
Out = (W−F+2P)/S+1

其中W是输入量大小,F是内核大小,S是步幅,而P是填充。由于您没有定义大步或填充,默认情况下它们等于 S=1P="valid"(仅使用必要的值完成边框,以完成内核大小和输入尺寸之间可能的不匹配),将方程式简化为:

Out = W - F + 1  

因此,将XYZ作为输入尺寸:

new_X = X - 3 + 1
new_Y = Y - 3 + 1
new_Z = Z - 3 + 1

新输出将为(new_X, new_Y, new_Z, 128)。最后一个128是因为您的过滤器数量。随后在轮询层之后,它遵循相同的卷积公式。由于您没有定义大步,因此在每个维度中只会降低一个单元:

polled_X = new_X - 2 + 1
polled_Y = new_Y - 2 + 1
polled_Z = new_Z - 2 + 1

要获取最终输入,只需重复上述操作即可获取以下最终输出:

final_X = ((((X - 3 + 1) - 2 + 1) - 3 + 1) - 2 + 1) = X - 6
final_Y = ((((Y - 3 + 1) - 2 + 1) - 3 + 1) - 2 + 1) = Y - 6
final_Z = ((((Z - 3 + 1) - 2 + 1) - 3 + 1) - 2 + 1) = Z - 6

请记住,轮询层不会影响堆叠过滤器的尺寸,因此您的最终输出将为(X - 6, Y - 6, Z - 6, 128)

最新更新