我创建了一个使用 vgg16 作为基础的微调网络。我正在关注第 5.4.2 节使用 Python 在深度学习中可视化 CovNet 过滤器(这与 Keras 博客上的指南非常相似,以在此处可视化 convnet 过滤器)。
该指南仅使用 vgg16 网络。我的微调模型使用 vgg16 模型作为基础,例如:
model.summary()
层(类型)输出形状参数#
=========================================== ============================= vgg16(型号)(无、4、4、512)14714688
_______________________________________________________________________ flatten_1(展平)(无, 8192) 0
___________________________________________________________________ 密集_7 (密集) (无, 256) 2097408
________________________________________________________________________ 密集_8 (密集) (无, 3) 771
======================= ================================================= 总参数:16,812,867 可训练参数:16,812,867 不可训练参数:0
当我运行这条线时遇到了一个问题:
grads = K.gradients(loss, model.input)[0]当我使用我的微调网络时,我得到的结果是“NoneType”
以下是指南中的代码:
> from keras.applications import VGG16 from keras import backend as K
>
> model = VGG16(weights='imagenet',
> include_top=False)
>
> layer_name = 'block3_conv1' filter_index = 0
>
> layer_output = model.get_layer(layer_name).output loss =
> K.mean(layer_output[:, :, :, filter_index])
>
> grads = K.gradients(loss, model.input)[0]
为了重现我的微调模型,我使用了完全相同的代码,除了我显然更改了我导入的模型:
model = keras.models.load_model(trained_models_dir + 'fine_tuned_model.h5')
...而且我还必须索引嵌套的模型对象(我的第一层是一个模型对象,如上所示)以获得“block2_con1”层:
my_Model_object = 'vgg16'
layer_name = 'block3_conv1'
filter_index = 0
layer_output =
model.get_layer(my_Model_object).get_layer(layer_name).output
知道为什么grads = K.gradients(loss, model.input)[0]在我的微调网络上运行会导致“NoneType”吗?
谢谢。