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)
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 archivoeditnts.py
: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.