RNN中隐状态 h h h的维度
- 默认为(seq_len, batch_size, input_size),此时batch_first=False
- 当设置batch_first为True时,维度为(batch_size, seq_len,input_size)
Variable属性方法
variable的volatile属性默认为False,如果某一个variable的volatile属性被设为True,那么所有依赖它的节点volatile属性都为True。volatile属性为True的节点不会求导,volatile的优先级比requires_grad高。
关于torchtext设置了Filed的include_lengths=True后返回的长度
如果包含了和,则返回的长度会在原始的句子长度上+2
关于permute()函数与contiguous(),view()的使用
- 常见用法: x.permute(1,0,2).contiguous().view()
- permute函数将tensor的维度换位
- contiguous()一般在permute()等改变形状和计算返回的tensor后面,因为改变形状后,有的tensor并不是占用一整块内存,而是由不同的数据块组成,而tensor的view()操作依赖于内存是整块的,这时只需要执行contiguous()这个函数,把tensor变成在内存中连续分布的形式。
- view后不用考虑contiguous
关于permute()函数与transpose()函数对比
- permute需要指明转换后的每个维度,而transpose只需指明需要转换的两个维度,如input是有一个有三个维度的tensor,调用permute方式为:input.permute(1,0,2),调用transpose方式为:transpose(0,1)
- 二者使用后都要加contiguous()
- permute比transpose更灵活,可以使用多个transpose来完成permute操作
- 当permute(2,1,0)和 transpose(0,2),即只做一次交换,实测transpose更快;
- 当permute(2,0,1)和 transpose(0,2).tranpose(1,2),即要做两次交换,实测permute更快
关于矩阵相乘torch.matmul的广播机制
a = torch.ones(5,2,3,4)
b = torch.ones(5,2,3,4)
c = torch.matmul(a, b.transpose(-2,-1)) # c的shape为(5,2,3,3),即最后两个维度表示的矩阵完成了矩阵的乘法