赞
踩
定义: 循环神经网络
结构: 输入层 —> 隐藏层—> 输出层
时间步的概念: 单词在rnn中循环的过程, 一个样本中有多少个单词就循环多少次, 每次循环的过程可以看做是一个时间步, 上一个时间步是可以作为下一个时间步的输入, 进行信息提取.
RNN的作用领域: 在序列问题上可以很好的解决业务逻辑, 文本分类, 意图识别, 机器翻译等任务.
RNN分类
RNN内部结构
需要将输入和隐层进行concat操作(融合) 经过tanh之后进行输出
tanh的作用(why):将数据调节到-1到1之间, 帮助调节流经网路的值
如果实现RNN操作(how):
-
''' 第一个参数:input_size(输入张量x的维度) 第二个参数:hidden_size(隐藏层的维度, 隐藏层的神经元个数) 第三个参数:num_layer(隐藏层的数量) ''' rnn = nn.RNN(5, 6, 2) #A ''' 第一个参数:sequence_length(输入序列的长度) 第二个参数:batch_size(批次的样本数量) 第三个参数:input_size(输入张量的维度) ''' # 一个批次有三个样本(三个句子),每个样本中有两个字/词, 每个字/词被映射到5的维度 input = torch.randn(2, 3, 5) #B ''' 第一个参数:num_layer * num_directions(层数*网络方向) 第二个参数:batch_size(批次的样本数) 第三个参数:hidden_size(隐藏层的维度, 隐藏层神经元的个数) ''' h0 = torch.randn(2, 3, 6) #C output, hn = rnn(input, h0) print('output---',output) print('outputshape==',output.shape) #torch.Size([1, 3, 6]) 1--》 seq_length 3 --batch_size 6 -- 隐藏层节点 print('hn----',hn) print('hnshape===',hn.shape) # torch.Size([1, 3, 6])
LSTM内部结构[长短时记忆结构]
遗忘门:
输入门:
细胞状态:
输出门:
(how) pytorch编码:
# ''' # 第一个参数:input_size(输入张量x的维度) # 第二个参数:hidden_size(隐藏层的维度, 隐藏层的神经元个数) # 第三个参数:num_layer(隐藏层层数) # ''' # lstm = nn.LSTM(5, 6, 2, batch_first=True) # bidirectional=True 设置双向 lstm = nn.LSTM(5, 6, 2) # bidirectional=True 设置双向 # ''' # 第一个参数:sequence_length(输入序列的长度) # 第二个参数:batch_size(批次的样本数量) # 第三个参数:input_size(输入张量x的维度) # ''' input = torch.randn(3, 5, 5) # ''' # 第一个参数:num_layer * num_directions(隐藏层层数*方向数) # 第二个参数:batch_size(批次的样本数量) # 第三个参数:hidden_size(隐藏层的维度) # ''' h0 = torch.randn(2, 3, 6) c0 = torch.randn(2, 3, 6) # # 将input1, h0, c0输入到lstm中, 输出结果 output, (hn, cn) = lstm(input, (h0, c0)) # # print(output) print('lstmoutput===',output.shape) # # print(hn) print('lstmhn===',hn.shape) # # print(cn) print('lstmcn===',cn.shape)
lstm优势或劣势:
优势: 缓解了梯度消失或是梯度爆炸
劣势: 内部复杂, 计算效率要比RNN低
推荐连接:
缓解梯度消失的方法就是:
GRU内部结构[门控循环单元]
(What)结构: 更新门 重置门
(how)代码实现同RNN和LSTM
优势:
缺点: 不能进行并行运算.
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。