基于LSTM + keras 的诗歌生成器
2024-09-04 07:08:58
最近在github 上发现了一个好玩的项目,一个基于LSTM + keras 实现的诗歌生成器,地址是:https://github.com/youyuge34/Poems_generator_Keras. 我去看了一下代码,实现的原理其实很common,就是普通的基于LSTM 的序列模型。模型使用了43030首诗进行训练,最后生成的诗歌还是有模有样的(当然仅限于有模有样,自然是不能深究的了)
- 模型的核心思路:
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'])
keras 真的是极简的深度学习语言,上述短短的9行代码就已经包括了全部的模型结构,而且不需要注释基本都能看懂代码在做什么。
- 第一行: 构造输入向量
- 第二行,构造了一个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,指定了模型的损失函数类型为交叉熵损失,优化器以及评价指标
首春:寒随穷律变,春逐鸟声开。初风飘带柳,晚雪间花梅。碧林青旧竹,绿沼翠新苔。芝田初雁去,绮树巧莺来。
初晴落景:晚霞聊自怡,初晴弥可喜。日晃百花色,风动千林翠。池鱼跃不同,园鸟声还异。寄言博通者,知予物外志。
初夏:一朝春夏改,隔夜鸟花迁。阴阳深浅叶,晓夕重轻烟。哢莺犹响殿,横丝正网天。珮高兰影接,绶细草纹连。碧鳞惊棹侧,玄燕舞檐前。何必汾阳处,始复有山泉。
度秋:夏律昨留灰,秋箭今移晷。峨嵋岫初出,洞庭波渐起。桂白发幽岩,菊黄开灞涘。运流方可叹,含毫属微理。
- 冒号前的是诗的名字,冒号后的是诗的内容
3. 训练
- 我使用的单卡 RTX2080ti(11G显存) 进行训练,按照作者的默认配置,一共 训练了 34000+ epoch,每个 epoch 耗时 1s 左右,总共训练了接近10个小时。最终得到的keras 可用的模型文件以及训练日志我放到百度云了,地址是:https://pan.baidu.com/s/1XV9InTe9vMmwKNs5lBS-tQ
4.训练完成之后,原始的代码一共提供了4个进行predict 的API:
- predict_first:给定一个汉字,输出一首五言绝句
- predict_random:随机从全部的训练诗作当中抽出一首诗的首句,然后生成一首诗
- predict_gen:给定五个汉字作为首句,生成一首五言绝句
- predict_hide:给定四个汉字,输出以这个四个汉字开头的藏头诗
- 为了方便预测,我封装了一个简单的 命令行工具,提供了四种预测,代码可以参考我对原始repo 的 fork 版本(https://github.com/Lyrichu/Poems_generator_Keras/tree/huchengchun),使用方式如下:
5. 愉快地生成诗歌玩耍吧
最新文章
- JavaScript中对象的含义与this的指向
- angularJs案例汇总
- SSH无密码登陆Agent admitted failure to sign using the key
- POJ2185Milking Grid(最小覆盖子串 + 二维KMP)
- mimikatz不反弹读取密码
- Asp.net中WebForm 与 MVC的架构区别
- java编程规范
- node-webkit教程(16)调试typescript
- 全局变量&;局部变量
- automake使用
- 数据中心基础设施自动化运维之puppet专项
- BZOJ 3707: 圈地 计算几何
- [置顶] Oracle学习路线与方法
- 哈尔滨理工大学第六届程序设计团队 E-Mod
- [国嵌攻略][142][LCD驱动程序架构]
- TP5.0 excel 导入导出
- 最大连接数:60 iops:150 什么概念?
- c/c++ 重载运算符 标准库function的用法
- LODOP 获取打印设计代码不带INIT初始化语句
- Windows下安装单机Kafka
热门文章
- Property or method ";openPageOffice"; is not defined on the instance but referenced during render. Make sure that this property is reactive, either in the data option, or for class-based components, by
- Linux新手到大佬系列——1
- 用strtotime()和date()函数算出2019年9月的周日日期
- [HNOI2009] 有趣的数列——卡特兰数与杨表
- Educational Codeforces Round 74 (Rated for Div. 2) A. Prime Subtraction
- JavaScript中的变量提升和严格模式
- 牛客练习赛39 B.选点
- P3979 遥远的国度 树剖
- LoadLibraryA 和 GetProcAddress 调用动态库
- C语言学习笔记3-运算符和表达式