2017-02-08 3 views
0

Я пытаюсь удалить верхние слои из модели, которую я предварительно обучил. Это код, я использую:Использование model.pop() изменяет сводку модели, но не влияет на результат

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) не изменяется после отбрасывания этих слоев.

Что является источником этого несоответствия? Как я могу получить вывод нужного слоя, а не всего всей модели?

Заранее благодарен!

ответ

2

Вы не можете отбрасывать слои таким образом, чтобы он имел эффект, вам необходимо перекомпилировать модель (AKA model.compile).

Но это не лучший способ получить выходные данные из промежуточных уровней, вы можете просто использовать функцию K.function (где K is keras.backend), чтобы построить функцию от входа к одному из слоев, а затем вызвать функцию. Более подробная информация приведена в ответе this.

Смежные вопросы