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.

Error de ejecución: Los tamaños de los tensores deben coincidir excepto en la dimensión 2. Se esperaba un tamaño de 32 pero se obtuvo un tamaño de 1 para el tensor número 3 en la lista.

Estoy ejecutando EDITNTS: https://github.com/yuedongP/EditNTS sin forzado del maestro en algunos datos de entrenamiento. Cuando ejecuto main.py, obtengo el error:


  Archivo "/home/jba5337/work/ds440w/EditNTS-Google/editnts.py", línea 252, en forward
    output_t = torch.cat((output_edits, attn_applied_org_t, c, hidden_words[0]),
RuntimeError: los tamaños de los tensores deben coincidir excepto en la dimensión 2. Tamaño esperado 32 pero se obtuvo tamaño 1 para el tensor número 3 de la lista.

Aquí está lo que sucede cuando imprimo hidden_words[0]:

tensor([[[-0.0416, 0.0551, -0.0872, ..., -0.0875, -0.1643, 0.0418],
         [-0.0386, 0.0519, -0.0938, ..., -0.0947, -0.1444, 0.0253],
         [-0.0422, 0.0700, -0.1075, ..., -0.0686, -0.1279, 0.0555],
         ...,
         [-0.0455, 0.0651, -0.1089, ..., -0.0852, -0.1483, 0.0665],
         [-0.0375, 0.0454, -0.0936, ..., -0.0627, -0.1144, 0.0709],
         [-0.0375, 0.0626, -0.1139, ..., -0.0896, -0.1489, 0.0344]]],
       device = 'cuda: 0', grad_fn = & lt; CudnnRnnBackward0 & gt;)

torch.Size([1, 32, 400])

Como puede ver, el tamaño del tensor es [1,32,400] cuando debería ser [32,1,400]. Así es como se inicializa hidden_words[0]. ¿Hay alguna manera de corregir esto?
 

embedded_words = self.embedding(decoder_input_word)
output_words, hidden_words = self.rnn_words(embedded_words, hidden_org)

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Sí, puedes solucionar este problema transponiendo el tensor utilizando el método transpose() en PyTorch. Específicamente, puedes agregar la siguiente línea antes de la línea 252 en el archivo editnts.py:

    hidden_words[0] = hidden_words[0].transpose(0, 1)
    

    Esto transpondrá el tensor de tamaño [1, 32, 400] a [32, 1, 400], lo que debería resolver el error de no coincidencia de tamaño.

Comments are closed.