Python 从CNN层获取过滤器值

Python 从CNN层获取过滤器值,python,tensorflow,conv-neural-network,keras-layer,autoencoder,Python,Tensorflow,Conv Neural Network,Keras Layer,Autoencoder,我有以下模型(例如) 在我的自动编码器模型中,我有几个这样的层次。我对第一层的过滤器特别感兴趣。共有64个过滤器,每个大小为3x3 为了获得过滤器,我尝试使用以下代码: x.layers[0].get_weights()[0] 但我得到的错误如下: AttributeError Traceback (most recent call last) <ipython-input-166-96506292d6d7> in <mo

我有以下模型(例如)

在我的自动编码器模型中,我有几个这样的层次。我对第一层的过滤器特别感兴趣。共有64个过滤器,每个大小为3x3

为了获得过滤器,我尝试使用以下代码:

x.layers[0].get_weights()[0]
但我得到的错误如下:

AttributeError                            Traceback (most recent call last)
<ipython-input-166-96506292d6d7> in <module>()
      4 x = Conv2D(64, (3, 3), strides=(1, 1), activation='relu', padding='same')(input_img)
      5 
----> 6 x.layers[0].get_weights()[0]

AttributeError: 'Tensor' object has no attribute 'layers'

我是CNN的新手,我甚至不知道get_weights函数是否可以帮助我获得过滤器值。如何获取过滤器的值?

此时,您的代码正在层定义本身上调用
layers
函数

首先需要编译模型,然后可以在模型上使用
layers
函数来检索特定层的权重

就你而言:

weights = model.layers[1].get_weights()
将为您提供第一个卷积层的权重集

您可以在编译模型后使用:

model = Model(inputs=input_img, output=b)

其中
b
指模型中的最后一层。

此时,代码正在调用层定义本身的
函数

首先需要编译模型,然后可以在模型上使用
layers
函数来检索特定层的权重

就你而言:

weights = model.layers[1].get_weights()
将为您提供第一个卷积层的权重集

您可以在编译模型后使用:

model = Model(inputs=input_img, output=b)

其中
b
表示模型中的最后一层。

可以通过调用中的索引[1]访问卷积层以获取权重,因为第一个元素现在将是您的输入层。rit给我一个错误索引器:列表索引超出范围。另外,我想让第一层上的过滤器在这些过滤器上应用几何平移。我认为在我编译之后这是不可能的。你怎么看?正如评论中提到的,在输入层调用函数会导致错误,因为输入层没有权重。我不确定我是否理解你评论的第二部分。您是否试图在模型中创建第一个卷积层的“几何平移”(您必须对此进行澄清)层?您是否意识到该模型最初是使用随机权重编译的,首先需要进行训练?因为我看不出有理由对包含随机权重的过滤器应用转换,所以我在按照您在回答中显示的方式编译模型后进行了转换,但仍然得到了错误。可以通过调用中的索引[1]访问卷积层以获得_权重,由于第一个元素现在将是您的输入层,RIT给了我一个错误索引器:列表索引超出范围。另外,我想让第一层上的过滤器在这些过滤器上应用几何平移。我认为在我编译之后这是不可能的。你怎么看?正如评论中提到的,在输入层调用函数会导致错误,因为输入层没有权重。我不确定我是否理解你评论的第二部分。您是否试图在模型中创建第一个卷积层的“几何平移”(您必须对此进行澄清)层?您是否意识到该模型最初是使用随机权重编译的,首先需要进行训练?因为我看不出有任何理由对包含随机权重的过滤器应用转换,所以我在按照您在答案中显示的方式编译模型后就这样做了,但仍然出现了错误。