Как отобразить каждый слой в keras?

#python #tensorflow #keras #deep-learning #neural-network

#python #тензорный поток #keras #глубокое обучение #нейронная сеть

Вопрос:

У меня есть очень простая модель в keras. Я определил функцию для получения сети vgg19, а затем соединил ее с плоским слоем, а затем с плотным слоем. Когда я печатаю сводку модели, она не отображает каждый слой в сети vgg19. Есть ли какой-либо способ показать это без изменения функции в vgg19? Приветствуются любые советы.

 import keras
from keras.layers import Input, Dense, Flatten
from keras.models import Model


input = Input(shape=(32,32,3), name="main_input")

def Model_vgg19(input_shape,input):
    vgg19_model = keras.applications.VGG19(
        input_shape=(32,32,3),
        weights='imagenet',
        include_top=False
    )(input)
    return vgg19_model

model = Model_vgg19((32,32,3),input)
model = Flatten()(model)
model = Dense(10, activation='relu', name='features_inc')(model)

model = Model(input, model)
model.summary()
  

Результат выглядит так

 Model: "model_1"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
main_input (InputLayer)      (None, 32, 32, 3)         0         
_________________________________________________________________
vgg19 (Model)                (None, 1, 1, 512)         20024384  
_________________________________________________________________
flatten_1 (Flatten)          (None, 512)               0         
_________________________________________________________________
features_inc (Dense)         (None, 10)                5130      
=================================================================
Total params: 20,029,514
Trainable params: 20,029,514
Non-trainable params: 0
_________________________________________________________________

Process finished with exit code 0

  

Комментарии:

1. с помощью модели. слои [1].сводка () вы можете распечатать сводку vgg

Ответ №1:

Вы можете использовать метод get_layer(имя, индекс) для вашего типа модели. вы можете найти более подробную информацию об этом здесь https://www.tensorflow.org/api_docs/python/tf/keras/Model#get_layer

для вашего кода вы можете использовать это:

 model.get_layer(index=1).summary()
  

С помощью этого вы получите сводную информацию о модели VGG19 (которая имеет индекс 1 в вашей модели). Удачи!

Комментарии:

1. Вы также можете использовать имя слоя, model.get_layer('vgg19').summary()

Ответ №2:

вы можете попробовать

 vgg19_model = keras.applications.VGG19(
        input_shape=(32,32,3),
        weights='imagenet',
        include_top=False
    )
x=vgg19_model.output
x=Flatten()(x)
# use `output =` instead `output == `
output = Dense(10, activation='relu', name='features_inc')(x)
model=Model(inputs=vgg19_model.input, outputs=output)
  

Просто примечание. Модель VGG имеет пул параметров. Если вы установите pooling=’max’, выходной слой будет максимальным объединяющим слоем, который вы можете поместить непосредственно в плотный слой, поэтому вам не нужно включать слой flatten .