刘二大人PyTorch深度学习实践-13-RNN Classifier

本文基于刘二大人《PyTorch深度学习实践》介绍RNN Classifier,探讨如何预测名字所属的语言/国家。重点讲解双向RNN结构、PackedSequence的使用,以及训练过程中的实验结果分析,实验最佳accuracy约85%,关键epoch在15-25之间。
摘要由CSDN通过智能技术生成

引用自: 刘二大人 《PyTorch深度学习实践》

传送门: 刘二大人 《PyTorch深度学习实践》


传送门2:数据集


一、实现功能

! ! !   给 出 一 个 名 字 n a m e , 找 到 它 对 应 的 语 言 l a n g u a g e / 国 家 c o u n t r y \color {RED} {!!! \ 给出一个名字name,找到它对应的语言language/国家country} !!! namelanguage/country

共有来自18种语言的names。预测一个name属于哪种语言/国家。

二、模型整体架构

三、亿点点准备知识和实现细节

3.1 Bi-directional GRU/LSTM/RNN

双 向 结 构 的 R N N 中 : \color {orange} {双向结构的RNN中:} RNN:

最 终 h i d d e n 是 由 两 个 方 向 的 第 n 个 h i d d e n 拼 接 而 成 的 \color {orange} {最终hidden是由两个方向的第n个hidden拼接而成的} hiddennhidden

output, hidden = self.gru(gru_input, hidden)
if self.num_directions == 2:
    hidden_cat = torch.cat([hidden[-1], hidden[-2]], dim = 1) # GRU为双向时,hidden = [前向的第n个hidden, 反向的第n个hidden] 连接
else:
    hidden_cat = hidden[-1] # GRU为单向时,hidden = 前向的第n个hidden

3.2 对输入的name的转置处理

input = input.t()  # 将input shape由BatchSize * SeqLen -> SeqLen * BatchSize

3.3 RNNClassifier类中forward()方法中的embedding

e m b e d d i n g 的 s h a p e : ( s e q L e n , b a t c h S i z e , h i d d e n S i z e ) \color {green} {embedding的shape: (seqLen, batchSize, hiddenSize)} embeddingshape:(seqLen,batchSize,hiddenSize)

embedding = self.embedding(input)

3.4 forward()方法中的pack_padded_sequence()方法

! ! ! 新 的 重 要 知 识 点 \color {tomato} {!!!新的重要知识点}
使用前需要from torch.nn.utils.rnn import pack_padded_sequence
返回一个PackedSequence对象
第1个参数的shape:(seqLen, batchSize, hiddenSize)
第2个参数是一个tensor, 它是每个batch element的序列长度的列表

gru_input = pack_padded_sequence(embedding, seq_lengths)

  • 14
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值