提取keras模型的最后一层作为子模型 [英] Extracting last layers of keras model as a submodel

查看:240
本文介绍了提取keras模型的最后一层作为子模型的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

假设我们有一个卷积神经网络M.我可以使用

Say we have a convolutional neural network M. I can extract features from images by using

extractor = Model(M.inputs, M.get_layer('last_conv').output)
features = extractor.predict(X)

如何获取将使用features预测类的模型?

How can I get the model that will predict classes using features?

我不能使用以下几行,因为它要求模型的输入为占位符.

I can't use the following lines because it requires the input of the model to be a placeholder.

predictor = Model([M.get_layer('next_layer').input], M.outputs)
pred = predictor.predict(features)

我也不能使用K.function,因为稍后我想将其用作其他模型的一部分,因此我将预测变量应用于tf.tensor,而不是np.array.

I also can't use K.function because later I want to use it as part of another model, so I will be appliyng predictor to tf.tensor, not np.array.

推荐答案

这不是最好的解决方案,但它可行:

This is not the nicest solution, but it works:

from keras.models import Sequential
from keras.layers import Conv2D, MaxPooling2D
from keras.layers import Dense, Dropout, Flatten

def cnn():
    model = Sequential()
    model.add(Conv2D(32, kernel_size=(3, 3),
                     activation='relu',
                     input_shape=(28, 28, 1), name='l_01'))
    model.add(Conv2D(64, (3, 3), activation='relu', name='l_02'))
    model.add(MaxPooling2D(pool_size=(2, 2), name='l_03'))
    model.add(Dropout(0.25, name='l_04'))
    model.add(Flatten(name='l_05'))
    model.add(Dense(128, activation='relu', name='l_06'))
    model.add(Dropout(0.5, name='l_07'))
    model.add(Dense(10, activation='softmax', name='l_08'))
    return model

def predictor(input_shape):
    model = Sequential()
    model.add(Flatten(name='l_05', input_shape=(12, 12, 64)))
    model.add(Dense(128, activation='relu', name='l_06'))
    model.add(Dropout(0.5, name='l_07'))
    model.add(Dense(10, activation='softmax', name='l_08'))
    return model

cnn_model = cnn()
cnn_model.save('/tmp/cnn_model.h5')

predictor_model = predictor(cnn_model.output.shape)
predictor_model.load_weights('/tmp/cnn_model.h5', by_name=True)

这篇关于提取keras模型的最后一层作为子模型的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆