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.

La entrada incorrecta de CNN

Estoy entrenando una red neuronal ingresando lotes de imágenes. Cada lote contiene 32 imágenes de tamaño 224x224x3. Para el entrenamiento, utilizo este código:

model.train()
loss_over_time = []

for epoch in range(n_epochs):  

    running_loss = 0.0

    for batch_i, data in enumerate(trainLoader):

        images = data['image']
        n_input_channels = 1
        key_pts = data['keypoints']

        key_pts = key_pts.view(key_pts.size(0), -1)

        key_pts = key_pts.type(torch.FloatTensor)
        images = images.type(torch.FloatTensor)

        output_pts = model(images)

        loss = criterion(output_pts, key_pts)

        optimizer.zero_grad()

        loss.backward()

        optimizer.step()

        running_loss += loss.item()
        if batch_i % 32 == 31:    # print every 32 batches
            print('Epoch: {}, Batch: {}, Avg. Loss: {}'.format(epoch + 1, batch_i+1, running_loss/32.0))
            loss_over_time.append(running_loss/32.0)
            running_loss = 0.0

print('Finished Training')
return loss_over_time

Pero me enfrento al siguiente error:

RuntimeError: Given groups=1, weight of size [128, 1, 3, 3], expected input[32, 224, 224, 3] to have 1 channels, but got 224 channels instead

He buscado en StackOverflow y otros sitios web. Parece que definí el número de canales de entrada como (https://stackoverflow.com/questions/65057069/runtimeerror-given-groups-1-weight-of-size-32-1-3-3-expected-input1-3):

n_input_channels = 1

Pero no puedo encontrar una forma de hacerlo.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que la red neuronal espera una entrada con 1 canal, pero la entrada actual tiene 224 canales. Para solucionar esto, puedes modificar la línea que carga los datos de la imagen para incluir una dimensión de canal:

    images = data['image'].unsqueeze(1)
    

    Esto añadirá una dimensión única al tensor de entrada, de manera que tenga forma (tamaño_lote, 1, 224, 224, 3) en lugar de (tamaño_lote, 224, 224, 3).

    Luego, necesitas actualizar la variable n_input_channels en consecuencia:

    n_input_channels = 1
    

    Esto debería solucionar el error y permitir que la red neuronal se entrene correctamente.

Comments are closed.