先上代码:
import tensorflow as tf
from dataset import tokenizer
import settings
import utils
# 加载训练好的模型
model = tf.keras.models.load_model(r"E:\best_model.h5")
# 随机生成一首诗
print(utils.generate_random_poetry(tokenizer, model))
# 给出部分信息的情况下,随机生成剩余部分
print(utils.generate_random_poetry(tokenizer, model, s='深山夕照深秋雨'))
# 生成藏头诗
print(utils.generate_acrostic(tokenizer, model, head='深山夕照深秋雨'))
我们需要做的工作已经做完了,模型也已经训练好了,剩下的就是我们把我们的模型放到实际应用之中去了。
先看:
model = tf.keras.models.load_model(r"E:\best_model.h5")
这段代码使用了tensorflow中的tf.keras.models.load_model函数,加载一个预训练好的模型,这种加载预训练模型的例子很常见,在我们之前提到的风格迁移项目中,我们就加载预训练模型对我们的图片特征进行提取。
- tf.keras.models是tensorflow中用于构建和训练神经网络模型的模块。
- load_model是tf.keras.models模块中的一个函数,用于从磁盘中加载保存好的预训练模型。我们的参数是一个模型文件或文件名,使用r前缀表示字符串是一个原始字符串,可以包含反斜杠\而无需进行转义。
这段代码的作用是将预训练模型加载到变量model中,以便后续使用该模型进行古诗生成或其他任务,加载的模型可以是之前使用的TensorFlow训练得到的模型,也可以是由其他方法训练得到的模型,加载模型之后,可以使用model变量调用模型的方法和属性。(其余方法如我们在图像识别项目中使用的save_model方法,使用save_model.save函数来保存模型参数,使用save_model.load函数来加载模型参数)。
接下来就是进行古诗的生成了:
print(utils.generate_random_poetry(tokenizer, model))
只是传递分词器和我们的模型表示只进行随机的诗词生成。
print(utils.generate_random_poetry(tokenizer, model, s='深山夕照深秋雨'))
除上述传递的参数之外,额外传递s表示传递第一句,会跟着第一句往后进行诗词的生成,在这里,由于我们使用的是循环神经网络(RNN) ,所以我们后面生成的诗词与我们提供的第一句是有很强的关联性的。
print(utils.generate_acrostic(tokenizer, model, head='深山夕照深秋雨'))
最后我们传递的参数改成藏头诗,我们传递的head将被分成一个个词,并对每个词进行相应的生成,然后将得到的结果组合在一起,形成完整的诗词,当然,我们对每个词进行生成的时候不止简单的考虑到我们head所提供的第一个词,而是考虑到前面已经生成的词。这样使全文就有一定的关联性。
最后我们来演示我们的模型效果:
我们给定的第一句是“深山夕照深秋雨”,包括藏头也是“深山夕照深秋雨”。
总体来看效果还是不错的,我们继续生成一首:
有些同学可能会发愁找不到相关的诗词资源,在这里我已经将相关资源传上去了。分别是进行诗词训练的数据集,便于同学们更加直观的感受训练过程,理解数据对深度学习的重要作用,还有预训练权重,可以直接用于模型。
至于训练数据,请查看我的文章http://t.csdnimg.cn/mF4lm。