时间序列学习(3)——【循环神经网络中layer的使用】

文章目录

  • 1 输入数据的维度表示
  • 2 介绍nn.RNN
    • 2.1 __init__函数
    • 2.2 out, ht = forward(x, h0)
  • 3 单层single layer RNN
    • 3.1 分析 输出out的shape
    • 3.2 分析 输出h 的shape
  • 4 多个RNN 层
  • 4 简单时序预测问题


本文记录学习循环神经网络layer 使用,是时间序列学习(3)

时间序列学习(1)
https://editor.csdn.net/md/?articleId=124550867

时间序列学习(2)
https://editor.csdn.net/md/?articleId=124551429


1 输入数据的维度表示

时间序列学习(3)——【循环神经网络中layer的使用】_第1张图片


输入数据x: [seq, batch, feature_len]

  • seq :表示一句话有几个单词
  • batch:表示一次输入几句话
  • feature_len : 表示每个单词用feature_len 维的向量来表示

例如: [10, 3, 100]
表示10个单词一句话,一次性输入3句话,每个单词用100d的向量表示。


每个单元的 x t x_t xt 表示,[batch, feature_len], 例如 [3, 100]


所以,最开始的 h 0 h_0 h0 必须要初始化为 [batch, hidden] 才能作为 memory 往后传。
时间序列学习(3)——【循环神经网络中layer的使用】_第2张图片
时间序列学习(3)——【循环神经网络中layer的使用】_第3张图片

2 介绍nn.RNN

2.1 __init__函数

  • 注意,输入的x的size: [seq, batch, vec]**
  1. input_size : 就是每个词向量的维数,也就是输入x中的vec(100d)
  2. hidden_size : 特征深度
  3. num_layers : 默认是1

2.2 out, ht = forward(x, h0)

  • 注意这里的返回值是两个

x x x : [seq_len, b, word_vec]
h o 和 h t h_o 和h_t hoht :[num_layers, b, h_dim]
o u t out out : [seq_len, b, h_dim]

注意:out是一个聚合过的信息,每一个单词都会有一个输出

3 单层single layer RNN

import torch
from torch import nn

# 定义一个单层的RNN
rnn_layer = nn.RNN(input_size=100, hidden_size=20, num_layers=1)
print(rnn_layer)

x = torch.rand(10, 3, 100)

out, h = rnn_layer(x, torch.zeros(1, 3, 20))  # h0也可以不写
print(out.shape, h.shape)
  • 输出情况:
RNN(100, 20)
torch.Size([10, 3, 20]) torch.Size([1, 3, 20])

3.1 分析 输出out的shape

  • [10, 3, 20] : 表示每个句子10个单词, 一共是3个句子,然后用20d来表示每个单词

3.2 分析 输出h 的shape

  • [1, 3, 20] : 1是lay_num, 3表示是3个句子, 20表示的是每个词的特征维度。这是一层RNN的输出 h

4 多个RNN 层

  • 最后输出的h,代表的是所有RNN 输出的h
  • 最后输出的out, 是最后一个memory输出的out, 中间的状态是没有的
    时间序列学习(3)——【循环神经网络中layer的使用】_第4张图片

4 简单时序预测问题

  • 比如说,正弦函数的波形的预测
    时间序列学习(3)——【循环神经网络中layer的使用】_第5张图片

我会专门写一篇博文来分析这个正弦函数预测问题,包括代码+详解,对于RNN的输入输出分析!!
欢迎大家移步下方链接学习!

https://blog.csdn.net/weixin_42521185/article/details/124566528

你可能感兴趣的:(循环神经网络,rnn,学习,深度学习)