gpt4 book ai didi

keras - 使用我自己的微调网络可视化 ConvNet 过滤器,在运行 : K. gradients(loss, model.input)[0] 时产生 "NoneType"

转载 作者:行者123 更新时间:2023-12-02 01:01:25 24 4
gpt4 key购买 nike

我创建了一个微调网络,它使用 vgg16 作为基础。我正在关注 Deep Learning With Python 中的 5.4.2 可视化 CovNet 过滤器部分(这与 Keras 博客上的可视化 convnet 过滤器指南非常相似 here )。

本指南仅使用 vgg16 网络。我的微调模型使用 vgg16 模型作为基础,例如:

model.summary()

Layer (type)                 Output Shape              Param #
=======================================================================
vgg16 (Model) (None, 4, 4, 512) 14714688
_______________________________________________________________________
flatten_1 (Flatten) (None, 8192) 0
_______________________________________________________________________
dense_7 (Dense) (None, 256) 2097408
_______________________________________________________________________
dense_8 (Dense) (None, 3) 771
========================================================================
Total params: 16,812,867
Trainable params: 16,812,867
Non-trainable params: 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”吗?

谢谢。

最佳答案

已解决:我不得不使用:

grads = K.gradients(loss, model.get_layer(my_Model_object).get_layer('input_1').input)[0] 

而不仅仅是:

grads = K.gradients(loss, model.input)[0]

这令人困惑,因为两者都是

model.get_layer(my_Model_object).get_layer('input_1').input)[0]

model.input[0]

打印相同的东西并且是相同的类型。

关于keras - 使用我自己的微调网络可视化 ConvNet 过滤器,在运行 : K. gradients(loss, model.input)[0] 时产生 "NoneType",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50310063/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com