循环神经网络RNN LSTM Pytorch的运用 padding处理

Theroy

  • RNN

    • 详细展示RNN的网络结构

    • 循环神经网络(Recurrent Neural Network,RNN)和 LSTM
      循环神经网络RNN LSTM Pytorch的运用 padding处理_第1张图片

      RNN理解 (相同参考文献)

    • 常见RNN及其架构


  • LSTM

    • lstm理解与使用(pytorch为例)

    循环神经网络RNN LSTM Pytorch的运用 padding处理_第2张图片

    • 本文介绍RNNs及一种广泛应用的RNNs——LSTM

Theroy with code

  • RNN

    • RNN,写起来真的烦
    • explain each parameters of RNN in pytorch: 最简单的RNN回归模型入门(PyTorch)
    • 一个使用RNN进行财务预测的PyTorch示例 (一维)
    • RNN 用于时间序列的分析 (例子为10 年飞机月流量)
    • RNN及LSTM理解 (理论+简单例子,清晰,不错!)

  • LSTM

    • many to one 的形式解决MINIST数据集 手写数字分类问题 (纯code例子)
    • LSTM入门例子:根据前9年的数据预测后3年的客流(PyTorch实现)
    • Pytorch的LSTM的理解 (自然语言处理)
    • (PyTorch)使用 LSTM 预测时间序列(股票)
    • 教你几招搞定 LSTMs 的独门绝技(附代码)
    1. 如何在 PyTorch 中采用 mini-batch 中的可变大小序列实现 LSTM 。
    2. PyTorch 中 pack_padded_sequence 和 pad_packed_sequence 的原理和作用。
    3. 在基于时间维度的反向传播算法中屏蔽(Mask Out)用于填充的符号。
    • 深度学习 Pytorch中RNN/LSTM 模型小结 (有公式和例子)
      循环神经网络RNN LSTM Pytorch的运用 padding处理_第3张图片

  • Pytorch Parameters

    • 关于Pytorch中LSTM的输入输出解释
    • 牛刀小试之用pytorch实现LSTM (主要为LSTM输入输出参数解释及代码演示)
    • 【干货】基于pytorch的CNN、LSTM神经网络模型调参小结
    Param Value
    Dropout Dropout大多数论文上设置都是0.5,据说0.5的效果很好,能够防止过拟合问题,但是在不同的task中,还需要适当的调整dropout的大小,出来要调整dropout值之外,dropout在model中的位置也是很关键的,可以尝试不同的dropout位置,或许会收到惊人的效果。
    batch size 这个还是需要去适当调整的,看相关的blogs,一般设置不会超过128,有可能也很小,在我目前的任务中,batch size =16有不错的效果。
    learning rate 学习率这个一般初值对于不同的优化器设置是不一样的,据说有一些经典的配置,像Adam :lr = 0.001
    迭代次数 根据自己的task、model、收敛速度、拟合效果设置不同的值
    hidden size LSTM中的隐藏层维度大小也对结果有一定的影响,如果使用300dim的外部词向量的话,可以考虑hidden size =150或者是300,对于hidden size我最大设置过600,因为硬件设备的原因,600训练起来已经是很慢了,如果硬件资源ok的话,可以尝试更多的hidden size值,但是尝试的过程中还是要考虑一下hidden size 与词向量维度的关系(自认为其是有一定的关系影响的)

Different length in one batch: Padding

  • Pretty detail !! 【Pytorch】详解RNN网络中文本的pack和pad操作
  • PyTorch 训练 RNN 时,序列长度不固定怎么办?
    另一例子
  • 小记:处理LSTM+embedding变长序列
  • pytorch里的pack_padded_sequence和pad_packed_sequence解析 (例子为文本处理)

为什么要用pack_padded_sequence

在使用深度学习特别是LSTM进行文本分析时,经常会遇到文本长度不一样的情况,此时就需要对同一个batch中的不同文本使用padding的方式进行文本长度对齐,方便将训练数据输入到LSTM模型进行训练;同时为了保证模型训练的精度,应该同时告诉LSTM相关padding的情况,此时,pytorch中的pack_padded_sequence就有了用武之地。

  • pytorch中如何处理RNN输入变长序列padding (句子举例)
  • 各种框架对变长rnn数据的处理
import torch
import torch.nn as nn
from torch.autograd import Variable
from torch.nn import utils as nn_utils
batch_size = 2
max_length = 3
hidden_size = 2
n_layers =1

tensor_in = torch.FloatTensor([[1, 2, 3], [1, 0, 0]]).resize_(2,3,1)
tensor_in = Variable( tensor_in ) #[batch, seq, feature], [2, 3, 1]
seq_lengths = [3,1] # list of integers holding information about the batch size at each sequence step

# pack it
pack = nn_utils.rnn.pack_padded_sequence(tensor_in, seq_lengths, batch_first=True)

# initialize
rnn = nn.RNN(1, hidden_size, n_layers, batch_first=True)
h0 = Variable(torch.randn(n_layers, batch_size, hidden_size))

#forward
out, _ = rnn(pack, h0)

# unpack
unpacked = nn_utils.rnn.pad_packed_sequence(out)
print(unpacked)

Other

  • pytorch张量数据类型入门
  • Pytorch数据读取(Dataset, DataLoader, DataLoaderIter)
  • 官方文件: torch.nn

你可能感兴趣的:(Python,机器学习,神经网络,深度学习,python)