Pytorch使用

torch.nn. 和 torch.nn.function 中的函数区别

  • 一般来说,在神经网络中,线性变换,卷积等操作需要保存参数,因此Linear,conv2d等一般需要使用torch.nn中的模块,并在_init_函数中提前新建;(torch.nn.function中的通常为单纯的函数,如果有参数需要自己维护)
  • Relu等激活函数本身没有参数,因此可以在forward函数中直接使用;
  • 那么F.conv2d和F.Linear有什么用呢?例如,在不同层参数共享时就需要用到:


    共享权重

Tensor 序列反转

  • 为了实现双向LSTM, 因为pytorch原有的双向LSTM,当设置dropout>0时,不能保证实验的复现效果;


tensor维度操作

  • torch.cat 对数据沿着某一维度进行拼接。cat后数据的总维数不变
  • torch.stack 而stack会增加新的维度,如对两个1*2维的tensor在第0个维度上stack,则会变为2*1*2的tensor;在第1个维度上stack,则会变为1*2*2的tensor。
  • transpose ,交换维度 例如x.transpose(0,1),交换x,y维度
  • permute是更灵活的transpose,可以灵活的对原数据的维度进行调换,例如x_p = x.permute(1,0,2) # 将原来第1维变为0维

contiguous()

有些函数操作(例如view)依赖整块内存,因此,如果view之前使用了transpose和permute等操作,则需要在view之前执行contiguous(),但在0.4版本中,增加了torch.reshape()函数,相当于tensor.contiguous().view();

你可能感兴趣的:(Pytorch使用)