实验背景

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

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

回到正题,人工智能(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. swift支持多线程操作数据库类库-CoreDataManager
  2. 追求极致的AI·OS——AI·OS引擎平台
  3. tomcat启动慢_Hack下mongodb jdbc driver启动慢
  4. JZOJ 5629. 【NOI2018模拟4.4】Map
  5. Linux下查看进程对应的命令绝对路径
  6. win10系统按esc会弹出计算机,win10系统版本2004控制面板多出ESC是什么原因?
  7. angular moment 倒计时_倒计时3天丨探寻日本室内设计之道
  8. python朴素贝叶斯分类MNIST数据集
  9. java 如何秒速写一个线程启动
  10. 北京长途汽车站一览表
  11. 利用DroidCamX将手机摄像头打造成电脑高清摄像头
  12. python多叉树_python中高效的四叉树实现
  13. Ubuntu server 20.4 配置静态ip
  14. windows环境下_Django3.2+django_apscheduler0.6实现异步定时计划任务
  15. 代码的坏味道与重构技术
  16. 【创新²】SERO超零协议项目进展双月报
  17. ContentProvider基本使用初探
  18. WEB前端网页设计-Bootstrap 按钮下拉菜单
  19. 杠铃策略--极稳极浪不内卷
  20. druid多数据源配置

热门文章

  1. java web web.xml配置_web.xml配置详解
  2. Word论文参考文献排版
  3. 异速联应用交付解决方案的优势
  4. 矩阵的乘法(python、matlab、excel的不同实现方法)
  5. android屏幕投影到pc,安卓手机怎么把屏幕投影到电脑上
  6. MATALB 卷积神经网络 图片二分类
  7. 阿里云OSS文件上传
  8. SMOTE算法原理 易用手搓小白版 数据集扩充 python
  9. python 科研作图_科研作图软件(11种)
  10. 配色教程,学习RGB配色,最简单的配色基础。