在python中保留权重的两个网络中的分裂神经网络



keras中,我想使用具有给定训练神经网络的结构初始层的模型,以及我为训练过程获得的权重。

进入案例:假设我们有一个数据集df,在分解为traindevtest之后,我们训练一个神经网络,例如autoencoder

一段真实的代码说明了这个概念,但没有提供数据(我认为没有必要(:

from keras.models import Model
from keras.layers import Activation, Dense, Dropout, Input
# Define input layer
input_data = Input(shape=(train.shape[1],), name='Input')
# Define encoding layer
encoded = Dense(encoding_dim, activation='relu')(input_data)
# Define decoding layer
decoded = Dense(train.shape[1], activation='sigmoid')(encoded)
# Create the autoencoder model
autoencoder = Model(input_data, decoded, name='Simple AutoEncoder')
#Compile the autoencoder model
autoencoder.compile(optimizer='rmsprop',
loss='binary_crossentropy')
autoencoder.fit(train, train,
epochs=50,
batch_size=256,
shuffle=True,
validation_data=(dev_x, dev_x), verbose=0)

compilefit模型之后,我们通过拟合过程获得了具有它们的权重的神经网络。

我怎么能保留我得到的重量,只使用这个网的encoder part

我相信沿着这条线应该做一些事情:

#...all the code from above, including training...
# Define the encoder model
encoder = Model(input_data, encoded, name='Encoder')

encoder模型可以被视为一个成熟的Keras模型(您可以保存/加载/拟合/评估/预测(。

通过训练Autoencoderencoder神经网络部分将使用包含自动编码器训练权重的编码对象创建。

# Getting the trained weights of the first layer(dense layer of encoder)
weights_ae = autoencoder.layers[1].get_weights()[0]
# The previous code of the example...
# Creating the encoder model
encoder = Model(input_data, encoded, name='Encoder')
# Getting the weights of the encoder model
weights_e = encoder.layers[1].get_weights()[0]

因此,最终可以确认,通过创建模型encoder将具有来自自动编码器的权重("训练经验"(。

最新更新