最近在github 上发现了一个好玩的项目,一个基于LSTM + keras 实现的诗歌生成器,地址是:https://github.com/youyuge34/Poems_generator_Keras. 我去看了一下代码,实现的原理其实很common,就是普通的基于LSTM 的序列模型。模型使用了43030首诗进行训练,最后生成的诗歌还是有模有样的(当然仅限于有模有样,自然是不能深究的了)
 
  1. 模型的核心思路:
 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. 愉快地生成诗歌玩耍吧

基于LSTM + keras 的诗歌生成器的更多相关文章

  1. 深度学习|基于LSTM网络的黄金期货价格预测--转载

    深度学习|基于LSTM网络的黄金期货价格预测 前些天看到一位大佬的深度学习的推文,内容很适用于实战,争得原作者转载同意后,转发给大家.之后会介绍LSTM的理论知识. 我把code先放在我github上 ...

  2. Thomas Brinkhoff 基于路网的移动对象生成器的使用

    Thomas Brinkhoff 基于路网的移动对象生成器的使用 网站:http://iapg.jade-hs.de/personen/brinkhoff/generator/ 各个移动对象在路网中进 ...

  3. tensorflow实现基于LSTM的文本分类方法

    tensorflow实现基于LSTM的文本分类方法 作者:u010223750 引言 学习一段时间的tensor flow之后,想找个项目试试手,然后想起了之前在看Theano教程中的一个文本分类的实 ...

  4. 基于redis的分布式ID生成器

    基于redis的分布式ID生成器  

  5. 在TensorFlow中基于lstm构建分词系统笔记

    在TensorFlow中基于lstm构建分词系统笔记(一) https://www.jianshu.com/p/ccb805b9f014 前言 我打算基于lstm构建一个分词系统,通过这个例子来学习下 ...

  6. Thomas Brinkhoff 基于路网的移动对象生成器的使用[第二版]

    Thomas Brinkhoff 基于路网的移动对象生成器的使用 Thomas Brinkhoff 基于路网的移动对象生成器的使用 相关操作的说明 相关文件的说明 运行 导入eclipse后运行时选择 ...

  7. Tensorflow之基于LSTM神经网络写唐诗

    最近看了不少关于写诗的博客,在前人的基础上做了一些小的改动,因比较喜欢一次输入很长的开头句,所以让机器人输出压缩为一个开头字生成两个诗句,写五言和七言诗,当然如果你想写更长的诗句是可以继续改动的. 在 ...

  8. 基于 lstm 的股票收盘价预测 -- python

    开始导入 MinMaxScaler 时会报错 “from . import _arpack ImportError: DLL load failed: 找不到指定的程序.” (把sklearn更新下) ...

  9. 一文详解如何用 TensorFlow 实现基于 LSTM 的文本分类(附源码)

    雷锋网按:本文作者陆池,原文载于作者个人博客,雷锋网已获授权. 引言 学习一段时间的tensor flow之后,想找个项目试试手,然后想起了之前在看Theano教程中的一个文本分类的实例,这个星期就用 ...

随机推荐

  1. python_tkinter事件

    1.事件绑定函数(3个) 组件.bind('事件类型',事件函数) 为一个组件绑定一个操作 组件.bind_class('组件类型','事件类型',事件函数) 为一个类组件绑定一个操作 组件.bind ...

  2. Warning: (1260, 'Row xxx was cut by GROUP_CONCAT()')

    MySql数据库查询时,使用group_concat报错“Row XXX was cut by GROUP_CONCAT()”,查了下是因为group_concat有个最大长度的限制,超过最大长度就会 ...

  3. 接口强制删除namespace 为Terminating的方法

    kubectl get ns qa01 -o json > qa01.json kubectl proxy --port=8081 curl -k -H "Content-Type: ...

  4. date对象获取get

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. 【题解】[Nwerc 2006]escape -C++

    Description 给出数字N(1<=N<=10000),X(1<=x<=1000),Y(1<=Y<=1000),代表有N个敌人分布一个X行Y列的矩阵上 矩形的 ...

  6. webservice应用+建议不用webservice

    webservice应用 1.分布式应用的集成(应用程序之间的集成) 2.软件重用 将一个软件的功能以webservice方式暴露出来,达到软件重用.例如上边分析天气预报,将天气查询功能以webser ...

  7. 一些特殊的矩阵快速幂 hdu5950 hdu3369 hdu 3483

    思想启发来自, 罗博士的根据递推公式构造系数矩阵用于快速幂 对于矩阵乘法和矩阵快速幂就不多重复了,网上很多博客都有讲解.主要来学习一下系数矩阵的构造 一开始,最一般的矩阵快速幂,要斐波那契数列Fn=F ...

  8. 文件描述符、文件表项、V节点表项的一些总结

    转自  http://blog.csdn.net/gzzheyi/article/details/7739556 表格可以参见APUE 第三版 P61. 文件描述符(进程级别): 1).在每个进程表中 ...

  9. PCIe - 那点点事

    各位看官,这是我拷贝过来的,作为学习笔记(本人对图比较感兴趣,你说我懒也行,上图,这个看着舒服易懂): 1. Wire, lane, link 啥关系 注: PCIe 每条lane有1个双向通道(一个 ...

  10. 7.26T1四分图匹配

    四分图匹配 题目描述 一天晚上,zzh 在做梦,忽然梦见了她. 见到她,zzh 也不去看她,只顾低头自语…… “噫,OI 这个东西,真是无奇不有.” “嘿,你又学了什么?” “嗯,学到了一种算法,”z ...