1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 使用RNN神经网络自动生成名字 (不使用深度学习框架 源码)

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

时间:2020-04-13 02:23:08

相关推荐

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

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

数据集和可执行的源码下载地址:/liangyihuai/deeplearning_liang/tree/master/src/rnn/dinosaur_name

其中main.py文件存放调用训练模型的方法。

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

下图表示,RNN网络。

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

输入的数据

aachenosaurusaardonyxabdallahsaurusabelisaurusabrictosaurusabrosaurus

上面是一部分输入数据,每一行表示一个恐龙的名字,总共有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。

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

谢谢!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。