RNN(Recurrent Neural Network)- 最简单的python例子理解

  1. RNN简介
    RNN是用于处理序列数据的神经网络
    百度百科词条:时间序列数据是指在不同时间点上收集到的数据,这类数据反映了某一事物、现象等随时间的变化状态或程度。这是时间序列数据的定义,当然这里也可以不是时间,比如文字序列,但总归序列数据有一个特点——后面的数据跟前面的数据有关系。

a. 回忆一下普通的神经网络是如何运作的:
把训练数据一条条的放进去,对每一条数据做很多加权处理,通过输入层->隐层->输出层->跟期望数据对比得到误差->反过来调整整个网络的权值->下一条数据
简单来说:input -> hidden -> output,这是个封闭的网络
b. 问题在哪:
我们想象一个场景,一个不规则曲面,一个球在上面运动,每秒记录一次位置,十次位置作为一条训练数据,我们需要通过前9次的位置来判断最后一次球应该在哪。
如果放到普通的神经网络,我们会把前九次位置都作为特征值输入,但想象一下,其实这个球最后在哪应该是跟最后一次位置最密切相关,并且依次会同时需要前面的位置信息一起判断,会更精确。
c. 这时候RNN就可以派上用场了
RNN里可以先把最后一次位置作为输入,得到一个结果,统计误差 - 但是不回调各层权值,而是继续输入第8次的位置,同时也把前面计算得到的结果作为隐层的一个输入:
(input + prev_hidden) -> hidden -> output
我们可以设置隐层循环的次数,也就是对应于要考虑前面的多少个位置信息,这样很灵活而且引入了经验判断。在设定的次数都完成之后再去计算跟期望值的误差,回过头来调整各层之间的权值。

下图就是具体的RNN神经网络结构图,可以注意到对于多次隐层的循环,我们用的权值是一样的

在这里插入图片描述

延伸阅读:LSTM

  1. 一个最简单的python例子+详细解释
    这里要感谢下文的作者,真的讲的非常好,这个例子也是他写的
    http://iamtrask.github.io/2015/11/15/anyone-can-code-lstm/

下面是对于这个例子的理解,记录下来便于以后翻阅和大家读代码
我们要解决的问题:两个8位以内的二进制数加法(足够简单)
a+b=c
9 + 60 = 69
9 = [0 0 1 1 1 1 0 0]
60 = [0 0 1 1 1 1 0 0]
69 = [0 1 0 0 0 1 0 1]

基本思想:

构造一个2(input) * 16(hidden) * 1(output)的神经网络,不设置bias值,注意除了普通神经网络的权值synapse_0(2 * 16)和synapse_1(16 * 1),我们还有隐层的自身权值synapse_h(16 * 16)
激活函数如下:
hidden layer : layer_1 = sigmoid(np.dot(X, synapse_0) + np.dot(layer_1_values[-1], synapse_h))(hidden layer的激活函数用上了前面一次计算的结果l

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值