本文讲解在不使用深度学习框架的情况下,构建一个基本的RNN神经网络来进行名字自动生成。RNN模型请看下面的三张图片。本文主要讲解数据集以及输入模型的数据格式。

数据集和可执行的源码下载地址:https://github.com/liangyihuai/deeplearning_liang/tree/master/src/rnn/dinosaur_name
其中main.py文件存放调用训练模型的方法。

下图表示,RNN网络中的一个cell

下图表示,RNN网络。

下图表示,在训练好RNN模型之后,进行名字生成的时候的输入数据。

输入的数据

aachenosaurus
aardonyx
abdallahsaurus
abelisaurus
abrictosaurus
abrosaurus

上面是一部分输入数据,每一行表示一个恐龙的名字,总共有26+1个字符,1表示换行符。每一次输入模型的是一个恐龙名字。其中,X和Y错开一个字符。比如如果X为“aardonyx”,那么Y为“ardonyx\n”。这样的X和Y数据将输入上图2所示的模型中,训练之后的模型将会记住当前字符跟后面一个相邻的字符之间的关系。

名字生成

这里的名字生成,可以看作是模型在完成训练之后的预测阶段。对应上面的第三张图片。我们的目的是让模型自动生成一个名字,所以,我们在开始的时间点T1输入初始化为0的x,得到模型的预测值yhaty^{hat}yhat,然后将yhaty^{hat}yhat作为T2时间的的x值输入模型,直到所生成的yhaty^{hat}yhat为换行符或者时间长度T达到了阈值。在这个过程中,保存所生成的所有的yhaty^{hat}yhat的值到一个列表中。因为一个yhaty^{hat}yhat表示一个字符或者一个字符的下标,所以,多个yhaty^{hat}yhat所构成的字符列表表示模型所生成的一个名字了。

预防梯度爆炸

在代码中,应用了防止梯度爆炸的方法。设置一个阈值K,如果梯度d>K,那么将d设置为K;如果d<-K,则将d设置为-K。如果d在[-K, K]之间,则梯度d不变。

def clip(gradients, maxValue):'''Clips the gradients' values between minimum and maximum.Arguments:gradients -- a dictionary containing the gradients "dWaa", "dWax", "dWya", "db", "dby"maxValue -- everything above this number is set to this number, and everything less than -maxValue is set to -maxValueReturns:gradients -- a dictionary with the clipped gradients.'''dWaa, dWax, dWya, db, dby = gradients['dWaa'], gradients['dWax'], gradients['dWya'], gradients['db'], gradients['dby']### START CODE HERE #### clip to mitigate exploding gradients, loop over [dWax, dWaa, dWya, db, dby]. (≈2 lines)for gradient in [dWax, dWaa, dWya, db, dby]:np.clip(gradient, -maxValue, maxValue, gradient)### END CODE HERE ###gradients = {"dWaa": dWaa, "dWax": dWax, "dWya": dWya, "db": db, "dby": dby}return gradients

其它问题

基础版本的RNN存在因为梯度消失导致的长期依赖问题,不过在本文所使用的数据集中,每一个名字是比较短的,模型可以不用记住很长历史信息,所以问题不是很大,如果所使用的数据是句子,那么使用本文所述的模型是不合适的,建议改用LSTM。

本文所讲到的模型还有其它方面的应用,比如生成具有某一作家风格的文字,自动音乐生成等。

谢谢!

使用RNN神经网络自动生成名字 (不使用深度学习框架,源码)相关推荐

  1. 利用RNN神经网络自动生成唐诗宋词

             RNN(Recurrent Neural Networks)在处理长序列有很强的优势,加上近来前向反馈算法的成功,导致RNN在长文本上得到了很好的应用. 简单来说RNN神经网络能够记 ...

  2. python自动生成标题_使用深度学习自动生成图片标题

    深度学习: 深度学习和机器学习是这个时代最先进的技术.现在将人工智能与人的思想进行比较,在某些领域,人工智能比人类做得更好.每天都有该领域的新研究.这个领域的增长非常快,因为现在我们有足够的计算能力来 ...

  3. 深度学习项目一: keras实现歌词的自动生成 (含数据和所需源码)

    数据集下载:点我下载数据集 我们实现的是歌词的自动生成. 主要看我在代码中的注释..注释的很详细,不懂可以留言. 1:我们加载所需要的模块,这里的模块都是比较常用的模块 from keras.mode ...

  4. 深度学习框架 TensorFlow:张量、自动求导机制、tf.keras模块(Model、layers、losses、optimizer、metrics)、多层感知机(即多层全连接神经网络 MLP)

    日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) 安装 TensorFlow2.CUDA10.cuDNN7.6. ...

  5. 神经网络知识梳理——从神经元到深度学习

    在深度学习十分火热的今天,不时会涌现出各种新型的人工神经网络,想要实时了解这些新型神经网络的架构还真是不容易.光是知道各式各样的神经网络模型缩写(如:DCIGN.BiLSTM.DCGAN--还有哪些? ...

  6. 深度学习框架哪家强?MXNet称霸CNN、RNN和情感分析,TensorFlow仅擅长推断特征提取

    深度学习框架哪家强:TensorFlow?Caffe?MXNet?Keras?PyTorch?对于这几大框架在运行各项深度任务时的性能差异如何,各位读者不免会有所好奇. 微软数据科学家Ilia Kar ...

  7. 自动驾驶LiDAR点云深度学习综述

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 / 导读 / 本文是滑铁卢大学CogDrive实验室和Geospatial Sensing and D ...

  8. 序列处理的深度学习框架——从RNN到Transformer

    目录 Chapter9 序列处理的深度学习框架 9.1 回顾语言模型 (Language Models Revisited) 9.2 循环神经网络 (Recurrent Neural Networks ...

  9. 基于pytorch搭建神经网络的花朵种类识别(深度学习)

    基于pytorch搭建神经网络的花朵种类识别(深度学习) 文章目录 基于pytorch搭建神经网络的花朵种类识别(深度学习) 一.知识点 1.特征提取.神经元逐层判断 2.中间层(隐藏层) 3.学习权 ...

最新文章

  1. 安装mysql error 1045_安装MySQL出现1045错误
  2. android jni 释放资源
  3. 使用第三方《UITableView+FDTemplateLayoutCell》自动计算UITableViewCell高度(Masonry约束)...
  4. 【知识导图】数据结构与算法
  5. 使用c#调用XMLHTTP(XMLHTTPClass) ,发送和返回 json
  6. Vivado Launching SDK Importing Hardware Specification error的解决方法
  7. 无人机之模拟器、加密狗
  8. 解决:另一个 SqlParameterCollection 中已包含 SqlParameter。
  9. 在word中选择所有匹配查找内容的文档内容
  10. 【codecademy笔记1】
  11. 【HR面试100问】一篇文章根治各种HR面的套路问题,文章给出参考答案~持续更新
  12. 关于怎样突破一个个微信投一票及人工刷票微信号推荐的方法和教程
  13. 数学建模学习(90):改进的灰狼优化算法(I-GWO)对多元函数寻优
  14. linux内存测试工具memtest,内存检测工具Memtest使用方法(图文教程)
  15. 租房时代,K2 BPM软件带你拥抱更好生活
  16. MoM(五)解矩阵方程
  17. 内存对齐的规则以及作用 verygood!的一篇文章!
  18. 笑出腹肌的 Emoji 表情符号,你值得拥有
  19. matlab quiver一维矢量图,Matlab quiver函数用法 - 画矢量箭头图
  20. presto时间转换、时间加减、时间差

热门文章

  1. mysql每日备份_Linux下如何实现Mysql数据库每天自动备份定时备份
  2. python tk messagebox_tkMessageBox
  3. 【Java】阶乘 素数 循环
  4. 服务器查看不到集群信息,集群服务器查看内存
  5. mongodb 字符串转bson_BSON及mongoDB数据类型
  6. typeScripy-番外篇之命名空间和模块
  7. Top100论文导读:深入理解卷积神经网络CNN(Part Ⅱ)
  8. 【转】android的startActivityForResult学习心得
  9. java.lang.OutOfMemoryError: Java heap space的解决办法
  10. 我常用的delphi 第三方控件