深度学习实践--RNN 循环神经网络(基础篇)

循环神经网络(基础篇)

在这里插入图片描述
以前在使用全连接神经网络时,这样的网络又称Dense/Deep 神经网络
其输出是样本的不同特征

现在引入另一个案例
每隔一个小时采集当前天的温度,气压,雨/晴的信息
在这里插入图片描述
而这样的数据在现实生活应用中是没有作用的,毕竟天气预报不能等到当天报23333333
在这里插入图片描述
那么我们改一改,即我们每一天都包含若干特征,输入包含若干天。通过前面的若干天的数据,预测出后一天的晴雨状况,perfect!(考虑对数据每四天进行分组,前三天的数据作为输入,第四天作为label,训练网络)
而如果考虑全连接神经网络例如讲前三天的特征数据进行拼接放入全连接神经网络进行运算
在这里插入图片描述
其计算量将会是个巨大的挑战
考虑这样一个问题
在CNN中,有这样一个网络层
inchannel 128
outchannel 64
kernel_size 5
若不计输入x的大小,则其计算次数等于55inchanneloutchannel = 5512864=204800
约为20w
而如果是一个全连接网络
如果是图像处理后还剩4096个元素,经过降维到1024
则其计算量为
4096*1024=4194304
约为400w
虽然卷积层复杂可是权重占比不高,而在神经网络的结构中,全连接神经网络往往占据着很大的比重
而卷积神经网络之所以占比重较小,主要是因为其权重共享的概念,即在处理图像数据时整个图像的卷积核是共享的(滑动)

故引申出RNN用于处理特定序列(时间,空间)数据,且引入权重共享的概念
再次应用上述例子
对于x1,x2,x3由其存在时间上的顺序关系,即后者依赖前者
在这里插入图片描述

什么是RNN

  • RNN Cell
    在这里插入图片描述
    对于时刻t的数据xt(n维),经过RNNCell得到ht(m维)
    故RNNCell其本质就是一个线性层,而其区别于其他线性层的是RNN的权重是共享的
  • RNN
    在这里插入图片描述
    通常我们这样绘制RNN网络因为其权重共享,实质上我们只是运用了一个RNNCell而便于观察,我们可将其展开成如下所示
    在这里插入图片描述
    注意X={x1,x2…xn}为我们不用时刻输入的序列,而RNN Cell本质上是一个,这里的每一个单独的RNN Cell我们都可以认为是不同时刻的同一个Cell 由于其依赖关系,t-1时刻的输出(ht-1)需要作为t时刻的输入(xt+ht-1)

RNNCell结构图如下
在这里插入图片描述
分析一下维度 hidden_size -> h input_size = In
ht-1 h*1
whh[h,h]ht-1[h,1] + bhh[h,1] = x[h,1]
wih[h,In]xt[In
1] + bih[h,1] = y[h,1]
tanh(x + y) = ht[h,1]

注意这里的whh bhh为hi共享的权重
wih bih即为xi共享的权重

构造RNN

两种方式

  • 使用RNNCell 自己构造循环在这里插入图片描述
cell = torch.nn.RNNCell(input_size=input_size,hidden_size=hidden_size)
#确定输入维度,隐藏维度即可确定cell

使用
在这里插入图片描述
在这里插入图片描述
举个例子
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
之所以把batchSize放到第二个,是因为训练的时候每次都是先拿出一批当前的时刻的数据作为输入

import torch
#parameter
batch_size = 1
seq_len = 3
input_size = 4
hidden_size = 2

cell = torch.nn.RnnCell(input_size=input_size,hidden_size=hidden_size)

#(seq,batch,features)
dataset = torch.randn(seq_len,batch_size,input_size)
hidden = torch.zeros(batch_size,hidden_size)

for idx,input in enumerate(dataset):
    print('='*20,idx,'='*20)
    print('Input size',input.shape)

    hidden = cell(input,hidden)
    print('outputs size',hidden.shape)
    print(hidden)
    

-第二种方式 torch.nn.RNN

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值