es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo usar conv2d en este caso

Quiero crear una capa de NN de manera que:
– para una entrada de tamaño 100, asumiremos que cada 5 muestras crearán un “bloque”
– la capa debe calcular, digamos, 3 valores para cada bloque
– por lo tanto, los tamaños de entrada/salida de esta capa deberían ser: 100 -> 20*3
– cada bloque de tamaño 5 (y solo este bloque) está completamente conectado al bloque de resultado de tamaño 3

Si entiendo correctamente, puedo utilizar Conv2d para este problema. Pero no estoy seguro de cómo elegir correctamente los parámetros de Conv2d.

¿Es adecuado Conv2d para esta tarea? Si es así, ¿cuáles son los parámetros correctos? ¿Serían:
– canales de entrada = 100
– canales de salida = 20*3
– kernel = (5,1)?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    No, Conv2d puede no ser adecuado para esta tarea ya que está más destinado a tareas de procesamiento de imágenes donde las entradas son matrices 2D.

    Una posible solución para este problema podría ser usar una capa personalizada de PyTorch.

    La capa podría tomar una entrada de tamaño (tamaño_del_lote, 100) y volverla a dar forma a (tamaño_del_lote, 20, 5). Luego, podríamos aplicar una transformación lineal en la última dimensión de la entrada remodelada para producir una salida de tamaño (tamaño_del_lote, 20, 3). Por último, podríamos aplanar la salida para obtener una salida de tamaño (tamaño_del_lote, 20*3).

    El código para esta capa podría ser algo así:

    import torch.nn as nn
    
    class CapaPersonalizada(nn.Module):
        def __init__(self):
            super().__init__()
            self.lineal = nn.Linear(5, 3)
    
        def forward(self, x):
            x = x.view(-1, 20, 5)
            x = self.lineal(x)
            x = x.view(-1, 20*3)
            return x
    

    Aquí definimos una capa personalizada CapaPersonalizada, que toma una entrada x y aplica la transformación lineal a cada bloque de tamaño 5.

    Para usar esta capa, la instanciaríamos y la agregaríamos a nuestra red neuronal como cualquier otra capa de PyTorch:

    modelo = nn.Sequential(
        nn.Linear(100, 200),
        nn.ReLU(),
        CapaPersonalizada(),
        nn.Linear(20*3, 10),
        nn.Softmax(dim=1)
    )
    

    En este ejemplo, tenemos una red neuronal con una capa oculta de tamaño 200, seguida de nuestra capa personalizada, otra capa lineal para producir nuestra salida final y una activación softmax.

    Cabe destacar que el tamaño de entrada de 100 y el tamaño de salida de 20*3 están tenidos en cuenta en la capa personalizada, por lo que no necesitamos especificar estos valores explícitamente al definir la arquitectura de nuestra red neuronal.

Comments are closed.