【发布时间】:2020-05-14 07:30:03
【问题描述】:
model 架构是 Conv2D with 32 filters -> Flatten -> Dense -> Compile -> Fit
我使用删除了第一层的最后一个过滤器和该模型中相应的全连接层
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 的新模型:
# Input stays the same
model_1 = Sequential()
# New modified conv layer
model_1.add(Conv2D(31, kernel_size=(3, 3),
activation='relu',
input_shape=input_shape,
kernel_initializer='he_normal'))
model_1.add(Flatten())
model_1.add(Dense(10, activation='softmax'))
model_1.layers[0].set_weights([w,b])
model_1.layers[2].set_weights([w_2,b_2])
model_1.compile(loss="categorical_crossentropy",
optimizer="Adam",
metrics=['accuracy'])
我可以通过执行 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%,有什么想法吗?
【问题讨论】:
标签: keras deep-learning conv-neural-network tensor