pytorch 基础

1、permute(dims)将tensor的维度换位。

print(unpermuted.size())  #  ——>  torch.Size([1, 2, 3])
permuted=unpermuted.permute(2,0,1)
print(permuted.size())     #  ——>  torch.Size([3, 1, 2])

2、view
把原先tensor中的数据按照行优先的顺序排成一个一维的数据,然后按照参数组合成其他维度的tensor。参数不可为空。参数中的-1就代表这个位置由其他位置的数字来推断.

a=torch.Tensor([[[1,2,3],[4,5,6]]])
print(a.view(3,2))
#——>tensor([[1., 2.],
          [3., 4.],
          [5., 6.]])
import torch
 
a = torch.Tensor(2,3)
print(a)
# tensor([[0.0000, 0.0000, 0.0000],
#        [0.0000, 0.0000, 0.0000]])
 
print(a.view(1,-1))
# tensor([[0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000]])

3、contiguous:把tensor变成在内存中连续分布的形式。
view只能用在contiguous的variable上。如果在view之前用了transpose, permute等,需要用contiguous()来返回一个contiguous copy。
一种可能的解释是:
有些tensor并不是占用一整块内存,而是由不同的数据块组成,而tensor的view()操作依赖于内存是整块的,这时只需要执行contiguous()这个函数,把tensor变成在内存中连续分布的形式。
判断是否contiguous用torch.Tensor.is_contiguous()函数。
在pytorch的0.4版本中,增加了torch.reshape(), 这与 numpy.reshape 的功能类似。它大致相当于 tensor.contiguous().view()
4、卷积权重初始化
高斯初始化: 从均值为0,方差为1的高斯分布中采样,作为初始权值。

torch.nn.init.normal_(tensor, mean=0, std=1)

kaiming高斯初始化: 由FAIR的大牛Kaiming He提出来的卷积层权值初始化方法,目的是使得每一卷积层的输出的方差都为1,具体数学推导可以参考论文[1]. 权值的初始化方法如下:
xavier高斯初始化
在这里插入图片描述
a为Relu或Leaky Relu的负半轴斜率,nl为输入的维数,即nl=卷积核边长2×channel数。

torch.nn.init.kaiming_normal_(tensor, a=0, mode='fan_in', nonlinearity='leaky_relu')

上述输入参数中,tensor是torch.Tensor变量,a为Relu函数的负半轴斜率,mode表示是让前向传播还是反向传播的输出的方差为1,nonlinearity可以选择是relu还是leaky_relu.
xavier高斯初始化: Glorot正态分布初始化方法,也称作Xavier正态分布初始化,参数由0均值,标准差为sqrt(2 / (fan_in + fan_out))的正态分布产生,其中fan_in和fan_out是分别权值张量的输入和输出元素数目. 这种初始化同样是为了保证输入输出的方差不变,但是原论文中([2])是基于线性函数推导的,同时在tanh激活函数上有很好的效果,但不适用于ReLU激活函数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值