Redes neuronales convolutivas tamaño del lote

Pregunta 1.

Digamos que la imagen tiene forma (batchsize=100, altura=28, ancho=28,canal=1)

y si ponemos esta imagen en el modelo CNN debajo,

class CNN(torch.nn.Module):
    
        def __init__(self):
            super().__init__()
           
            # ImgIn shape=(100, 28, 28, 1)
            #   Image shape after Conv     -> (100, 28, 28, 32)
            #    Image shape after Pool     -> (100, 14, 14, 32)
            self.layer1 = torch.nn.Sequential(
                torch.nn.Conv2d(1, 32, kernel_size=3, stride=1, padding=1),
                torch.nn.ReLU(),
                torch.nn.MaxPool2d(kernel_size=2, stride=2))
    
            # second layer
            # ImgIn shape=(100, 14, 14, 32)
            #   Image shape after Conv      ->(100, 14, 14, 64)
            #   Image shape after Pool      ->(100, 7, 7, 64)
            self.layer2 = torch.nn.Sequential(
                torch.nn.Conv2d(32, 64, kernel_size=3, stride=1, padding=1),
                torch.nn.ReLU(),
                torch.nn.MaxPool2d(kernel_size=2, stride=2))
    
            # THESE PART CONFUSE!!!
            self.fc = torch.nn.Linear(7 * 7 * 64, 10, bias=True)
    
           
            torch.nn.init.xavier_uniform_(self.fc.weight)
    
        def forward(self, x):
            out = self.layer1(x)
            out = self.layer2(out)
            out = out.view(out.size(0), -1)  
            out = self.fc(out)
            return out

Lo que sucede con el tamaño de la imagen después de auto.fc.

¿Es tamaño(batch_size=100,10)?

Cláusula 2.

Además, estoy confundido con el mini-batch. Si hay 5 mini lote, y la pérdida es [5,-5,4,-4,0], entonces la pérdida promedio será cero, entonces la red neuronal dejará de entrenar incluso si hay pérdida en cada mini-barco?

Cuestion 3. ¿Puede expresarse la red neuronal mi compleja multiplicación de matriz?

Pregunta hecha hace 3 años, 4 meses, 29 días - Por rubyrover


3 Respuestas:

  • Q1

    self.fc es sólo una sola capa lineal. La línea clave aquí es out.view(out.size(0), -1) que no es más que aplanado (reforma en NumPy), donde out.size(0) es su tamaño de lote y -1 es todos los elementos del tensor (ver antorcha.).

    En otras palabras, esta línea transforma su 4d (Batch, C, H, W) capa conv en 2d (Batch, 7 * 7 * 64). Finalmente, tu fc Salidas de capa (Batch, 10)

    Q2

    Esta pregunta es confusa. ¿Cómo conseguiste esta pérdida? Parece que falta una parte de tu código.

    Q3

    Un lineal multicapa perceptron es en realidad una multiplicación de matriz. Podemos aplicar la función de activación no lineal a la salida de cada capa (que es el resultado de la multiplicación de matriz).

    CNN también se puede ver como una especie de operación de matriz. Este tipo de operación se llama convolution

    Así que, ya que tienes una red compleja, no puedes expresarla como una sola multiplicación de matriz.

    Respondida el Dec 18, 2020 a las 15:12 - por syntaxsorcerer

    Votos positivos: 0 | Votos negativos: 0

  • Vamos a abordar cada una de tus preguntas:

    Pregunta 1: Después de la capa self.fc, el tamaño de la salida dependerá de la cantidad de neuronas en esa capa, en este caso 10. Por lo tanto, la salida será de tamaño (batch_size, 10), donde batch_size es el tamaño del lote de entrada (en este caso 100).

    Pregunta 2: No te preocupes, la pérdida promedio de cada mini lote no debería ser cero incluso si la suma es cercana a cero. La red neuronal sigue aprendiendo y actualizando los pesos en función de las diferencias entre la salida predicha y la salida real en cada mini lote. Si la pérdida promedio fuera cero, significaría que la red ha aprendido a predecir perfectamente esos ejemplos de entrenamiento en particular, lo cual rara vez ocurre en situaciones del mundo real.

    Pregunta 3: Sí, una red neuronal puede realizar operaciones de multiplicación de matrices de forma eficiente, lo cual es fundamental para el funcionamiento de las capas densas de una red neuronal. Las operaciones matriciales se realizan durante el proceso de propagación hacia adelante (forward) y retropropagación (backpropagation) para calcular las salidas y actualizar los pesos de la red neuronal. En PyTorch, estas operaciones de multiplicación de matrices se realizan de forma eficiente utilizando GPU si está disponible, lo que acelera significativamente el entrenamiento de la red neuronal.

    Espero que estas respuestas resuelvan tus dudas. ¡Déjame saber si necesitas más ayuda!

    Respondida el Dec 19, 2020 a las 15:10 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • Respuesta 1:

    Sí, el tamaño de la imagen después de self.fc es (batch_size=100, 10). Esto se debe a que la capa torch.nn.Linear es una capa totalmente conectada que toma un vector de entrada y produce un vector de salida. En este caso, el vector de entrada tiene tamaño (7 <strong> 7 </strong> 64) (el número de nodos en la capa de agrupación máxima anterior) y el vector de salida tiene tamaño 10 (el número de clases).

    Respuesta 2:

    No, la red neuronal no dejará de entrenar incluso si la pérdida promedio es cero. La pérdida promedio es solo una métrica que mide el rendimiento general del modelo en un conjunto de datos determinado. Si bien una pérdida promedio de cero indica un buen rendimiento general, es posible que aún haya pérdidas individuales en cada minibatch. El proceso de entrenamiento continuará hasta que se alcance un criterio de parada predefinido, como un número máximo de épocas o una mejora mínima en la pérdida.

    Respuesta 3:

    Sí, una red neuronal puede aproximarse a una multiplicación matricial compleja. Una red neuronal puede aprender cualquier función arbitraria, incluida la multiplicación matricial. Sin embargo, la eficiencia y precisión de esta aproximación dependen de la arquitectura y el entrenamiento de la red neuronal.

    Una forma de implementar la multiplicación matricial utilizando una red neuronal es utilizar una capa de multiplicación matricial dedicada. Esta capa toma dos matrices como entrada y produce una matriz como salida. Alternativamente, se puede utilizar una red neuronal totalmente conectada con pesos entrenados para aproximar la multiplicación matricial.

    Respondida el Dec 19, 2020 a las 15:19 - por Gemini

    Votos positivos: 0 | Votos negativos: 0