pytorch usa convolución para representar la agrupación promedio

Sabemos que la función de la agrupación promedio es deslizar la ventana de agrupación de tamaño kernel_size en el mapa de características. Los valores del mapa de características cubiertos por la ventana de agrupación se suman y promedian como el valor del área de cobertura. Si usamos la operación de convolución para representar la agrupación promedio, el peso de la convolución se puede expresar como (suponiendo datos bidimensionales, kernel_size = 3): Nota:
Insertar descripción de la imagen aquí
en este momento, el peso del núcleo de convolución ya no es un parámetro entrenable .

Código:

# 定义卷积核的权重参数
def define_Conv_to_Avg2d(in_channel,out_channel,kernel_size):
    if isinstance (kernel_size,int):
        weight=torch.ones((in_channel,out_channel,kernel_size,kernel_size))
        xs=kernel_size*kernel_size
        weight=weight/xs
        
    elif isinstance (kernel_size,tuple) and len(kernel_size)==2:
        weight=torch.ones((in_channel,out_channel,kernel_size[0],kernel_size[1]))
        xs=kernel_size[0]*kernel_size[1]
        weight=weight/xs
        
    else:
        print('kernel_size size error!')
    
    return weight
Pi = nn.Conv3d(in_channel,out_channel,kernel_size=3,stride=2, padding=1, bias=False)

# 因为池化不改变通道大小,所以这里in_channel=out_channel
Pi.weight=torch.nn.Parameter(define_Conv_to_Avg2d(in_channel,out_channel,kernel_size=3),requires_grad=False)

Supongo que te gusta

Origin blog.csdn.net/qq_44846512/article/details/113655687
Recomendado
Clasificación