Получение значений фильтров из слоев CNN - PullRequest
1 голос
/ 26 марта 2019

У меня есть следующая модель (например)

input_img = Input(shape=(224,224,1)) # size of the input image
x = Conv2D(64, (3, 3), strides=(1, 1), activation='relu', padding='same')(input_img)

У меня есть несколько таких слоев в моей модели автоэнкодера. Особенно меня интересуют фильтры первого слоя. Всего имеется 64 фильтра размером 3х3.

Чтобы получить фильтры, я попытался использовать следующий код:

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'

Я не использую последовательную модель. Моя модель будет сформирована с помощью следующей команды после нескольких таких слоев.

 model = Model()

Я новичок в CNN и даже не знаю, может ли функция get_weights помочь мне получить значение фильтров. Как мне получить значение фильтров?

1 Ответ

0 голосов
/ 26 марта 2019

В данный момент ваш код вызывает функцию layers для самого определения слоя.

Сначала необходимо скомпилировать модель, а затем вы можете использовать функцию layers в модели для получения весов определенного слоя.

В вашем случае:

weights = model.layers[1].get_weights()

даст вам набор весов 1-го сверточного слоя

, который вы можете использовать после компиляции модели:

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

Где b относится к последнему слою вваша модель.

...