Keras 当我移除一个过滤器及其相关权重时,为什么CNN的累积性会下降?

Keras 当我移除一个过滤器及其相关权重时,为什么CNN的累积性会下降?,keras,deep-learning,conv-neural-network,tensor,Keras,Deep Learning,Conv Neural Network,Tensor,模型架构是Conv2D,有32个过滤器->展平->密集->编译->拟合 在这个模型中,我使用 w,b = model.layers[0].get_weights() w = np.delete(w, [32], -1) b = np.delete(b, [32], 0) w_2,b_2 = model.layers[2].get_weights() w_2 = w_2[:20956,:] 我使用20956,因为第一层的输出是26 x 26 x 31,这是2D中的图像尺寸乘以多个通道 我使用以

模型架构是Conv2D,有32个过滤器->展平->密集->编译->拟合

在这个模型中,我使用

w,b = model.layers[0].get_weights()
w = np.delete(w, [32], -1)
b = np.delete(b, [32], 0)

w_2,b_2 = model.layers[2].get_weights()
w_2 = w_2[:20956,:]
我使用20956,因为第一层的输出是26 x 26 x 31,这是2D中的图像尺寸乘以多个通道

我使用以下方法创建了一个名为model_1的新模型:

我可以通过执行model_1.layers[0]。get_weights[0]==model.layers[0]。get_weights[0][:,:,:,:,:31]和model_1.layers[2]。get_weights[0]==model.layers[2]。get_weights[0][:20956,:],返回True

当我这样做的时候

score = model_1.evaluate(x_test_reshape, y_test)

print('Test loss:', score[0])
print('Test accuracy:', score[1])

score = model.evaluate(x_test_reshape, y_test)

print('Test loss:', score[0])
print('Test accuracy:', score[1])

准确率从98%下降到10%,你知道为什么吗?

你实际上是在从最后一个卷积层移除一个通道。从直觉上看,这似乎不是什么大不了的事,剩下的31个频道仍将使网络表现良好。实际上,所有卷积通道都在紧随其后的密集层中相互作用,但由于这种相互作用缺少一个信息通道,因此对其进行了优化,其精度将下降

另一种思考方法是将网络视为连续步骤的函数,这些步骤将图像作为输入,将标签作为输出,准确率为98%。删除此函数中的部分1/32计算将改变结果,并且可能会产生更糟糕的结果,因为函数在这些计算仍然存在的情况下进行了优化。您正在删除函数的一部分,该部分显然对达到高精度至关重要

您可以通过在短时间内使用31个通道训练新模型来测试这一点。由于新模型只需重新学习已删除通道的功能,因此应能快速再次达到高性能

score = model_1.evaluate(x_test_reshape, y_test)

print('Test loss:', score[0])
print('Test accuracy:', score[1])

score = model.evaluate(x_test_reshape, y_test)

print('Test loss:', score[0])
print('Test accuracy:', score[1])