aprender mejor de los demás,
ser el mejor
—— "WeikaZhixiang"
La extensión de este artículo es de 17309 palabras y se espera que se lea durante 5 minutos.
prefacio
El artículo anterior " Introducción a pyTorch (1) - Capacitación de reconocimiento de datos escritos a mano de Minist Red totalmente conectada " creó una capa completamente conectada y archivos de capacitación, e hizo la capacitación de Minist más simple, y el resultado de capacitación final alcanzó el 97%. Api más comúnmente utilizadas y capas convolucionales de la capa de red pyTorch
# | Funciones comunes de la capa de red |
---|---|
nn.Lineal | combinación lineal de señales |
nn.Conv2d | Convolución 2D de múltiples señales 2D |
nn.MaxPool2d | Agrupación máxima para señales 2D |
nn.ReLU | La función de activación más utilizada |
nn.CrossEntropyLoss | Función de pérdida, nn.LogSoftmax() combinada con nn.NLLLoss() para cálculo de entropía cruzada |
optim.SGD | optimizador, descenso de gradiente estocástico |
optim.zero_grad | Borrar el gradiente de parámetros administrados (el gradiente de tensor no se borra automáticamente, sino que se acumula) |
paso.optimo | Actualizar el parámetro de peso una vez |
nn.Secuencial | Se utiliza para envolver una capa de red en orden |
Las anteriores son las funciones más utilizadas, y nuestro entrenamiento Minist es suficiente para completar el entrenamiento con estas, y nos centraremos en las siguientes funciones que requieren parámetros de entrada:
nn. Combinación lineal lineal (parámetro) de señales
-
in_features: el número de nodos de entrada
-
out_features: el número de nodos de salida
-
sesgo: si se requiere sesgo
nn.Conv2d(parámetro) realiza una convolución bidimensional en múltiples señales bidimensionales
-
in_channels: número de canales de entrada
-
out_channels: el número de canales de salida, equivalente al número de núcleos de convolución
-
kernel_size: tamaño del kernel de convolución
-
zancada: tamaño del paso
-
relleno: el número de relleno
-
dilatación: tamaño de la convolución del agujero
-
grupos: configuración de convolución de grupo
-
sesgo: sesgo
nn.MaxPool2d(parámetro) Agrupación máxima para señales bidimensionales
-
kernel_size: tamaño del kernel de agrupación
-
zancada: tamaño del paso
-
relleno: el número de relleno
-
dilatación: tamaño de intervalo de kernel de agrupación
-
ceil_mode: el tamaño se redondea hacia arriba
-
return_indices: registrar índices de píxeles agrupados
Optimizador optim.SGD (parámetros), método de descenso de gradiente estocástico
-
params: grupo de parámetros a gestionar
-
lr: tasa de aprendizaje inicial
-
monentum: Coeficiente de momento, β
-
weight_decay: coeficiente de regularización L2
-
nesterov: Ya sea para usar NAG
nn.Sequential(parámetros) envuelve un conjunto de capas de red secuencialmente
-
Secuencia: las capas de la red se construyen en estricto orden
-
Reenvío incorporado (): en el reenvío incorporado, la operación de propagación hacia adelante se realiza secuencialmente a través del bucle for
Micro tarjeta Zhixiang
Red de capa convolucional
En la imagen de arriba, cambiamos el ministmodel.py en el artículo anterior a train.py, porque todo es un archivo de entrenamiento, por lo que la identificación es más clara, y luego creamos un nuevo archivo ModelConv2d.py.
Establezca la estructura de red de Conv2dNet. Como se puede ver en la figura anterior, hemos creado tres capas. El orden de cada capa se procesa primero con un kernel de convolución 3X3, luego se agrupa y luego se activa. Después de tres capas de procesamiento, el full La conexión se reduce de la entrada de 180 a los 10 finales. Aquí, la capa completamente conectada se usa 5 veces, lo que puede reducir la cantidad de veces aquí.
ModelConv2dNet.py
import torch
import torch.nn as nn
import torch.nn.functional as F
class Conv2dNet(nn.Module):
def __init__(self):
super(Conv2dNet, self).__init__()
##源图像为1 * 28 * 28
##从一层channel转为输出5层, 卷积和是3,所以输出的宽和高就是28-3+1 = 26
##输出的图像就是 5 * 26 * 26, 然后做pooling下采样2, 变为 5 * 13 * 13
self.conv1 = nn.Sequential(
nn.Conv2d(1, 5, kernel_size=3),
nn.MaxPool2d(2),
nn.ReLU()
)
##从上层channel的5转为输出10层, 卷积和是3,所以输出的宽和高就是13-3+1 = 11
##输出的图像就是 10 * 11 * 11, 然后做pooling下采样2, 变为 10 * 5 * 5
self.conv2 = nn.Sequential(
nn.Conv2d(5, 10, kernel_size=3),
nn.MaxPool2d(2),
nn.ReLU()
)
##从上层channel的10转为输出20层, 卷积和是3,所以输出的宽和高就是5-3+1 = 3
##本层不再做池化了,所以输出的图像就是 20 * 3 * 3,
self.conv3 = nn.Sequential(
nn.Conv2d(10, 20, kernel_size=3),
nn.ReLU()
)
##经过上面的图像20 * 3 * 3 = 180,进行全连接,我们多做几层将输出层降到10
self.fc = nn.Sequential(
nn.Linear(180, 128),
nn.ReLU(),
nn.Linear(128, 64),
nn.ReLU(),
nn.Linear(64, 32),
nn.ReLU(),
nn.Linear(32, 16),
nn.ReLU(),
nn.Linear(16, 10)
)
##定义损失函数
self.criterion = torch.nn.CrossEntropyLoss()
def forward(self, x):
in_size = x.size(0)
x = self.conv1(x)
x = self.conv2(x)
x = self.conv3(x)
x = x.view(in_size, -1)
x = self.fc(x)
return x
Micro tarjeta Zhixiang
Modificación de archivos de entrenamiento
En el archivo train.py, importe el ModelConv2d recién creado y luego cambie la variable train_name a Conv2dNet
Luego agregue un juicio a la función de cambio. Si es Conv2dNet, regrese directamente a Conv2dNet (), y los otros códigos no necesitan moverse en absoluto. El siguiente paso es ejecutar el entrenamiento para ver el efecto.
En la figura anterior, podemos ver que la tasa de predicción de nuestro resultado de entrenamiento es del 98 %.
encima
Maravillosa revisión del pasado.