开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第3天,点击查看活动详情
一.NeuralNet
1.nn.Embedding(max_features,embed_size)
给每个特征的每个维度都embedding成一个p维向量 举例理解:
embedding = nn.Embedding(20, 3)
# "20"表示 出现的 feature总数 = sum(每个特征所有维度)= N;"3"表示特征的每个维度用p维向量表示(此时p=3)
那这串代码的意思就是生成了一个max_features行的词典,能表示max_features个不同的特征,每个特征用embed_size维向量表示。
2.embedding.wight
一般是默认的参数,然后直接实行embedding.weight但也可以设置参数,在这里就利用了Parameter设置了
3.torch.tensor()
这个在这里embedding_matrix当做data输入,dtype则是这个data的类型
4.require_grad
在这里需要的网格数设置为false
5.nn.LSTM
nn.LSTM是pytorch中的模块函数,在这里是用到了这几个参数
- nput_size:表示的是输入的矩阵特征数,或者说是输入的维度;
- hidden_size:隐藏层的大小(即隐藏层节点数量),输出向量的维度等于隐藏节点数;
- batch_first:True 或者 False,如果是 True,则 input 为(batch, seq, input_size),默认值为:False(seq_len, batch, input_size)
- bidirectional:如果设置为 True, 则表示双向 LSTM,默认为 False。
6.nn.Linear
torch.nn.Linear(in_features, out_features, bias=True, device=None, dtype=None)
- in_features – 每个输入样本的大小
- out_features – 每个输出样本的大小
二.forward
1.预备知识
我们在定义自己的网络的时候,需要继承nn.Module类,并重新实现构造函数__init__和forward这两个方法。
(1)一般把网络中具有可学习参数的层(如全连接层、卷积层等)放在构造函数__init__()中,当然我也可以吧不具有参数的层也放在里面;
(2)一般把不具有可学习参数的层(如ReLU、dropout、BatchNormanation层)可放在构造函数中,也可不放在构造函数中,如果不放在构造函数__init__里面,则在forward方法里面可以使用nn.functional来代替
(3)forward方法是必须要重写的,它是实现模型的功能,实现各个层之间的连接关系的核心。
2.cat() 函数目的: 在给定维度上对输入的张量序列seq 进行连接操作。
outputs = torch.cat(inputs, dim=?) → Tensor
torch.cat((max_pool,avg_pool),1)
3.F.relu() 目的:激活函数
4.torch.nn.Linear(hidden_layer, output_data) 完成从隐藏层到输出层的线性变换