使用tensorflow经典的深度学习框架,使用python对其进行提取数据集的数据,并训练模型后,将本次构建的模型能实现应用。(注本次实验,由于自己写的tensorflow程序出现了数据爆炸将电脑多次卡死的现象,这里参考了https://github.com/little-zhao/tensorflow2.0_lstm_poem中的代码进行改写)
(1):tensorflow学习中遇到的问题和方法
作为一名刚刚学习python和使用tensorflow的新手,记录在写程序中犯的错误。
1使用电脑跑数据发现又出现了上次一样的问题,说找不到安装的cuda的库,仔细查看了电脑安装路径发现其实是存在的,这个时候怀疑pycharm自己升级了tensorflow的版本导致GPU对不上,查看过程中发现果然有个奇怪的-ensorflow版本是2.1.0;但是我电脑适配的应该是tensorflowgpu=2.0.0版本;所以搞了一下午的卸载重装tensorflow的版本,依旧没有解决。

后来发现在命令窗口中输入nvcc -V,显示不是外部命令,这时候怀疑是环境变量没有装好。果然上一次实验装的环境变量因为电脑重启了,就失效了,而且除了上次说的安装变量的地方,还需要在PATH中安装;搞定这个就在重启电脑即可正常使用GPU运行程序。
具体步骤可见我的这两篇博客中:
https://blog.csdn.net/ZhangLH66/article/details/106655005
https://blog.csdn.net/ZhangLH66/article/details/106862609
2第二个错误就非常尴尬因为按照老师给的数据集,我读取出来,先是发现读取的data输入模型出现格式错误,随后尝试在按照pytorch的DataLoader用tensorflow写,方式如下:

在把data.Size作为LSTM的输入,就出现了数据爆炸的问题;重复多次出现了电脑卡机不动的情况;没有办法只好查看下别人怎么写的;结果发现老师给的数据集tang.npz都是在pytorch框架中使用的;最后参考了https://github.com/little-zhao/tensorflow2.0_lstm_poem
处理数据集的框架,在其基础上更改模型和参数实现最终的自动写诗输出。
(2)学习RNN-lstm-GRU网络
之前使用的CNN网络在语言处理和文本生成中有一个缺点在于,无法进行上下文联系。RNN网络则可以对序列数据进行建模,它的网络输出的后一个数和前一个数是相互关联的,隐藏层之间的节点相互关联,但是这个网络结构也有一个弱点,当输入的文本数据过多的时候会出现梯度爆炸和梯度消失的问题。

而LSTM就对RNN网络的缺点进行了改进,用于改善RNN在长时间内存储信息的困难。相对RNN只有一个保存短期的状态还增加了cell state以达到保存长期的状态。LSTM通过遗忘门决定从细胞中丢弃什么信息,通过输入门确定什么信息被放入细胞中,输出门决定输出什么。

而GRU则比较新是14年提出来的LSTM变体,将遗忘门和输入门合成一个,同时混合了细胞和隐藏状态,最终实现的模型参数更简洁。

(3)将训练好的模型进行保存,并且输入“湖光秋月两相和”作为前文,生成一首完整的诗句
三:解决方案
(一)开发环境:pycharm+python3.5
(二)整个项目需要导入的代码:
import math
import re
import numpy as np
import tensorflow as tf
from collections import Counter
import matplotlib.pyplot as plt
import time
import os
from numba import cuda

(三)函数和网络结构设计:一次训练数据设置为308(视电脑性能决定),epoch初始设置为30次,drop=0.5,利用TimeDistribute对每个step输出都用softmax激活处理,随后为了提高准确度可以对以上的参数进行更改。
网络结构使用了LSTM和GPU两种版本比较效果
损失函数使用的多分类损失函数
model.compile(
optimizer=tf.keras.optimizers.Adam(),
loss=tf.keras.losses.sparse_categorical_crossentropy,
metrics=[‘accuracy’]
)
对训练模型进行预测
网络结构主要使用keras提供的API进行编写使用了LSTM和GRU两个版本对照,谁的结果输出的更像人写出来的诗
#搭建网络层
#LSTM
model = tf.keras.Sequential([
# 词嵌入层
tf.keras.layers.Embedding(input_dim=tokenizer.dict_size, output_dim=125),
# 第一个LSTM层
tf.keras.layers.LSTM(125, dropout=0.5, return_sequences=True),
# 第二个LSTM层
tf.keras.layers.LSTM(125, dropout=0.5, return_sequences=True),
# 利用TimeDistributed对每个时间步的输出都做Dense操作(softmax激活)
tf.keras.layers.TimeDistributed(tf.keras.layers.Dense(tokenizer.dict_size, activation=‘softmax’)),
])
model.summary()

#GRU
model = tf.keras.Sequential([
# 词嵌入层
tf.keras.layers.Embedding(input_dim=tokenizer.dict_size, output_dim=125),
# 第一个LSTM层
tf.keras.layers.GRU(125, dropout=0.5, return_sequences=True),
# 第二个LSTM层
tf.keras.layers.GRU(125, dropout=0.5, return_sequences=True),
# 利用TimeDistributed对每个时间步的输出都做Dense操作(softmax激活)
tf.keras.layers.TimeDistributed(tf.keras.layers.Dense(tokenizer.dict_size, activation=‘softmax’)),
])
model.summary()

四:实验分析和总结
数据集介绍:在本次实验中一共尝试了两个数据集,第一个老师提供的tang.npz,因为程序编写的问题,在数据爆炸后就弃用了,换成了比较多资料参考的poetry.txt,其实两者使用的文本数据是一样的,只是前者已经分好了数据和编码的工作,后者还需要进行数据预处理和编码的工作。数据集一共包含四万多首唐诗,数据处理中对于过长过短的诗句进行屏蔽,无效的符号和题目也进行删除。

(1)实验结果分析:
使用GPU用GRU模型跑30次后的训练的结果



输入湖光秋月两相和后的诗句结果

随便输出的五首生成的诗

最后的损失和精确度

使用LSTM跑30次后的结果:


输入湖光秋月两相和后的诗句结果


随便输出的五首生成的诗

最后的损失和精确度

(三)总结:
本实验基本完成课程设计要求,使用GRU模型跑30次的结果最后loss可以降到2.14,accuracy=0.65左右,使用LSTM跑30次后的结果最后loss可以降到2.17 , accuracy=0.65 左右,虽然两者的差别不是很大,使用GRU生成了三句,使用LSTM生成了7句,比较最后输出的诗句结果LSTM有重复字,两者都有些押韵的样子,就我个人的体会觉得GRU会更好一点点。

tensorflow2.0 实现自动写诗相关推荐

  1. 飞桨2.0应用案例教程 — 用BERT实现自动写诗

    用BERT实现自动写诗 作者:fiyen 日期:2021.06 摘要:本示例教程将会演示如何使用飞桨2.0以及PaddleNLP快速实现用BERT预训练模型生成高质量诗歌. 摘要 古诗,中华民族最高贵 ...

  2. Pytorch+LSTM+AI自动写诗实战

    文章目录 1.数据集和任务定义 2.读取数据集 3.数据预处理 4.数据制作 5.定义网络结构: 6.测试网络 7.可视化 8.总结 1.数据集和任务定义 本次采用的是唐诗数据集,一共有接近60000 ...

  3. 百度API实现自动写诗

    作者介绍 张琪,男,西安工程大学电子信息学院,2022级研究生 研究方向:机器视觉与人工智能 电子邮件:3126743452@qq.com 王泽宇,男,西安工程大学电子信息学院,2022级研究生,张宏 ...

  4. 『NLP经典项目集』06: 使用预训练模型ERNIE-GEN自动写诗

    使用PaddleNLP预训练模型ERNIE-GEN生成诗歌 诗歌,是中国文化的瑰宝,它饱含作者的思想感情与丰富的想象,语言凝练而形象性强,具有鲜明的节奏,和谐的音韵,富于音乐美.诗歌语句一般分行排列, ...

  5. 深度学习-tensorflow2:03 - AI写诗

    简介:利用tensorflow2框架,基于循环神经网络(RNN)的长短期记忆神经网络(LSTM)的生成算法,可以让AI生成诗歌,功能可以根据用户输入的起始字.意境等自定义参数生成诗歌.生成的每一首诗歌 ...

  6. 惊!揭秘AI人工智能机器人自动写诗的奥秘!

    最近央视某综艺节目中一个AI机器人随机为知名主持人撒贝宁即兴赋诗一首的事情在网络上热传,那么这个AI机器人究竟是如何在这么短的时间内根据一个人的名字写出这么优秀的诗作,甚至连撒贝宁自称为"千 ...

  7. 自动写诗APP项目、基于python+Android实现(技术:LSTM+Fasttext分类+word2vec+Flask+mysql)第三节

    二.用户主题词分类,相似词生成 1.word2vec模型原理 在主题词分类.候选词生成.选取时,都使用了word2vec模型.word2vec模型主要包含两部分:跳字模型(skip-gram)和连续词 ...

  8. 深度学习框架PyTorch入门与实践:第九章 AI诗人:用RNN写诗

    我们先来看一首诗. 深宫有奇物,璞玉冠何有. 度岁忽如何,遐龄复何欲. 学来玉阶上,仰望金闺籍. 习协万壑间,高高万象逼. 这是一首藏头诗,每句诗的第一个字连起来就是"深度学习". ...

  9. pip更新失败_最全Tensorflow2.0 入门教程持续更新

    最全Tensorflow 2.0 入门教程持续更新: Doit:最全Tensorflow 2.0 入门教程持续更新​zhuanlan.zhihu.com 完整tensorflow2.0教程代码请看ht ...

  10. tensorflow2.0 GPU 版本安装测试教程及新特性初探

    安装与测试 TensorFlow2.0安装: pip install tensorflow-gpu==2.2.0 -i https://pypi.douban.com/simple/ conda in ...

最新文章

  1. 给程序员的几条建议,精彩配图!
  2. Android的单位px,pt,dp,sp总结和获取屏幕分辨率
  3. 红帽linux cd命令,redhat linux 文件操作
  4. [react] 使用高阶组件(HOC)实现一个loading组件
  5. MySQL数据库技术与应用:数据查询
  6. 使用python开发json、csv数据格式转换工具
  7. sql 不同数据库同步数据_什么是SQL数据同步
  8. pdf 深入理解kotlin协程_协程初探
  9. Backbox Linux简介与配置内网IP
  10. 记一次RAID阵列的迁移经历
  11. PPT文件太大?如何压缩PPT?这几招教你搞定
  12. 快闪类企业校园招聘H5,这么设计才够炫!
  13. 身为码农,为12306说两句公道话:
  14. 三分钟看完北京城市(含京津冀)【总体规划2016-2050】
  15. pandas 随机抽样
  16. Python和R的GUI图形化编程与用户界面
  17. Python爬取猪八戒网站
  18. k8s集群重新将master节点加入集群
  19. 【Windows11系统更新后蓝牙没了】
  20. Hbuilder X APP开发 iPhoneX以上型号屏幕适应问题

热门文章

  1. python查找相似图片或重复图片
  2. 自动阅读专业版第七次更新---原薅羊毛专业版
  3. matlab怎么编写风雨荷载时程,风雨荷载作用下输电塔动力响应分析
  4. ABB机器人画圆编程_ABB机器人编程基础(功能程序)
  5. Android-EditText属性大全
  6. Python根据字幕文件自动给视频添加字幕
  7. VC调用3dmax自动化对象
  8. 数字图像处理——LoG算子
  9. 对java老师的评价及建议_对老师的评价及建议
  10. x509证书验签方法,支持国密证书