开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第3天,点击查看活动详情
一.设置参数
1.LSTM_UNITS = 128
即这个层的隐藏神经元个数,下面有三个细胞状态,一个cell里有四个黄色框框(即隐藏神经元)
2.DENSE_HIDDEN_UNITS = 4 * LSTM_UNITS
密集隐藏单元
二.构造矩阵
def build_matrix
1.pickle.loads
通过pickle模块的反序列化操作pickle.load(file),能从文件中创建上一次程序保存的对象(在这里的作用就是读取文件)
2.embedding嵌入层(词向量)
max_len=20 #每条文本单词个数最多为20
构建一个将单词(字符串)映射为其向量表示(数值向量)的索引,标准构建如下:
构建可以加载到Embedding层的嵌入矩阵
expanding_dim=100
embedding_matrix=np.zeros((max_words,expanding_dim))
for word,i in word_index.items():
if i<max_words:
embedding_vector=embedding_index.get(word)
if embedding_vector is not None:
embedding_matrix[i]=embedding_vector
3.gc.collect()
就是强制对所有代进行垃圾回收
三.spatialdropout 普通的dropout会随机地将部分元素置零,而SpatialDropout会随机地将部分区域置零
举个例子: 文本的三维张量可以表示为(samples,sequence_length,embedding_dim)
- sequence_length表示句子的长度
- embedding_dim表示词向量的纬度
下图就是普通的随机置零和spatialdropout区域置零的区别
1.x.unsqueeze(2)
tourch.unsqueeze(input,dim) 在指定的位置插入一个维度,有两个参数,input是输入的tensor,dim是要插到的维度。在这里就是在第2维度上插入一个维度,x是input
a = torch.ones(3,4)
'''
运行结果
tensor([[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.]])
'''
a = a.unsqueeze(0)
print(a.shape)
'''
运行结果
tensor([[[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.]]])
torch.Size([1, 3, 4])
'''
2.x.permute
概念:permute函数的作用是对tensor进行转置(通俗点讲就是换维度) x.permute(0,3,2,1)把原来第1维度的数据换成第三维度去