PyTorch入门(三)PyTorch常用操作

PyTorch常用操作

      • bilinear kernel

bilinear kernel

def bilinear_kernel(in_channels,out_channels,kernel_size):
    '''
    return a bilinear kernel tensor ( tensor: (in_channels,out_channels,kernel_size,kernel_size) )
    返回双线性插值核,用来初始化反卷积层中卷积核的参数
    '''
    #先生成一层双线性插值核
    factor = (kernel_size + 1) // 2
    if kernel_size % 2 == 1:
        center = factor - 1
    else:
        center = factor - 0.5
    og = np.ogrid[:kernel_size,:kernel_size]
    fliter = (1 - abs(og[0] - center) / factor) * (1 - abs(og[1] - center) / factor)   #此公式似懂非懂,难!!!
    #赋值到每个卷积核的每个通道
    weight = np.zeros((in_channels,out_channels,kernel_size,kernel_size),dtype='float32')
    weight[range(in_channels),range(out_channels),:,:] = fliter
    return torch.from_numpy(weight)
#使用双线性插值核来初始化反卷积层的参数
deconv = nn.ConvTranspose2d(3,3,4,stride = 2,padding = 1)
deconv.weight.data = bilinear_kernel(3,3,4)

你可能感兴趣的:(PyTorch)