保存Keras模型:用于训练和预测的不同模型

时间:2018-07-07 10:44:03

标签: python machine-learning keras nlp seq2seq

我正在使用聊天机器人,为了进行培训和预测,我使用的模型略有不同。训练模型如下所示:

encoder_input = Input(shape=(None, embedding_size), name='encoder_input')
encoder_train = LSTM(latent_dim, return_state=True, name='encoder')
encoder_outputs, h, c = encoder_train(encoder_input)
encoder_states = [h, c]

decoder_input = Input(shape=(None, embedding_size), name='decoder_input')
decoder_train = LSTM(latent_dim, return_sequences=True, return_state=True, name='decoder')
decoder_outputs, _, _ = decoder_train(decoder_input,
                                      initial_state=encoder_states)
decoder_dense = Dense(embedding_size, activation='softmax', name='decoder_dense')
decoder_outputs = decoder_dense(decoder_outputs)

train_model = Model([encoder_input, decoder_input], decoder_outputs)

train_model.compile(optimizer='adam', loss='categorical_crossentropy')

tbCallBack = TensorBoard(log_dir='logs/{}', histogram_freq=0,
                         write_graph=True, write_images=True)

train_model.fit([encoder_inputs, decoder_inputs], decoder_targets,
                batch_size=batch_size,
                epochs=epochs,
                validation_split=0.2,
                callbacks=[tbCallBack])

对于我的训练模型,它看起来像这样:

seq2seq_encoder = Model(encoder_input, encoder_states)

decoder_h = Input(shape=(latent_dim,))
decoder_c = Input(shape=(latent_dim,))
decoder_outputs, h, c = decoder_train(decoder_input, [decoder_h, decoder_c])
outputs = decoder_dense(decoder_outputs)
seq2seq_decoder = Model([decoder_input] + [decoder_h, decoder_c], [outputs] + [h, c])

如何保存此预测模型,以便可以将其用于训练模型中具有所有必需权重的另一个python文件中?

1 个答案:

答案 0 :(得分:0)

使用save_weights_only=True时可以使用model.save。在另一个Python文件中,您需要重新创建模型,然后使用model.load_weights(by_name=True),这会将相应的图层权重加载到预测模型中。预测模型中所有缺少的图层权重都会被跳过,因此只有在图层的name参数匹配时才加载。 documentation涵盖了保存和加载模型的不同方式。