Pytorch学习笔记-----RNN
RNN
Recurrent Neural Network : RNN.
隐藏层之间有连接,是主要用于序列数据的分类,预测等处理的神经网络。
RNNCell
RNN的运行模式是左侧的图,拆分开来为右侧
h(t-1)送入RNNCell求h(t),h(0)代表先验
RNNCell的本质是一个Linear Layer
for x in X:
h=Linear(x,h)
#h(1)=linear(x1,h0)
#h(2)=linear(x2,h1)
可以将两次线性运算转化为一次线性运算,将w_hh和w_ih拼接成一个矩阵,x和h拼接成一个矩阵,做矩阵乘法即可
How to use RNNCell
import torch
batch_size=1
seq_len=3 #输入序列长度为3
input_size=4 #输入数据是3维向量
hidden_size=2 #隐藏层是2维向量
cell=torch.nn.RNNCell(input_size=input_size,hidden_size=hidden_size)
#(seq,batch,features)
#randn()从标准正态分布(均值为0,方差为1)中抽取的一组随机数。返回一个张量
dataset=torch.randn(seq_len,batch_size,input_size)
#返回一个全0的所给维度的张量h0
hidden=torch.zeros(batch_size,hidden_size)
for idx,input in enumerate(dataset):
print('='*20,idx,'='*20)
print("Input size: ",input.shape)
hidden=cell(input,hidden)
print('outputs size: ',hidden.shape)
print(hidden)
How to use RNN
out中的input_size变为hidden_size
Using RNNCell
one-hot编码
One-Hot 编码,又称为一位有效编码,主要是采用N位状态寄存器来对N个状态进行编码,每个状态都由他独立的寄存器位,并且在任意时候只有一位有效。
One-Hot 编码是分类变量作为二进制向量的表示。这首先要求将分类值映射到整数值。然后,每个整数值被表示为二进制向量,除了整数的索引之外,它都是零值,它被标记为1。
python列表解析
列表推导式提供了一个创建链表的简单途径,每一个列表推导式包括在一个 for 语句之后的表达式,零或多个 for 或 if 语句。返回值是由 for 或 if 子句之后的表达式得到的元素组成的列表。如果想要得到一个元组,必须要加上括号。
基本列表解析
data=[12,2,3,4]
c=[x for x in data] #[12, 2, 3, 4]
d=[x**2 for x in data] #[144, 4, 9, 16]
e=[(x,x**2) for x in data]
#[(12, 144), (2, 4), (3, 9), (4, 16)]
条件列表解析
f=[x*3 for x in data if x%2==0] #[36, 6, 12]
嵌套列表解析
x_data=[1,0,2,2,3]
one_hot_lookup=[[1,0,0,0],
[0,1,0,0],
[0,0,1,0],
[0,0,0,1]]
x_one_hot