manos a la profundidad aprendizaje de las ciencias - convolución red neuronal 1

Aquí Insertar imagen Descripción
Blanco puta plataforma Yu Bo, o para agradecer aproximadamente, jugando la publicidad de onda.
Principalmente notas de estudio, resolución de problemas pueden ser ignorados en este blog, a fin de no perder el tiempo y el esfuerzo

infraestructura de red neuronal de convolución

En él se describe el concepto básico de red neuronal de convolución, y la capa de células es la convolución de la capa principal, e interpretar el significado de las llenado, zancada, los canales de entrada y canales de salida.

operación de correlación cruzada de dos dimensiones

La explicación oficial: una correlación cruzada de dos dimensiones (correlación cruzada) de entrada de operación 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 de núcleo típicamente se refiere como convolución o 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.

Figura 1
comprensión personal Popular que: la matriz de entrada que abarca la convolución realiza kernel puntual multiplicación atención no es la operación de matriz , la figura de arriba es un ejemplo de cálculo proceso 0 0 + 1. 1. 3 +. 2 + 4. 3. 19 =.
función Pytorch puede ser corr2d usado lograr una operación de correlación cruzada de dos dimensiones, que recibe una entrada X y un conjunto de matriz de núcleo K, y da salida a la Y. array

import torch 
import torch.nn as nn

def corr2d(X, K):
	# X代表输入数组,K代表卷积核
	# H/h 行,W/w代表列
    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

La figura de arriba de entrada de configuración de la matriz X, una de dos dimensiones matriz de núcleo K para verificar el funcionamiento de la salida de correlación cruzada

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 de salida ([[19., 25.], [37., 43.]])

Capa de convolución bidimensional

Y convolución bidimensional de la capa de entrada para hacer que la operación de convolución de correlación cruzada, 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 una imagen de un 6 × 8, intermedio 4 como negro (0), siendo el resto blanco (1), se detecta el color deseado del borde. Nuestra etiqueta es una matriz de dos dimensiones de 6 × 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)

Salida
Tensor ([[. 1., 1., de 0. El, de 0. El, de 0. El, de 0. El, 1., 1.],
[1., 1., de 0. El, de 0. El, de 0. El, de 0. El, 1, 1],
[1, 1, 0,5, 0,5, 0,5, 0,5, 1, 1],
[1, 1, 0,5, 0,5, 0,5, 0 ., 1, 1],
[1, 1, 0,5, 0,5, 0,5, 0,5, 1, 1],
[1, 1, 0,5, 0., 0. , de 0. El, 1., 1.]])
Tensor ([[de 0. El, 1., de 0. El, de 0. El, de 0. El, -1., de 0. El],
[de 0. El, 1., de 0. La, 0 ., 0., -1, 0,5],
[0,5, 1, 0,5, 0,5, 0,5, -1, 0,5],
[0,5, 1, 0,5, 0,5, 0,5, -1, 0,5],
[0,5, 1, 0,5, 0,5, 0,5, -1, 0,5],
[0,5, 1, 0,5, 0., 0. , -1, 0,5]])
desea aprender que quieran aprender una capa convolucional 1 × 2, un borde 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])

Llenado y zancada

Ultra dos parámetros introducidos capa de convolución, es decir, de llenado y de zancada, se les puede dar una forma y la forma de la entrada de convolución kernel para cambiar la salida.

relleno

El relleno (relleno) los medios de entrada, tanto en altura y anchura del elemento de relleno (típicamente 0 elemento), la 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
2 altura y anchura de los lados de entrada, respectivamente, de la figura llena con 0-dimensional elemento de cálculo de correlación cruzada

Si la altura original y la anchura son nh entrada y NW, y de alta convolución kernel anchura es kh kW y la línea de llenado total a un nivel superior lados de pH, lleno anchura total pw columnas en ambos lados, la forma de salida:

(NH + ph-KH + 1) x (ciudad natal + Sleep-kw + 1)

Utilizamos red neural convolucional aspecto impar de los núcleos, tales como núcleos de convolución de 3 x 3, 5 × 5, la altura (o anchura) del tamaño del núcleo 2k + 1, por lo que los pasos 1, de alto (o anchura) en ambos lados del tamaño seleccionado para llenar k, entrada y salida puede seguir siendo el mismo tamaño.
relleno Brevemente se llena alrededor de la entrada de elementos de la matriz desarrollan, por ejemplo relleno = 1 entonces la línea para ser llenado arriba y abajo todos los elementos 0

zancada

cálculo de correlación cruzada, el 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.
También el movimiento lateral de cada celda 2, célula 3 de cada movimiento longitudinalmente
Aquí Insertar imagen Descripción
las Figs. 3 y alta en un amplio zancada, respectivamente 3 y 2-dimensional de cálculo de correlación cruzada

En general, cuando es SH, la anchura SW zancada del alto ritmo, la forma de salida:

⌊ (NH + ph-kh + sh) / sh⌋ × ⌊ (nw + pw-kw + sw) / sw⌋

Si el pH = kh-1, pw = kw-1, entonces la salida se reducirá a la forma ⌊ (NH + SH-1) / sh⌋ × ⌊ (nw + sw-1) / sw⌋. Aún más, si la altura de entrada y paso lata anchura son divisibles por la altura y la anchura, la salida será una forma (nh / sh) × (nw / sw).

Cuando pH = pw = p, llamamos para el llenado p; cuando sh = sw = s, llamamos zancada es s.

Hay una fórmula universal (H-F. + 2P) / S hecho +1
H tamaño de la matriz de entrada, F tamaño convolución kernel, matriz P se llena, S representa la etapa de movimiento más un desplazamiento

canales de entrada múltiples y múltiples canales de salida

Antes de las entradas y salidas están matriz de dos dimensiones, pero la dimensión real de los datos es a menudo mayor. 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 y anchura suponiendo una imagen en color es H y w (píxeles), respectivamente, entonces pueden ser representados como una h × 3 × w matrices multidimensionales, se denominará el tamaño de esta dimensión a como canal 3 dimensión (canal).

canal de salida única de múltiples entradas

Convolución de la capa de entrada puede comprender una pluralidad de canales, 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
Supongamos que el número de canales de entrada es ci, convolución kernel forma kh × kw, asignamos cada uno de una forma para cada canal de entrada de kh × array núcleo kw, la salida de dos dimensiones ci un cálculo de correlación cruzada mediante la adición de la canal para obtener una matriz de dos dimensiones como una salida. Nos Ci núcleos de matriz bidimensional en el canal de conexión, es decir, una forma obtenida ci × × kh kw convolución kernel.

de entrada múltiple y múltiples canales de salida

La salida de la capa de convolucional puede comprender también una pluralidad de canales, el número de canales provistos de entrada y salida canales convolución del núcleo de ci y co, altura y anchura, respectivamente, y kw kh, respectivamente. Si se desea obtener una salida que tiene una pluralidad de canales, podemos crear para cada canal de salida se forma como ci × kh × array núcleo kw, la dimensión del mismo conectado al canal de salida, es decir, la forma de la co convolución kernel × ci × kh × kw.

Para los canales de salida de convolución kernel, proporcionamos un entendimiento, un ci × × kh núcleo kw matriz 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 ci × kh × array núcleo kw, una matriz de diferentes núcleos son diferentes de extracción de características.

capa de convolución 1X1

Por último la forma de la semilla de convolución de 1 × 1, por lo general llaman a esta convolución convolución de 1 × 1, dicha capa que comprende un núcleo de convolución de esta capa de convolución convolución es 1 × 1. La Fig. 5 muestra la correlación cruzada se calcula usando el número de canales de entrada 3 y los canales de salida 2 de 1 × 1 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

1 × 1 convolución aprobado sin cambiar el aspecto, ajustando el número de canales. 1 × 1 alta y no reconoce la convolución kernel constituida de elementos de patrón de la dimensión más ancha adyacente, que se calcula principalmente se produce en las dimensiones del 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 de dimensión, 1 × 1 entonces la acción de la capa de convolución equivalentes capa de conexión completo.

La comparación con la capa de conexión de la capa completa de convolución

capa de convolución bidimensional se utiliza a menudo para procesar la imagen, en comparación con la capa de enlace completo anterior, 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. Convolución cantidad parámetro del núcleo sin tener en cuenta el desplazamiento, una forma (ci, co, h, w) es ci × co × h × w, independientemente de la anchura y altura de la imagen de entrada. Si una forma de las capas de entrada y de salida son de convolución (c1, h1, w1) y (c2, h2, w2), si la conexión para utilizar toda la capa de conexión, el número de parámetros es c1 × c2 × h1 × w1 × h2 × W2. convolucional capa puede ser menor que el número de parámetros para hacer frente a la imagen más grande.

implementación de la capa sencilla de convolución

pytorch中nn.Conv2d可以简单实现主要注意下面几个参数
in_channels (pitón: int) - Número de canales en las imag entrada
out_channels (pitón: int) - Número de canales producidos por la convolución
kernel_size (pitón: int o tupla) - Tamaño de la convolución del núcleo
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, Cin, Hin, Win), el valor de retorno es una forma tensor de cuatro dimensiones (N, Cout, Hout, Wout), donde N es el tamaño del lote, C, H, W representa el número de canal, altura, anchura.

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])

pooling

capa de fondo común 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 piscina de 2 × 2 ventana máximo agruparon.
Aquí Insertar imagen Descripción
El agrupamiento de máxima agrupación medio de capa y puesta en común, un simple charla media o máxima punto es la matriz de entrada de la cubierta de la piscina nuclear.

implementación de la capa sencilla puesta en común

Utilizamos Pytorch en la capa 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 sobre
un paso de -. La un paso de de la ventana el valor predeterminado es kernel_size
acolchado - Implícito ZERO relleno que se añaden en ambos lados
parámetros de la función de avance como una forma tensor de cuatro dimensiones (N, C, Hin, Win), el valor de retorno es una forma tensor de cuatro dimensiones (N, C, Hout, Wout ), donde N es el tamaño del lote, C, H, W representan el número de canal, altura, anchura.

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)

Salida
Tensor ([[[[de 0. El, 1., 2., 3.],
[4., 5. El, 6. El, 7. La],
[8. El, 9. La, 10. La, 11. El],
[ 12., 13., 14., 15.]],

     [[16., 17., 18., 19.],
      [20., 21., 22., 23.],
      [24., 25., 26., 27.],
      [28., 29., 30., 31.]]]])

tensor ([[[[5., 6., 7., 7.],
[13., 14., 15., 15.]],

     [[21., 22., 23., 23.],
      [29., 30., 31., 31.]]]])

La capa de células promedio usando nn.AvgPool2d, utilizando el mismo método nn.MaxPool2d

Publicado 12 artículos originales · ganado elogios 0 · Vistas 268

Supongo que te gusta

Origin blog.csdn.net/inventertom/article/details/104632775
Recomendado
Clasificación