如何计算下面的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。
答案 0 :(得分:1)
如果不知道确切的输入尺寸,就不可能知道确切的输出。但是可以根据输入尺寸来计算输出尺寸。 formula is the same as for 2D conv:
Out = (W−F+2P)/S+1
其中W
是输入卷大小,F
是内核大小,S
是跨步,P
是填充。由于您未定义步幅或填充,因此默认情况下它们等于S=1
和P="valid"
(仅使用必要的值来完成边界,以完成内核大小和输入大小之间可能的不匹配) ,将等式简化为:
Out = W - F + 1
因此,考虑将X
,Y
和Z
作为您的输入尺寸:
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)