Keras 使用model.pop()更改模型';s摘要,但不影响输出

Keras 使用model.pop()更改模型';s摘要,但不影响输出,keras,keras-layer,Keras,Keras Layer,我正在尝试从我以前训练过的模型中删除顶层。 这是我使用的代码: import os import h5py import numpy as np from keras.preprocessing.image import ImageDataGenerator from keras.models import Sequential from keras.layers import Convolution2D, MaxPooling2D, ZeroPadding2D from keras.layer

我正在尝试从我以前训练过的模型中删除顶层。 这是我使用的代码:

import os
import h5py
import numpy as np
from keras.preprocessing.image import ImageDataGenerator
from keras.models import Sequential
from keras.layers import Convolution2D, MaxPooling2D, ZeroPadding2D
from keras.layers import Activation, Dropout, Flatten, Dense

# KERAS_BACKEND=theano python
import keras
keras.backend.set_image_dim_ordering("th")
img_width, img_height = 150, 150
data_dir = '//shared_directory/projects/try_CD/data/validation'

nb_train_samples = 2000
nb_validation_samples = 800
nb_epoch = 50



def make_bottleneck_features(model):
    datagen = ImageDataGenerator(rescale=1./255)
    generator = datagen.flow_from_directory(
            data_dir,
            target_size=(img_width, img_height),
            batch_size=32,
            class_mode=None,
            shuffle=False)
    bottleneck_features = model.predict_generator(generator, nb_validation_samples)
    return (bottleneck_features)


model=keras.models.load_model('/shared_directory/projects/think_exp/CD_M1.h5')
A = make_bottleneck_features(model)
model.summary()    
for i in range (6):  
    model.pop()    

B = make_bottleneck_features(model)
model.summary() 
通过比较对model.summary()的两次调用的结果,我可以看到最上面的6层确实被删除了

但是,模型的输出(保存到A和B)在丢弃这些图层后不会更改

这种差异的根源是什么? 如何检索所需图层的输出,而不是整个模型的输出


提前谢谢

您不能像那样删除层,为了使其产生效果,您需要重新编译模型(AKA model.compile)


但这不是从中间层获得输出的最佳方法,您可以使用K.function(其中K是keras.backend)从输入层构建一个函数,然后调用该函数。答案中提供了更多详细信息。

您不能像这样删除层,为了使其产生效果,您需要重新编译模型(AKA model.compile)

但这不是从中间层获得输出的最佳方法,您可以使用K.function(其中K是keras.backend)从输入层构建一个函数,然后调用该函数。答案中有更多细节