• 循环神经网络——下篇【深度学习】【PyTorch】【d2l】


    6、循环神经网络

    6.7、深度循环神经网络

    6.7.1、理论部分

    设计多个隐藏层,目的是为了获取更多的非线性性。深度循环神经网络需要大量的调参(如学习率和修剪) 来确保合适的收敛,模型的初始化也需要谨慎。

    在这里插入图片描述

    6.7.2、代码实现

    配置超参数

    import torch
    from torch import nn
    from d2l import torch as d2l
    
    batch_size, num_steps = 32, 35
    train_iter, vocab = d2l.load_data_time_machine(batch_size, num_steps)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    vocab_size, num_hiddens, num_layers = len(vocab), 256, 2
    num_inputs = vocab_size
    device = d2l.try_gpu()
    lstm_layer = nn.LSTM(num_inputs, num_hiddens, num_layers)
    model = d2l.RNNModel(lstm_layer, len(vocab))
    model = model.to(device)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    训练&预测

    num_epochs, lr = 500, 2
    d2l.train_ch8(model, train_iter, vocab, lr*1.0, num_epochs, device)
    
    • 1
    • 2

    在这里插入图片描述

    6.8、双向循环神经网络

    6.8.1、理论部分

    适合抽取特征,填空,如:填充缺失的单词、词元注释。

    并不适合预测未来,它需要上下文,下文(未来)未知逻辑上讲不通的一个结构。

    原理图

    在这里插入图片描述

    前向隐状态

    H t → = Φ ( X t W x h ( f ) + H t − 1 → w h h ( f ) + b h ( f ) ) H^→_t = Φ(X_tW_{xh}^{(f)}+H_{t-1}^→w_{hh}^{(f)}+b_{h}^{(f)}) Ht=Φ(XtWxh(f)+Ht1whh(f)+bh(f))

    反向隐状态

    H t ← = Φ ( X t W x h ( b ) + H t + 1 ← w h h ( b ) + b h ( b ) ) H_t^← = Φ(X_tW_{xh}^{(b)}+H_{t+1}^←w_{hh}^{(b)}+b_h^{(b)}) Ht=Φ(XtWxh(b)+Ht+1whh(b)+bh(b))

    隐状态

    两者连接后,得到 H t H_t Ht

    输出

    O t = H t W h q + b q O_t= H_tW_{hq} +b_q Ot=HtWhq+bq

    6.8.2、代码实现

    双向循环神经网络的错误应用

    import torch
    from torch import nn
    from d2l import torch as d2l
    
    # 加载数据
    batch_size, num_steps, device = 32, 35, d2l.try_gpu()
    train_iter, vocab = d2l.load_data_time_machine(batch_size, num_steps)
    # 通过设置“bidirective=True”来定义双向LSTM模型
    vocab_size, num_hiddens, num_layers = len(vocab), 256, 2
    num_inputs = vocab_size
    lstm_layer = nn.LSTM(num_inputs, num_hiddens, num_layers, bidirectional=True)
    model = d2l.RNNModel(lstm_layer, len(vocab))
    model = model.to(device)
    # 训练模型
    num_epochs, lr = 500, 1
    d2l.train_ch8(model, train_iter, vocab, lr, num_epochs, device)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    在这里插入图片描述

    不能盲目地将这一语言模型应用于任何预测任务。 尽管模型产出的困惑度是合理的, 该模型预测未来词元的能力却可能存在严重缺陷。

    6.9、机器翻译

    6.9.1、理论部分

    将序列从一种语言自动翻译成另一种语言。

    神经网络机器翻译方法,强调的是端到端的学习。机器翻译的数据集是由源语言和目标语言的文本序列对组成的。

    (待补充。。。)

    6.10、编码器解码器架构

    6.10.1、理论部分

    在这里插入图片描述

    这个架构常用于编码器-解码器架构是一种常用于序列到序列(Seq2Seq)任务的深度学习架构。序列到序列的问题举例:NLP问题(机器翻译、问答系统和文本摘要)。

    编码器(Encoder)

    将输入形式编码成中间表达形式。

    中间表示被称为“编码”或“特征”。

    解码器(Decoder)

    将中间表示解码成输出形式。

    也会有额外的输入。为啥?

    输入一些额外的信息来帮助解码器生成正确的输出序列。这些额外的信息可以是一些上下文信息,例如输入序列的长度、标点符号和语法结构等。

  • 相关阅读:
    HTML5拖放(Drag and Drop)全面指南:让网页互动起来
    【Java】内部类、File类、线程优先级
    可阅读随机字符串与随机字符串
    CPSE深圳充换电展开幕,飞凌嵌入式引领智能充储技术新潮流
    MySQL数据库——修改表
    基于Python实现的模拟退火算法
    Vue中图片上传组件封装-antd的a-upload二次封装-案例
    Opencv Python图像处理笔记一:图像、窗口基本操作
    Redis 入门和数据类型讲解
    使用vscode调试ffmpeg源码
  • 原文地址:https://blog.csdn.net/weixin_44041700/article/details/132968131