Basic RNN 是神经网络的一种,适用于把一个序列变成另一个序列,例如天气 股市 自然语言处理,使用需要了解1序列数据2循环过程的权重共享机制
- DNN dense 稠密网络,deep 深网络 有很多线性层
- x1,x2,x3x4...是数据样本的不同特征
- 全连接层的运算量很大,相比比之下卷积因为有权重共享计算量小的多
补充python中join()方法 和 end
Python join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串
语法:
str.join(sequence)实例:
str = "-"
seq = ("a", "b", "c"); # 字符串序列 print str.join( seq );
输出:
a-b-cPython end=' '意思是末尾不换行,加空格
RNNs:
- h2不仅受到x2的与影响,也受到x1的影响,因此要对他们做一个融合
- RNN CELL中,常用的激活函数是tanh,因为取值在-1 1
- 可以把RNN看成一个线性层
代码:
#最重要的两个参数是input size和hidden size
import torch.nn.RNNCell(input_size=input size,hidden_size=hidden_size)
#实例化RNN CELL
cell=torch.nn.RNNCell(input_size=input size,hidden_size=hidden_size)
#调用,input 当前时刻的输入,加上当前的hidden,得到结果为hidden
hidden=cell(input,hidden)
- 在RNN中,需要注意的是 超参数~
代码:调用RNNCELL 需要循环,循环长度是序列长度
import torch
#先设置参数
barch_size=1
seq_len=3
input_size=4
hidden_size=2
#构造RNN CELL
cell=torch.nn.RNNCell(input_size=input_size,hidden_size=hidden_size)
#示例 (seq,batch,features)
dataset=torch.randn(seq_len,batch_size,input_size)
#隐层设为全0
hidden=torch.zeros(batch_size,hidden_size)
#训练循环
for idx,input in enumerate(dataset):
print('='*20,idx,'='*20)
print('Input size:',input.shape)
#隐层维度=batch_size*hidden_size
hidden=cell('output size:',hidden.shape)
print(hidden)
- 需要搞清楚维度~多了一个序列维度
#RNN有多少层
cell=torch.nn.RNNCell(input_size=input size,hidden_size=hidden_size,
num_layers=num_layers)
#RNN输入inputs整个输入序列x1...xN,hidden 是h0,输入第一个张量outh1...hn,第二个张量hidden是hn
out,hidden=cell(inputs,hidden)