基于LSTM + keras 的古诗生成器

article/2025/9/9 8:20:07
  • 1.语料准备:包含 5.5 万首唐诗、26 万首宋诗、2.1 万首宋词和其他古典文集。诗人包括唐宋两朝近 1.4 万古诗人,和两宋时期 1.5 千古词人。数据来源于互联网。每行一首诗,标题在预处理的时候已经去掉了。
  • 2.模型参数配置:预先定义模型参数和加载语料以及模型保存名称,通过类 Config 实现。
  • 3.文本读取预处理:过滤掉低频字,构建词典与词典id的映射。
  • 4.构建模型:

 模型代码

       input_tensor = Input(shape=(self.config.max_len, len(self.words)))lstm = LSTM(512, return_sequences=True)(input_tensor)dropout = Dropout(0.6)(lstm)lstm = LSTM(256)(dropout)dropout = Dropout(0.6)(lstm)dense = Dense(len(self.words), activation='softmax')(dropout)self.model = Model(inputs=input_tensor, outputs=dense)optimizer = Adam(lr=self.config.learning_rate)self.model.compile(loss='categorical_crossentropy', optimizer=optimizer, metrics=['accuracy'])
  • 第一行: 构造输入向量
  • 第二行,构造了一个LSTM layer, hidden units size = 512
  • 第三行,构造了一个dropout layer,dropout rate = 0.6
  • 第四行,构造了一个LSTM layer,hidden units size = 256
  • 第五行,构造了一个dropout layer,dropout rate = 0.6
  • 第六行,构造了一个全连接层+softmax 作为 output layer
  • 第七行,利用 inputs 和 outputs 构造Model
  • 第八行,使用 Adam 优化器
  • 第九行,compile model,指定了模型的损失函数类型为交叉熵损失,优化器以及评价指标

数据训练花很长时间,训练完成之后,原始的代码一共提供了4个进行predict 的API:

  • predict_first:给定一个汉字,输出一首五言绝句
  • predict_random:随机从全部的训练诗作当中抽出一首诗的首句,然后生成一首诗
  • predict_gen:给定五个汉字作为首句,生成一首五言绝句
  • predict_hide:给定四个汉字,输出以这个四个汉字开头的藏头诗

运行:

随机生成古诗如下

古诗生成

给定一个汉字

python predict_poem.py -pf 李

生成

李相时老玉,山终北合徒。游无归吾西,间人老无曙。

给定四个汉字

python predict_poem.py -ph 我爱李月

生成古诗

我鸣朝东秋,爱青无空归。李五亲日光,月鱼不时绿。

 

 

参考网址https://www.cnblogs.com/lyrichu/p/11257408.html


http://chatgpt.dhexx.cn/article/Gt3phhHf.shtml

相关文章

唐诗生成器

使用唐诗语料库,经过去噪预处理、分词、生成搭配、生成主题等过程,生成唐诗。 csdn下载地址:http://download.csdn.net/detail/lijiancheng0614/9840952 github上repository地址:https://github.com/lijiancheng0614/poem_genera…

JQuery中的val()函数

JQuery中的val()函数相当于Javascript中的value属性,可以用来设置和获取元素的值。 下面用一个简单的邮箱登陆界面来举个例子: 在默认情况下邮箱的地址输入框和密码输入框都有相应的提示。 要求:当鼠标聚焦在邮箱地址输入框时,提…

【Python】sklearn中的cross_val_score()函数参数

sklearn 中的cross_val_score函数可以用来进行交叉验证,因此十分常用,这里介绍这个函数的参数含义。 sklearn.cross_validation.cross_val_score(estimator, X, yNone, scoringNone, cvNone, n_jobs1, verbose0, fit_paramsNone, pre_dispatch‘2*n_job…

sklearn交叉验证函数cross_val_score用法及参数解释

文章目录 一 、使用示例二、参数含义三、常见的scoring取值1.分类、回归和聚类scoring参数选择2.f1_micro和f1_macro区别3.负均方误差和均方误差 一 、使用示例 import numpy as np from sklearn.model_selection import train_test_split from sklearn import svm from sklea…

java val_Java中是否有val()函数?

慕尼黑的夜晚无繁华 很少有实际用例能够评估String作为Java代码的一个片段是必要的或可取的。也就是说,询问如何做到这一点实际上是XY问题:你实际上有一个不同的问题,可以用不同的方法来解决。先问问自己,这是怎么回事String你想要…

c语言val函数用法,函数VAL()什么意思怎么用啊?/

满意答案 Dickyshe 2013.03.22 采纳率:50% 等级:12 已帮助:12551人 将一个数据行变量转换成数字长整型变量如 text1.text "10" text2.text "11" text3.text text1.texttext2.text 按道理应该得到10+11(…

mysql中val是什么意思_val是什么函数

val是将由数字符号组成的字符型数据转换成相应的数值型数据的函数,其语法是“Val(S,V,Code)”,若字符串内出现非数字字符,那么只转换非数字字符前面的部分;若字符串的首字符不是数字符号,则返回数值零,但忽…

抽象方法的访问修饰符

抽象方法不能使用private修饰符,也不宜使用默认修饰符(default) (1)如果使用private修饰符 public abstract class SuperClass {/** The abstract method test in type SuperClass can only set a visibility modifi…

Java之访问修饰符

1.访问修饰符 java提供四种访问修饰符,用于控制方法和属性(成员变量)的访问权限 四种分别是 公开级别:public,对外公开 受保护级别:protected,对子类和同一个包的类公开 默认级别&#xff…

Java-访问修饰符

目录 一、private(私有权限) 二、default(默认权限) 三、protected(受保护权限) ​四、public(公共权限) 五、总结 示意图 private(default)protectedpublic本类YesYesYesYes同包的类NoYesYesYes不同包的父子关系NoNoYesYes不同包的非父子关系NoNoNoYes 注意点&#xf…

C# 的访问修饰符

访问修饰符的作用域分为三种: 类的访问修饰符方法的访问修饰符属性的访问修饰符 访问修饰符主要分为: public (公共的)protected (保护的)internal (内部的)private (私有的) 一,类的访问修饰符 默认的是 internal 二,方法的…

c# 访问修饰符

C# 中提供了 6 种访问修饰符:public、private、protected、internal、protected internal、private protected。   访问修饰符 在所有的类型和类型成员中都具有可访问性级别,用于控制是否可以从程序集或其他程序集中对其他代码的访问控制。 访问修饰符…

访问控制修饰符

定义理解 对类、变量、方法、接口的访问范围限制。一.类修饰符 1.直接声明 class 类名{ },即不加修饰符的时候 这种情况下,只可访问同一包中的类,不可访问不同包中的类。2.public,公共类的修饰符 这种情况下,既可访…

Java访问修饰符全面详细介绍

Java中有四种权限修饰符,其在同一项目中所对应的访问权限如下: 注意:默认不写即是default,而不是自己还特意加上default关键字。 Java语言有4种访问权限修饰符,下面按照权限从小到大的顺序对4种访问权限分别介绍: 1、…

Java基础:Java中四种访问修饰符

一、背景。 这篇文章主要介绍了Java中四种访问修饰符详细教程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下。放假在家里休息,闲来无事,想巩固巩固自己的基础知识…

C#的5种访问修饰符

C#的5种访问修饰符 1、public 公共的 public 允许一个类将其成员变量和成员函数暴露给其他的函数和对象。任何公有成员都可以被外部的类访问。 class Person {public string name;public int age;public void SayHello(){Console.WriteLine("大家好,我叫{0}&a…

C#访问修饰符

C#中的访问修饰符有以下六种: public:同一程序集和和引用该程序集的所有代码都可访问。public成员可访问级别由该类型本身的级别决定。private:只有同一类中的成员可以访问protected:同一类和派生类中的代码可以访问internal&…

java的四个访问修饰符_Java中的四种访问修饰符

Java中修饰符分为两种:访问修饰符和非访问修饰符。修饰符中,有一些修饰符可以既可以修饰类,也可以修饰方法,但是有一些修饰符只能修饰符方法。 今天这篇文章先介绍一下四种访问修饰符。 1、private修饰符 private表示私有的。既然…

四种访问修饰符详解

有四种访问修饰符规定了定义的属性和方法能访问的区域 private关键字 用private关键字修饰的属性和方法只能在该类的大括号内访问,出了这个类就不能被访问了。当一个子类继承一个父类的属性和方法时,若父类的属性或方法被private修饰,那么子…