实验背景

周末,早晨下了点小雨,淅淅沥沥,来到阳台坐了一会,看着雨有点发呆,真惬意,真想雨一直这么下着。

下午雨就停了,太阳紧跟其后,普照万物。好吧,回到现实吧。

回到正题,人工智能(AI)技术在各应用领域可以说是遍地开发,应用至上。最近看到用神经网络来写诗,今天和大家一起撸一撸,动手实验下。

实验器材

●python

● LSTM

● tensorflow

● 唐诗

实验内容

数据获取

深度学习技术能发挥其作用,最重要的是数据。没有数据再好的算法也没用。本实验要生成诗歌,训练样本为唐诗文本。总共4.3万首。

首春

寒随穷律变,春逐鸟声开。

初风飘带柳,晚雪间花梅。

碧林青旧竹,绿沼翠新苔。

芝田初雁去,绮树巧莺来。

简单原理说明

自动生成文本可以理解成一个文字接着一个文字,不断连接的一个序列。针对序列数据,循环神经网络RNN是一个有效的建模方法。本实验采用LSTM(长短记忆网络)。

传统的RNN模型主要用连接先前的信息到当前的任务上,如下:

LSTM很好的解决了RNN的长期信息依赖的学习问题。通过forget gate丢弃本单元不需要的信息, 同时根据update gate 结合当前序列输入更新加入信息。然后将更新后的信息和当前信息相结合为输出信息。主要通过sigmoid和tanh来操作。

详细信息可以访问:http://colah.github.io/posts/2015-08-Understanding-LSTMs/

生成诗歌

1.数据处理

数据中为一行为一首诗,即为一个样本。

统计每个字出现次数,对字进行编码(按照词频大小)

关于输入x序列和输出y序列:y为x向前移动一个字。如

生成batch的数据迭代器,64首诗为一个batch

2.构建lstm网络

本实验采用单向的LSTM进行训练。

构建输入

这里输入有点特殊,就是增加一个embedding层对输入字符id进行词向量表示:word2vec,来代替ont_hot。

embedding通常可以采用预训练的参数,或者放在网络过程进行自己训练,本是采用第二种,自己训练。

构建LSTM

本实验采用tensorflow实现的LSTM模块。

一个LSTM模块:

one_cell = tf.contrib.rnn.BasicLSTMCell(self.rnn_size)//128个神经元

通常一个LSTM需要包含多层的LSTM cell,即同一个输入x和输出(c和h)之间包含多个LSTM模块,前一个cell的输出为后一个cell的输入。如下:

multi_cell = tf.contrib.rnn.MultiRNNCell( [one_cell] * self.num_layers, state_is_tuple=True)

整个网络结构:

self.initial_state = multi_cell.zero_state(self.batch_size, tf.float32)

outputs, self.last_state = tf.nn.dynamic_rnn(multi_cell, self.inputs, initial_state=self.initial_state)

构建softmax层和损失函数和优化器,采用Adam

训练过程

本实验训练20000个epoch,损失基本上就收敛了。

3.生成诗歌

利用已经训练好的模型,因为是输入是序列。 指定第一字为输入,利用模型输出第二个字,接着将第二个字为输入,利用模型输出第三个字,依此类推,指导输出终止符为止。 一首诗就完成了。

这里模型的输出为softmax的概率,使用argmax取最大的概率就是预测的字符ID,再转换成字符。

我们来欣赏下本实验生成的古代诗歌吧。

芳柳花香翅,花泉暗里船

宫残风落雾,红粉剧参差

翠蜡鸡声动,馨香烧巢袪

帷花侵乳落,唱警蜃芳来

晓净阴窗峻,秦宫槿藓平

应羡棋真栖,无将复难那

秋雨西西路,岧荧在玉清

哀堪进界缨,紫皓安须争

举病难倾礼,习来未在禅

楂舟雪上清,款检在虾瞳

明日八十贵,传来已学禅

清鸿问秦水,楚国高陀枝

送昔晡心惑,全高何一秋

心闲忙操命,雨复度花传

暗尽霜光罩,新闲与马分

仙城衰日远,窗栝初有风

唯更临水上,提得亦延鼎

无时西浦上,七尺与行踪

实验结语

本实验『WedO实验君』和大家用循环神经网络来实现一个自动生成诗歌的小应用,参考CharRNN。 内在的原理是利用网络来学习训练诗歌中字符出现的概率模型。

python程序写诗_python:为你写诗相关推荐

  1. python怎么写接口_python接口怎么写

    1. 用python怎么写一个接口自动化框架 #!/usr/bin/env python import sys str = True while (str): dig = int(input()) i ...

  2. python程序运行键_python学习笔记-python程序运行

    小白初学python,写下自己的一些想法.大神请忽略. 安装python编辑器,并配置环境(见http://www.cnblogs.com/lynn-li/p/5885001.html中 python ...

  3. python程序代码解析_Python源码分析3 – 词法分析器PyTokenizer

    Introduction 上次我们分析了Python中执行程序可分为5个步骤: Tokenizer进行词法分析,把源程序分解为Token Parser根据Token创建CST CST被转换为AST A ...

  4. python程序运行键_python实现按任意键继续执行程序

    在windows下写bat的时候,通过pause命令,可以暂停程序运行,例如经常见的程序会在终端提示"按任意键继续--",用户在终端回车后程序可以接着运行,这个功能有多大用途今天暂 ...

  5. python程序员培训_Python程序员学习路线图

    Python程序员学习路线图,由黄哥python培训授课老师黄哥所写. 参加黄哥python远程视频培训, 帮你完成从不会写代码到会写代码解决问题的过渡. 咨询qq:1465376564 Python ...

  6. python程序项目报告_python程序设计实验报告

    安徽理工大学Python编程实验报告类物流192名陆代学生号码3190505207年级日期教师秀于实验名称实验一个熟悉闲置和在线编程平台实验目的1.掌握python闲置的安装和使用集成开发环境2.熟悉 ...

  7. python程序语法元素分析_Python程序语法元素分析(2)

    "u003Cdivu003Eu003Cpu003Eu003Cstrongu003E输入函数u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003Ein ...

  8. python程序设计基础电子版_Python 程序设计基础(董付国 著)完整版PDF[6MB]

    Python 程序设计基础难易程度适中.除Python应用开发基础知识之外,还适当介绍了Python标准库以及内置对象的工作原理,并对Python 2.x和Python 3.x的区别做了深入分析,满足 ...

  9. python程序员工作时间_Python程序员是怎么找工作的?怎么最快时间找到自己想要的工作?...

    前言 从智联招聘爬取相关信息后,我们关心的是如何对内容进行分析,获取用用的信息. 本次以上篇文章"5分钟掌握智联招聘网站爬取并保存到MongoDB数据库"中爬取的数据为基础,分析关 ...

  10. python 程序耗时记录_Python学校的学生身高记录程序

    python 程序耗时记录 A team of 5 people is assigned with a task to record the heights of students in a scho ...

最新文章

  1. 【Linux系统】基础总结
  2. [网络流24题-7]圆桌问题
  3. vim编辑环境设定[Linux]
  4. UA MATH571A 一元线性回归III 方差分析与相关性分析
  5. 2019\Province_C_C++_B\试题E-迷宫
  6. Lambda表达式的基础知识
  7. matlab 自定义对象,自定义类的对象显示
  8. Django基础11(Django中form表单)
  9. 如何在Adobe Illustrator中矢量化图像
  10. 451.根据字符出现频率排序
  11. java减号的正则_java 正则匹配 特殊字符 减号- 的情况,处理方式
  12. 杭州电子科技大学ACM-1001
  13. 如何实现通过扫描二维码下载阿里云文件
  14. win7 微信 代理服务器,Win7系统使用电脑版微信如何@别人
  15. Mac - 通过 Script 实现更换桌面壁纸
  16. C++使用winhttp以POST/GET方法实现报文转发与接收
  17. 解析增量xml数据到数据库
  18. 智慧教室系统--重点设备监控系统
  19. Ubutnu18.04解决:Starting Wait until snapd is fully seeded...
  20. PlayMaker入门介绍

热门文章

  1. 小程序--下拉刷新/上拉触底
  2. 电脑配置挑选速成攻略
  3. java 对session的基本使用
  4. android屏幕投影到pc,安卓手机怎么把屏幕投影到电脑上
  5. 打印101~200之间的素数
  6. 两台局域网内的阿里云服务器传文件
  7. c语言斐波那契数列_母函数——斐波那契数列通项公式
  8. 开放世界游戏中的大地图的实现——程序技术篇
  9. 互联网公司面试流程面试技巧(附被无良HR欺骗的经历)
  10. SIP信令协议消息(四)