Principio de capa convolucional bidimensional

Introducir principalmente el principio de funcionamiento de la capa convolucional bidimensional

La red neuronal convolucional es una red neuronal que contiene capas convolucionales

1. Operación de correlación cruzada bidimensional

En la capa convolucional bidimensional, una matriz de entrada bidimensional y una matriz de núcleo bidimensional generan una matriz bidimensional a través de una operación de correlación cruzada.
Por ejemplo:
matriz de entrada : matriz bidimensional de 3x3 matriz de
núcleo: matriz bidimensional de 2x2 (esta matriz también se denomina núcleo de convolución o filtro en el cálculo de convolución)
ejemplo
En la operación de correlación cruzada bidimensional, la ventana de convolución es de la matriz de entrada Comenzando desde la parte superior izquierda, deslizando la matriz de entrada en orden de izquierda a derecha y de arriba a abajo . Cuando la ventana de convolución se desliza a una determinada posición, la submatriz de entrada y la matriz del núcleo en la ventana se multiplican y suman por elementos para obtener el elemento en la posición correspondiente en la matriz de salida.

El proceso anterior se implementa en la función corr2d, que acepta la matriz de entrada X y la matriz de kernel K, y genera la matriz Y.

import torch 
from torch import nn

def corr2d(X, K):  # 本函数已保存在d2lzh_pytorch包中方便以后使用
    h, w = K.shape
    Y = torch.zeros((X.shape[0] - h + 1, X.shape[1] - w + 1))
    for i in range(Y.shape[0]):
        for j in range(Y.shape[1]):
            Y[i, j] = (X[i: i + h, j: j + w] * K).sum()
    return Y

verificación:

X = torch.tensor([[0, 1, 2], [3, 4, 5], [6, 7, 8]])
K = torch.tensor([[0, 1], [2, 3]])
corr2d(X, K)

Salida

tensor([[19., 25.],
        [37., 43.]])

2. Capa convolucional bidimensional

La capa de convolución bidimensional realiza operaciones de correlación cruzada en la entrada y el núcleo de convolución, y agrega una desviación escalar para obtener la salida. Los parámetros del modelo de la capa de convolución incluyen el núcleo de convolución y la desviación escalar. Cuando se entrena el modelo, normalmente primero inicializamos aleatoriamente el kernel de convolución y luego iteramos sobre el kernel de convolución y el sesgo.

Se implementa una capa convolucional bidimensional personalizada basada en la función corr2d. En el constructor __init__, declaramos los dos parámetros del modelo ponderación y sesgo. La función de cálculo hacia adelante hacia adelante es llamar directamente a la función corr2d y agregar la desviación.

class Conv2D(nn.Module):
    def __init__(self,kernel_size):
        super(Conv2D, self).__init__()
        self.weight = nn.Parameter(torch.randn(kernel_size))
        self.bias = nn.Parameter(torch.randn(1))

    def forward(self,x):
        return corr2d(x,self.weight)+self.bias

Una capa convolucional con una forma de ventana convolucional de p × q se convierte en una capa convolucional p × q. De manera similar, el núcleo de convolución p × q o el núcleo de convolución p × q indica que la altura y el ancho del núcleo de convolución son pyq, respectivamente.

3. Operación de correlación cruzada y operación de convolución

De hecho, la operación de convolución es similar a la operación de correlación cruzada. Para obtener el resultado de la operación de convolución, solo necesitamos voltear la matriz del núcleo de izquierda a derecha y hacia arriba y hacia abajo, y luego realizar operaciones de correlación cruzada con la matriz de entrada. Se puede ver que aunque la operación de convolución y la operación de correlación cruzada son similares, si usan la misma matriz de núcleo, la salida suele ser diferente para la misma entrada.

Entonces, es posible que se pregunte por qué la capa de convolución puede utilizar operaciones de correlación cruzada en lugar de operaciones de convolución. De hecho, la matriz del kernel se aprende en el aprendizaje profundo: ya sea que la capa convolucional use operaciones de correlación cruzada o convolución, no afecta la salida de la predicción del modelo.
Para ser coherentes con la mayoría de la literatura sobre aprendizaje profundo, a menos que se especifique lo contrario, las operaciones de convolución mencionadas en este libro se refieren a operaciones de correlación cruzada.

4. Mapa de características y campo receptivo

La salida de matriz bidimensional por la capa convolucional bidimensional puede considerarse como una representación de un cierto nivel de la entrada en las dimensiones espaciales (ancho y alto), también llamado mapa de características. Todas las áreas de entrada posibles (que pueden ser más grandes que el tamaño real de la entrada) que afectan el cálculo directo del elemento x se denominan campos receptivos de x. Tome la figura anterior como ejemplo, los cuatro elementos en la parte sombreada de la entrada son los campos receptivos de los elementos sombreados en la salida. Denotamos la salida de la forma 2 × 2 en la figura 5.1 como Y, y consideramos una red neuronal convolucional más profunda: correlacione Y con otra matriz de kernel de forma 2 × 2 y genere un solo elemento z. Luego, el campo receptivo de z en Y incluye los cuatro elementos de Y, y el campo receptivo de entrada incluye los 9 elementos. Se puede ver que podemos ampliar el campo receptivo de un solo elemento en el mapa de características a través de una red neuronal convolucional más profunda, para capturar las características de mayor tamaño en la entrada.

Resumen:
El cálculo básico de una capa convolucional bidimensional es una operación de correlación cruzada bidimensional. En la situación más simple, realiza una operación de correlación cruzada en los datos de entrada bidimensionales y el núcleo de convolución y luego agrega un sesgo.
El kernel de convolución se puede aprender a través de datos

Referencia: "Aprendizaje profundo práctico" https://github.com/ShusenTang/Dive-into-DL-PyTorch

Supongo que te gusta

Origin blog.csdn.net/qq_38469784/article/details/108977065
Recomendado
Clasificación