# Flask+LSTM实现AI写诗
### 前言
基于flask+LSTM实现AI写诗。支持根据提示词续写全诗和藏头诗。
该项目参考了《pytorch入门与实践》的教程。
### 运行效果
#### 1、首句生成
根据提示词输入,生成诗句。提示词是基于训练数据分词后的结果,所以可能会出现提示词不在训练数据中无法生成的情况。
![image](static/img_1.png)
生成诗句后填写作者和诗名,点击保存即可保存到数据库中。
![image](static/img.png)
界面点击广场可以查看其他用户生成的诗句。
![image](static/img_2.png)
### 2、藏头诗
eg:输入"今天天气不错",生成的诗句为:
![image](static/img_3.png)
今日一气生。
天子行北极。
天府拱飞车。
气利纵横折。
不知天地地。
错豁三秋景。
### 前期准备
- core i7 的笔记本
- 一个 GTX 1080ti 的显卡
- 装上pytorch的cpu和GPU版本
### 数据集
整理好的numpy格式数据集,
http://pytorch-1252820389.cosbj.myqcloud.com/tang_199.pth
其中包含唐诗57580首*125字,不足和多余125字的都被补充或者截断。
### 实现细节
1. data是numpy数组,57580首*125字
2. word2ix和ix2word都是字典类型,用于字符和序号的映射
3. nn.Embedding层可以输入为long Tensor型的字的下标(int),输入为同样shape的词向量,下标换成了向量,其余形状不变。最重要的构造参数是num_embeddings, embedding_dim
4. nn.LSTM主要构造参数input_size,hidden_size和num_layers,其中input_size其实就是词向量的维度,forward时输入为input和(h0,c0),其中input为(seq_len,batch_size,input_size),h0和c0是(num_layers $*$ num_directions, batch, hidden_size),而forward的输出为output和(hn,cn),一般后面一个就叫做hidden,output为(seq_len, batch, num_directions $*$ hidden_size)
5. 在本网络中,从前往后总共经历了这么几个网络,其向量变化如下:
- input:(seq_len,batch_size)
- 经过embedding层,embeddings(input)
- embeds:(seq_len,batch_size,embedding_size)
- 经过LSTM,lstm(embeds, (h_0, c_0)),输出output,hidden
- output:(seq_len, batch, num_directions $*$ hidden_size)
- output view为(seq_len $*$ batch, num_directions $*$ hidden_size)
- 进过Linear层判别
- output:(seq_len $*$ batch, vocab_size)
6. 具体训练时的实现方法:
- 输入的input为(batch_size,seq_len)
- data_ = data_.long().transpose(1,0).contiguous()将数据转置并且复制了一份,成了(seq_len,batch_size)
- 通过input_,target = data_[:-1,:],data_[1:,:]将每句话分为前n-1个字作为真正的输入,后n-1个字作为label,size都是(seq_len-1,batch_size)
- 经过网络,得出output:((seq_len-1) $*$ batch, vocab_size)
- 通过target.view(-1)将target变成((seq_len-1) $*$ batch)
- 这里的target不需要是一个one-hot向量,因crossEntropy不需要,直接是下标即可
- 然后反向传播即可
7. 生成诗句的方法:
- 首字为<START>,首个hidden自动为空
- 如果有前缀风格,通过前缀生成hidden
- 在首句内部时,不使用output,仅仅不断前进得到hidden,直到首句结尾。
- 进入生成模式后,实际上每次调用model都生成一个字,逐渐生成前n句话。
- 藏头诗同理,只是在头的部分将诗句首字换掉
### 使用方法
首先训练模型,然后运行app.py,访问。当然也可以直接执行app.py,使用预训练内容。
```python
python main.py
```
```python
python app.py
```
没有合适的资源?快使用搜索试试~ 我知道了~
基于flask+LSTM实现AI写诗。支持根据提示词续写全诗和藏头诗。.zip
共58个文件
css:9个
jpg:9个
py:7个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 8 浏览量
2024-05-22
18:08:50
上传
评论
收藏 93.76MB ZIP 举报
温馨提示
基于flask+LSTM实现AI写诗。支持根据提示词续写全诗和藏头诗。LSTM (Long Short-Term Memory) 是一种特殊的循环神经网络(RNN)架构,用于处理具有长期依赖关系的序列数据。传统的RNN在处理长序列时往往会遇到梯度消失或梯度爆炸的问题,导致无法有效地捕捉长期依赖。LSTM通过引入门控机制(Gating Mechanism)和记忆单元(Memory Cell)来克服这些问题。 以下是LSTM的基本结构和主要组件: 记忆单元(Memory Cell):记忆单元是LSTM的核心,用于存储长期信息。它像一个传送带一样,在整个链上运行,只有一些小的线性交互。信息很容易地在其上保持不变。 输入门(Input Gate):输入门决定了哪些新的信息会被加入到记忆单元中。它由当前时刻的输入和上一时刻的隐藏状态共同决定。 遗忘门(Forget Gate):遗忘门决定了哪些信息会从记忆单元中被丢弃或遗忘。它也由当前时刻的输入和上一时刻的隐藏状态共同决定。 输出门(Output Gate):输出门决定了哪些信息会从记忆单元中输出到当前时刻的隐藏状态中。同样地,它也由当前时刻的输入和上一时刻的隐藏状态共同决定。 LSTM的计算过程可以大致描述为: 通过遗忘门决定从记忆单元中丢弃哪些信息。 通过输入门决定哪些新的信息会被加入到记忆单元中。 更新记忆单元的状态。 通过输出门决定哪些信息会从记忆单元中输出到当前时刻的隐藏状态中。 由于LSTM能够有效地处理长期依赖关系,它在许多序列建模任务中都取得了很好的效果,如语音识别、文本生成、机器翻译、时序预测等。
资源推荐
资源详情
资源评论
收起资源包目录
基于flask+LSTM实现AI写诗。支持根据提示词续写全诗和藏头诗。.zip (58个子文件)
content
promotes.txt 17KB
app.py 5KB
main.py 3KB
templates
poem_detail.html 3KB
square.html 4KB
index.html 5KB
poem.html 4KB
model.py 1KB
poems.db 12KB
generate.py 4KB
tang.npz 5.49MB
data.py 192B
checkpoints
tang_new.pth 46.38MB
tang_0.pth 46.38MB
result.txt 20KB
test.py 1KB
static
img_3.png 330KB
image
square08.jpg 17KB
square03.jpg 11KB
square01.jpg 14KB
square06.jpg 14KB
square05.jpg 18KB
square02.jpg 9KB
square07.jpg 13KB
poem01.jpg 184KB
square04.jpg 10KB
js
jquery.js 262KB
bootstrap-3.4.1-dist
js
bootstrap.js 74KB
npm.js 484B
bootstrap.min.js 39KB
css
bootstrap-theme.min.css.map 74KB
bootstrap.min.css 119KB
bootstrap-theme.css.map 47KB
bootstrap-theme.css 25KB
bootstrap.css.map 382KB
bootstrap.css 143KB
bootstrap-theme.min.css 23KB
bootstrap.min.css.map 528KB
fonts
glyphicons-halflings-regular.svg 106KB
glyphicons-halflings-regular.ttf 44KB
glyphicons-halflings-regular.woff 23KB
glyphicons-halflings-regular.eot 20KB
glyphicons-halflings-regular.woff2 18KB
css
poem.css 577B
square.css 234B
common.css 357B
base.css 1KB
index.css 898B
less
poem.less 678B
index.less 1KB
common.less 430B
square.less 313B
img.png 44KB
img.png 528KB
img_1.png 44KB
img_2.png 473KB
README.md 4KB
config.py 1KB
共 58 条
- 1
资源评论
生瓜蛋子
- 粉丝: 3828
- 资源: 5775
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 数据库管理工具:dbeaver-ce-23.1.5-stable.x86-64.rpm
- 以下是一些适用于英语六级作文的万能句型模板,涵盖了引言、正文和结论部分的各类表达方式.docx
- MATLAB中的非线性规划
- 进行C语言面试资格确认是招聘过程中一个重要的步骤,目的是确保候选人具备足够的C语言编程能力和知识.docx
- Java 轻量级的集群负载均衡设计
- 纹身师个人网站模板.jpg
- 在C语言中,连接两个字符串(即将一个字符串附加到另一个字符串的末尾)通常可以使用标准库中的 `strcat` 函数.docx
- 数据库管理工具:dbeaver-ce-23.1.1-stable.x86-64.rpm
- 以下是几个具体竞赛题目的详细解答,包括建模思路、方法和步骤 .docx
- 一份关于全国大学生建模大赛的相关教程!!
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功