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.

Reshape tensor en un modelo de autoencoder utilizando fashion mnist.

Mi código funciona bien para el número de época 1, pero cuando cambia la época deja de funcionar debido a la diferencia en la estructura.
¿Podrías ayudarme a resolver este problema?
Aprecio mucho tu tiempo.

transform = transforms.Compose([transforms.ToTensor(), transforms.Normalize((0.1307,), (0.3081,))])
trainTransform  = torchvision.transforms.Compose([torchvision.transforms.ToTensor(), torchvision.transforms.Normalize((0.1307,), (0.3081,))])
trainset = torchvision.datasets.FashionMNIST(root='{}./data'.format(path_prefix), train = True, download = True, transform = transform)
train_loader = torch.utils.data.DataLoader(trainset, batch_size=32, shuffle=False, num_workers=4)
valset = torchvision.datasets.FashionMNIST(root='{}./data'.format(path_prefix), train=False, download=True, transform=transform)
val_loader = torch.utils.data.DataLoader(valset, batch_size=32, shuffle=False, num_workers=4)


def train(self, epoch):
    # Ten en cuenta que debes modificar tanto el entrenador como la función de pérdida para el modelo VAE
    self.model.train()
    train_loss = 0
    for batch_idx, (data, _) in tqdm(enumerate(self.train_loader), total=len(self.train_loader)):
        data = data.view(data.shape[0], -1)

        data = data.to(self.device)
        #print(data.shape)
        #print(data)
        self.optimizer.zero_grad()
        recon_batch = self.model(data)
        loss = self.loss_function(recon_batch, data)
        loss.backward()
        train_loss += loss.item()
        self.optimizer.step()

    train_loss /= len(self.train_loader.dataset)/32 # 32 es el tamaño del lote
    print('====> Época: {} Pérdida promedio: {:.4f}'.format(
          epoch, train_loss))
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema podría estar relacionado con la forma de los datos proporcionados al modelo. Específicamente, el código remodela los datos a un tensor 2D con dimensiones (batch_size, num_features) usando la línea “data = data.view(data.shape[0], -1)”.

    Si la forma de los datos cambia entre épocas, es posible que el modelo no pueda procesarlos correctamente. Una solución sería asegurarse de que la forma de los datos se mantenga consistente entre épocas, ya sea mediante rellenar o recortar las imágenes a un tamaño fijo, o remodelar los datos de una manera que sea invariante a la forma original.

    Otra cosa a verificar es si las dimensiones de los parámetros del modelo son consistentes con la forma de los datos. Por ejemplo, si el modelo fue diseñado para trabajar con imágenes de 28×28 pero los datos se remodelan a un tensor de 32×32, es posible que el modelo no funcione correctamente.

    Sin más información sobre los mensajes de error específicos o los cambios en los datos entre épocas, es difícil proporcionar consejos más específicos. Sin embargo, abordar estos problemas debería ayudar a garantizar que el código se ejecute de manera consistente en diferentes épocas.

Comments are closed.