python 从使用Functional API构建的自定义预训练模型中删除最后一层

whitzsjs  于 2023-02-11  发布在  Python
关注(0)|答案(1)|浏览(106)

我正在建立一个同时接收文本和音频特征的情感识别模型,我创建了一个音频特征提取器,它从opensmile工具包中接收特征向量,以便得到更好的向量。

def get_audio_model (lr):

    input_audio = Input(shape = (1, 1422))
    
    audio_hidden1 =  (Bidirectional(LSTM(526, return_sequences = False, input_shape = (1, 1422), recurrent_dropout=0.5)))(input_audio)
    drop1 = Dropout(0.3)(audio_hidden1)
    audio_hidden3 =  Dense(256, activation='relu')(drop1)
    
    final = Dense(3, activation='softmax')(audio_hidden3)
    
    model = keras.Model(inputs=input_audio, outputs=final, name="audio_extractor")

    model.compile(loss='categorical_crossentropy', optimizer = keras.optimizers.Adam(learning_rate = lr), metrics=['accuracy', precision, recall])
    
    return model

我已按以下方式训练、保存并加载了此模型
audio_model.save('audio_feature_extractor.h5') loaded_audio_model = keras.models.load_model('audio_feature_extractor.h5')
我想从加载的模型中移除顶层,这样我就可以使用audio_hidden3层的输出,并将其与其他矢量连接起来。我尝试了pop(),但它在函数模型中没有任何作用。

audioft_extractor = loaded_audio_model.layers[0:-1]

但是它只是创建了一个包含图层的列表。有没有什么想法可以只删除最后一层?

yc0p9oo0

yc0p9oo01#

只创建新模型,但指定如下内容如何?

new_model = Model(inputs=..., outputs=loaded_audio_model.layers[-2].output)

相关问题