DataWhale campo de equipo de aprendizaje neuronal convolución infraestructura de red golpe task05-1

infraestructura de red neuronal de convolución

capa de convolución bidimensional de
esta sección es la capa de convolución más común de dos dimensiones, que se utiliza comúnmente en el procesamiento de los datos de imagen.

Una correlación cruzada de dos dimensiones calcular
una entrada de operación de dos dimensiones correlación cruzada (correlación cruzada) es una matriz de entrada de dos dimensiones y una matriz de núcleo de dos dimensiones (Kernel), la salida es una matriz de dos dimensiones, en el que la matriz se denomina generalmente como núcleo o convolución núcleo filtro (filtro). Convolución tamaño kernel generalmente más pequeñas que la matriz de entrada, los portaobjetos convolución del núcleo en la matriz de entrada, en cada lugar, el núcleo de convolución se multiplica por la submatriz elemento de entrada en la ubicación y se suma para dar la posición correspondiente en la matriz de salida elementos. La Figura 1 muestra un ejemplo de la operación de correlación mutua, una porción sombreada respectivamente, la primera entrada de la región de cálculo, y una matriz correspondiente de salida de núcleo.
Aquí Insertar imagen Descripción
La figura operación de correlación mutua de una de dos dimensiones
A continuación logramos función de cálculo de corr2d de correlación cruzada de dos dimensiones que tiene array matriz X de entrada y K nuclear, y da salida a la Y. array

import torch 
import torch.nn as nn

def corr2d(X, K):
    H, W = X.shape
    h, w = K.shape
    Y = torch.zeros(H - h + 1, W - 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

X estructura de matriz de entrada de la figura anterior, matriz de núcleo K para verificar la salida de la operación de correlación cruzada de dos dimensiones.

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

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

Capa de convolución bidimensional
convolución dimensional y la convolución de la capa de entrada para hacer la operación de correlación mutua, y la adición de un escalar compensada para obtener una salida. Capa comprende una convolución parámetros del modelo y escalar compensados semilla de convolució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

la mirada de Let en un ejemplo, se construye un 6 imagen 8, intermedio 4 como un negro (0), siendo el resto blanco (1), se detecta el color deseado del borde. Nuestra etiqueta 6 es una matriz de dos dimensiones 7, la segunda columna es 1 (desde el borde de 1 a 0), la sexta columna es -1 (el borde de 0 a 1).

X = torch.ones(6, 8)
Y = torch.zeros(6, 7)
X[:, 2: 6] = 0
Y[:, 1] = 1
Y[:, 5] = -1
print(X)
print(Y)

Aquí Insertar imagen Descripción
Queremos aprender un laminado 1 * 2, una ventaja que se detecta mediante la convolución de la capa de color.

conv2d = Conv2D(kernel_size=(1, 2))
step = 30
lr = 0.01
for i in range(step):
    Y_hat = conv2d(X)
    l = ((Y_hat - Y) ** 2).sum()
    l.backward()
    # 梯度下降
    conv2d.weight.data -= lr * conv2d.weight.grad
    conv2d.bias.data -= lr * conv2d.bias.grad
    
    # 梯度清零
    conv2d.weight.grad.zero_()
    conv2d.bias.grad.zero_()
    if (i + 1) % 5 == 0:
        print('Step %d, loss %.3f' % (i + 1, l.item()))
        
print(conv2d.weight.data)
print(conv2d.bias.data)

Paso 5, la pérdida de 4,569
Paso 10, la pérdida de 0,949
Paso 15, la pérdida de 0,228
Paso 20, la pérdida de 0,060
Paso 25, la pérdida de 0,016
Paso 30, la pérdida de 0.004
tensor ([[1,0161, -1,0177]])
tensor ([0,0009])

El cálculo de la convolución de correlación cruzada
capa convolucional se nombra después de convolución, la operación de convolución pero no se utiliza en la capa de convolución pero operación de correlación mutua. Vamos a matriz nuclear boca abajo, izquierda y derecha del tirón, y luego hacer el cálculo de la correlación cruzada y la matriz de entrada, este proceso es la operación de convolución. Puesto que la capa núcleo es una convolución de la matriz puede ser aprendido, y el cálculo de la correlación mediante convolución hay diferencia esencial de modo que el uso mutuo.

La figura campo receptivo y en el que
una matriz de dos dimensiones de convolución bidimensional de la capa de salida puede considerarse como la caracterización de una entrada en una dimensión espacial (anchura y altura), también conocido como mapa de características (mapa de características). efecto elemento
antes de llamadas de campo x receptivas de x (campo receptivo) para todos los posibles región de entrada (que puede ser mayor que el tamaño real de la entrada) se calcula.

1 como un ejemplo, cuatro elementos de entrada están sombreadas parte sombreada elemento de salida campo receptivo. Damos forma en la Fig. 2 2 de salida denotada Y, Y-forma y otro
2
operación de correlación mutua marca, de salida de un elemento de la matriz de un solo núcleo z 2. Por lo tanto, z en el campo Y-receptivo incluye los cuatro elemento Y, en el campo receptivo de entrada que comprende los nueve elementos. Podemos ver a través de la red neuronal más profundo convolucional caracterizado porque los elementos individuales del campo receptivo figura se vuelve más amplio, en el que la entrada de la captura de un tamaño más grande.

Y llenando los pasos
introducimos dos parámetros capa súper convolución, es decir, el llenado y el paso, se le puede dar una forma y la forma de la entrada de convolución kernel para cambiar la salida.

Llenado de
relleno (relleno) los medios de entrada, tanto en altura y anchura del elemento de relleno (típicamente 0 elemento), Fig. 2 en el que se añadieron a ambos lados del valor del elemento 0 en la altura y la anchura de la entrada original.
Aquí Insertar imagen Descripción
La figura 2 se llenan en el elemento 0 en ambos lados de la altura y anchura de la entrada de dos dimensiones cálculo de la correlación cruzada
si la altura original y la anchura se introducen n- H y N- W , altura y anchura de los kernel de convolución son K H y K W , en alta de llenado total ambos p H filas, un total de ambos lados en un p ancha llenó w columna, la forma de la salida es:
Aquí Insertar imagen Descripción
utilizamos aspecto impar de la red neuronal de convolución en el núcleo, tales como 3 3,5 convolución kernel 5

Pace
en una operación de correlación mutua, un núcleo de convolución en las diapositivas matriz de entrada, cada diapositiva el número de filas y columnas que es el paso (paso). Anteriormente, hemos zancada estamos acostumbrados 1, la figura 3 muestra un alto ritmo de la, la operación de correlación cruzada 2 bidimensional 3 en una amplia zancada en.
Aquí Insertar imagen Descripción
. 3 la altura y la figura anchura respectivamente paso 3 y la correlación cruzada de 2 dimensiones calculando
general, cuando el paso es una alta s H , s es la anchura de los pasos W , la forma de la salida es:
Aquí Insertar imagen Descripción
Si P H = K H -1, P W = K W -1, entonces la salida se reduce para formar
Aquí Insertar imagen Descripción
aún más, si la altura de entrada y paso lata anchura son divisibles por la altura y la anchura, la forma de la salida será (n- H / S H ) * (n- W / S W ).
Cuando P H = P W cuando = p, que llamamos llenos p; cuando S H = S W cuando = s, llamamos zancada es s.

canales de entrada múltiples y múltiples canales de salida
de entrada y salida antes de que se matriz de dos dimensiones, pero la dimensión real de los datos es a menudo superior. Por ejemplo, una imagen en color en las dimensiones exteriores de altura y anchura, así como dos (rojo, verde, azul) tres canales de color RGB. altura de la imagen de color Supongamos y la anchura es W y H (píxeles), respectivamente, entonces se puede representar como un 3 h matriz multidimensional w, el tamaño de esta dimensión se denomina canal 3 dimensión (canal).

canales de entrada múltiple
capa de convolución puede comprender una pluralidad de canales de entrada, la Fig. 4 muestra un ejemplo que tiene un cálculo de correlación cruzada de dos canales de entrada dimensional.
Aquí Insertar imagen Descripción
cálculo de correlación cruzada 4 haber dos canales de entrada de la figura
canales se supone que los datos de entrada C I , la forma de una convolución kernel k H * k W , asignamos cada uno de una forma para cada canal de entrada k H * k W núcleo array, la C I un cálculo de correlación cruzada por canal de salida de dos dimensiones se añade para obtener una matriz de dos dimensiones como una salida. Nos C I matriz dimensional núcleos en el canal de conexión, es decir, una forma obtenida C I * K H * K W kernel de convolución.

MIMO canal
capa de convolución puede comprender también una pluralidad de canales de salida, siempre que los canales de entrada de convolución kernel y canales de salida son C I y C O , la altura y la anchura son K H y K W . Si se desea obtener una salida que tiene una pluralidad de canales, podemos crear para cada canal de salida tienen forma de C I * K H * K W matriz de núcleo, están conectados a las dimensiones del canal de salida, es decir, la forma del núcleo de convolución C O C * I * K H * K W .

Para los canales de salida de convolución kernel, proporcionamos un entendimiento, un C I * K H * K W array núcleo puede extraer algunas de las características locales, la entrada puede tener una gran cantidad de características, tenemos que tener una pluralidad de tales C I * K H * K W matriz de núcleo, una serie de diferentes núcleos son diferentes de extracción de características.

1x1 capa convolución
examinó también la forma de un núcleo de convolución 1 * 1, que se suele llamar una operación tan convolución es 1 * 1 convolución, la convolución, dicha capa que contiene tal una convolución kernel de convolución capa es 1 * 1. La Figura 5 muestra el uso de tres canales de entrada, canales de salida para el cálculo de correlación cruzada * 1 1 2 convolución kernel.
Aquí Insertar imagen Descripción
La figura 5 1x1 Núcleo de circunvolución correlación cruzada de cálculo. La entrada y salida tienen la misma altura y anchura

convolución 1x1 recibe la aprobación sin cambiar el aspecto, ajustando el número de canales. modo de convolución kernel 1x1 no reconoce la altura y anchura dimensiones de los elementos adyacentes que constituyen su dimensión principal se calcula sobre se produce el canal. Asumimos la dimensión de canal como una dimensión característica, la altura y la anchura del elemento como las muestras de datos dimensión, entonces el efecto de la convolución capa de 1x1 completo es equivalente a la capa de conexión.

capas de convolución comparativos capas totalmente conectadas de
dos dimensiones capa de imagen de procesamiento de convolución se usa a menudo, en comparación con la capa anterior está totalmente conectado, tiene dos ventajas principales:

Primera capa completamente conectado para aplanar un vector de imagen en la imagen de entrada adyacente en el elemento ya no es posible debido a la operación de aplanamiento adyacente, difícil de capturar red de información local. diseño de la capa de convolución, naturalmente, tienen la capacidad de extraer información local.

En segundo lugar, la cantidad de convolución de la capa de parámetros menos. Sin tener en cuenta el desplazamiento, la forma de un (C I , C O parámetro cantidad kernel de convolución, h, w) es C I XC O xhxw, independientemente de la anchura y altura de la imagen de entrada. Si una forma de la capa de entrada y de salida es una convolución (c, respectivamente . 1 , H . 1 , W . 1 ), y (c 2 , H 2 , W 2 ), si la conexión para utilizar toda la capa de conexión, el número de parámetros es C . 1 XH . 1 XW . 1 XC 2 XH 2 XW 2 . convolucional capa puede ser menor que el número de parámetros para hacer frente a la imagen más grande.

Simple capa de convolución se dan cuenta
que utilizamos nn.Conv2d clase Pytorch ser implementado en dos dimensiones capa de convolución, el foco principal en los siguientes parámetros del constructor:

  • in_channels (Python: int) - Número de canales en la imag entrada
  • out_channels (pitón: int) - Número de canales producidos por la convolución
  • kernel_size (Python: int o tupla) - Tamaño del núcleo de convolución
  • zancada (Python: int o tupla, opcional) - Paso grande de la convolución. Por defecto: 1
  • acolchado (pitón: int o tupla, opcional) - Zero-relleno añadido a ambos lados de la entrada. Por defecto: 0
  • sesgo (bool, opcional) - Si es True, agrega un sesgo que puede aprenderse a la salida. Por defecto: Verdadero

Parámetro función de avance como una forma tensor de cuatro dimensiones (N, C en , H en , W es en ), el valor de retorno es una forma tensor de cuatro dimensiones (N, C OUT , H OUT , W es OUT ), en el que N es el tamaño del lote, C, H, W representan el número de canal, altura, anchura.
código explicó

X = torch.rand(4, 2, 3, 5)
print(X.shape)

conv2d = nn.Conv2d(in_channels=2, out_channels=3, kernel_size=(3, 5), stride=1, padding=(1, 2))
Y = conv2d(X)
print('Y.shape: ', Y.shape)
print('weight.shape: ', conv2d.weight.shape)
print('bias.shape: ', conv2d.bias.shape)

torch.Size ([4, 2, 3, 5])
Y.shape: torch.Size ([4, 3, 3, 5])
weight.shape: torch.Size ([3, 2, 3, 5])
bias.shape: torch.Size ([3])

El agrupamiento de
la capa de células de dos dimensiones
capa de células se utiliza principalmente para aliviar capa de sobre-sensible de la posición de convolución. Con capa convolucional, la capa de depósito de los datos de entrada cada vez que una ventana de forma fija (también conocida como ventana de puesta en común) para calcular el elemento de salida, la capa agrupada calcular directamente el valor máximo o valor medio de los elementos de ventana de la celda, la cual operación también se llama la piscina grande o la media agrupada. La figura 6 muestra la forma de la ventana de una piscina máximo de 2 x 2 de la piscina.
Aquí Insertar imagen Descripción
La figura 6 forma agrupada de la ventana de una piscina máximo de 2 x 2

La piscina promedio de las obras bidimensionales con la mayor reserva de similares bidimensional, pero el mayor operador reemplazar el operador promedio. El agrupamiento de forma de la ventana se conoce como una capa de células PXQ PXQ capa de células, en el que la operación llamada PXQ pooling agruparon.

capa de células y también puede ajustar el paso de movimiento ventana altamente llenado y de entrada ancha para cambiar los lados de salida de la forma. capa de fondo común se llena con el mecanismo y convolución ritmo capa de trabajo y llenando el mismo paso.

Cuando se procesa una de datos de entrada multicanal, cada capa de células en cada canal de entrada de la piscina, pero no como el resultado de cada canal por canal sumando capa de la imagen de convolución. Esto significa que la piscina es igual al número de canal de salida de las capas y el número de canales de entrada.

Sencillo lograr la capa de la puesta en común
que utilizamos en la capa Pytorch nn.MaxPool2d máximo la puesta en común, siguiendo los parámetros del constructor:

  • kernel_size - el tamaño de la ventana para tomar un máximo de más de
  • paso - el paso de la ventana. El valor por defecto es kernel_size
  • relleno - relleno de ceros implícito que se añaden en ambos lados
    de parámetros función de avance como una forma tensor de cuatro dimensiones (N, C, H en , W es en ), el valor de retorno es una forma tensor de cuatro dimensiones (N, C, H OUT , W es OUT ), donde N es el tamaño del lote, C, H, W representan el número de canal, altura, anchura.
    código explicó
X = torch.arange(32, dtype=torch.float32).view(1, 2, 4, 4)
pool2d = nn.MaxPool2d(kernel_size=3, padding=1, stride=(2, 1))
Y = pool2d(X)
print(X)
print(Y)

Aquí Insertar imagen Descripción
La capa de células promedio usando nn.AvgPool2d, utilizando el mismo método nn.MaxPool2d.

Publicado 31 artículos originales · ganado elogios 0 · Vistas 801

Supongo que te gusta

Origin blog.csdn.net/qq_44750620/article/details/104396602
Recomendado
Clasificación