首页 文章

从顺序Keras模型中保存特定图层

提问于
浏览 1483
1

我正在构建一个自动编码器并训练模型,因此目标输出与输入相同 .

我正在使用顺序Keras模型 . 当我使用model.predict时,我希望它从特定层(Dense256)导出数组而不是输出 .

这是我目前的型号:

model = Sequential()
model.add(Dense(4096, input_dim = x.shape[1], activation = 'relu'))
model.add(Dense(2048, activation='relu'))
model.add(Dense(1024, activation='relu'))
model.add(Dense(512, activation='relu'))
model.add(Dense(256, activation='relu'))
model.add(Dense(512, activation='relu'))
model.add(Dense(1024, activation='relu'))
model.add(Dense(2048, activation='relu'))
model.add(Dense(4096, activation='relu'))
model.add(Dense(x.shape[1], activation ='sigmoid'))
model.compile(loss = 'mean_squared_error', optimizer = 'adam')
history = model.fit(data_train,data_train,
                    verbose=1,
                    epochs=10, 
                    batch_size=256,
                    shuffle=True,
                    validation_data=(data_test, data_test))

2 回答

  • 1

    layer.get_weights() 将图层的权重作为numpy数组返回,然后可以保存该数组,例如使用 np.save .

    要从numpy数组设置权重,可以使用 layer.set_weights(weights) .

    您可以按名称( model.get_layer(LAYER_NAME) 或其编号( model.layers[LAYER_INDEX] ))访问图层 .

  • 1

    训练后,从训练模型(模型)中创建一个新模型(模型2),该模型以所需图层结束 .

    您可以使用图层名称执行此操作:

    (在model.summary()中,你的密集层'名称'有256个神经元是密集的_5)

    from keras.models import Model
    model2= Model(model.input,model.get_layer('dense_5').output)
    

    或者使用图层顺序:

    (你的密集层有256个神经元在model.summary()中排名第五)

    from keras.models import Model
    model2= Model(model.input,model.layers[4].output)
    

    然后你可以使用预测

    preds=model2.predict(x)
    

相关问题