计算3D CNN的输出形状

时间:2019-03-10 12:35:15

标签: keras neural-network conv-neural-network

如何计算下面的CNN和最大合并层的形状? (用喀拉拉邦语写成)

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。

1 个答案:

答案 0 :(得分:1)

如果不知道确切的输入尺寸,就不可能知道确切的输出。但是可以根据输入尺寸来计算输出尺寸。 formula is the same as for 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)