如何计算以下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=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)