Clasificación de imágenes aturdido (1) - construcción de red de clasificación de nivel de entrada de antorcha

Construcción de red de clasificación de nivel de entrada de clasificación de imagen aturdida


Este es mi primer blog de explicación de aprendizaje profundo. De hecho, recomiendo que los principiantes comiencen a aprender sobre el aprendizaje profundo de Keras. Keras es realmente muy, muy amigable para los principiantes, y si su modelo no es "el más avanzado ", o no tan "único" , Keras puede satisfacer plenamente sus necesidades y puede ahorrarle mucho tiempo.

Por supuesto, además de pyTorch, también explicaré sistemáticamente cómo construir varios modelos de red en Keras. Espero que podamos aprender y progresar juntos. Comparación del marco de aprendizaje profundo Keras y PyTorch

Prefacio de aprendizaje

Este es mi video explicativo de Bilibili, bienvenidos a todos con un clic y tres enlaces ~~~

Página de inicio de Bilibili: https://space.bilibili.com/481802918

Introducción a la construcción de redes

Esta es una arquitectura de red muy básica para el reconocimiento de fuentes de escritura a mano. En esta red, es solo una simple pila de capas convolucionales y agrupadas, y finalmente la capa completamente conectada se usa para entrenar al clasificador. El propósito de aprender esta red es familiarizarnos con la base y el proceso de construcción de una red en PyTorch, y sentar las bases para que aprendamos redes neuronales más avanzadas en el futuro.

Uno: estructura de red

Inserte la descripción de la imagen aquí
En el diagrama de estructura de la red, podemos ver claramente que el proceso general de esta red de entrada es:
    卷积层  ->   池化层   ->    卷积层   ->   池化层    ->   全连接层-> 全连接层-> 全连接层
(32x32x1) -> (30x30x6) -> (15x15x6) -> (13x13x16) -> (6x6x16) -> (120,) -> (84,) -> (10,)

Dos: la parte del código

import torch
import torch.nn as nn
import torch.nn.functional as F


class Net(nn.Module):

    def __init__(self):
        super(Net, self).__init__()
        
        # nn.Conv2d(输入通道数1, 输出通道数6, 卷积核尺寸3x3)
        self.conv1 = nn.Conv2d(1, 6, 3)
        self.conv2 = nn.Conv2d(6, 16, 3)
        
        # 全连接层
        # (16 * 6 * 6)为(通道数 x 特征层的高 x 特征层的宽)
        self.fc1 = nn.Linear(16 * 6 * 6, 120) # 定义fc1(fullconnect)全连接函数1为线性函数:y = Wx + b,并将16*6*6个节点连接到120个节点上。
        self.fc2 = nn.Linear(120, 84)#定义fc2(fullconnect)全连接函数2为线性函数:y = Wx + b,并将120个节点连接到84个节点上。
        self.fc3 = nn.Linear(84, 10)#定义fc3(fullconnect)全连接函数3为线性函数:y = Wx + b,并将84个节点连接到10个节点上。
        # 10为分类的个数(0~9一共10个数字)


	#定义该神经网络的向前传播函数,该函数必须定义,一旦定义成功,向后传播函数也会自动生成(autograd)
    def forward(self, x):
        # 最大池化2x2
        x = F.max_pool2d(F.relu(self.conv1(x)), (2, 2))
        # 参数可以写成(2, 2)也可以写成 2
        x = F.max_pool2d(F.relu(self.conv2(x)), 2)
        x = x.view(-1, self.num_flat_features(x))#view函数将张量x变形成一维的向量形式,总特征数并不改变,为接下来的全连接作准备。
        x = F.relu(self.fc1(x))
        x = F.relu(self.fc2(x))
        x = self.fc3(x)
        return x
        
	
    def num_flat_features(self, x):
    #使用num_flat_features函数计算张量x的总特征量(把每个数字都看成是一个特征,即特征总量),比如x是4*2*2的张量,那么它的特征总量就是16。
        size = x.size()[1:]  # all dimensions except the batch dimension
        num_features = 1
        for s in size:
            num_features *= s
        return num_features


net = Net()
print(net)





#输出为:
Net(
  (conv1): Conv2d(1, 6, kernel_size=(3, 3), stride=(1, 1))
  (conv2): Conv2d(6, 16, kernel_size=(3, 3), stride=(1, 1))
  (fc1): Linear(in_features=576, out_features=120, bias=True)
  (fc2): Linear(in_features=120, out_features=84, bias=True)
  (fc3): Linear(in_features=84, out_features=10, bias=True)
)

En este punto, nuestra red neuronal introductoria está completa. En la siguiente sección, le enseñaré cómo usar la red introductoria para entrenar un modelo de clasificación en su propio conjunto de datos.

Clasificación de imágenes tontamente (2) -entrenamiento práctico del modelo de clasificación de imágenes de nivel de entrada

Supongo que te gusta

Origin blog.csdn.net/fuhao7i/article/details/109649252
Recomendado
Clasificación