Как исправить 'RuntimeError: размер тензора a (30) должен соответствовать размеру тензора b (5359) при не синглтонном измерении 1 "в PyTorch - PullRequest
0 голосов
/ 18 октября 2019

Я пытаюсь написать учебный сценарий, но сталкиваюсь с ошибкой во время выполнения, которая не может пройти мимо. Я понимаю, что тензоры X_weighted и Xf имеют размер 5359x5359, но у меня никогда не было этой проблемы с тренировочными наборами до этого.

Я пытался изменить форму и использовать .view, но это не сработало. Я сделал это в самом тренировочном наборе, что может быть проблемой, но я не знаю, где иначе это сделать. Размерность вектора, равная 30, является обязательным условием для этого задания.

def loss_fn(X_weighted: FloatTensor, W: FloatTensor, W_context: FloatTensor, B: FloatTensor, B_context: FloatTensor, X: FloatTensor) -> FloatTensor:
    J = X @ ((W * W_context.t()+ B + B_context.t() - math.log(X)) **2)
    return J

def forward(self, X_weighted: FloatTensor, X: FloatTensor) -> FloatTensor:
    embedding_input = torch.arange(self.vocab_len).to(self.device)
    w = self.w(embedding_input)
    wc = self.wc(embedding_input)
    b = self.wc(embedding_input)
    bc = self.wc(embedding_input)
    loss = loss_fn(X_weighted, w, wc, b, bc, X)
    return loss
    print(w.shape) 


num_epochs = 300

for i in range(num_epochs):
    loss = network.forward(X_weighted, Xf) # compute loss 
    loss.backward() # backward
    opt.step() # optimizer step
    opt.zero_grad() # zero grads


RuntimeError                              Traceback (most recent call last)
  <ipython-input-169-4ee915a1483b> in <module>()
  2 
  3 for i in range(num_epochs):
  ----> 4     loss = network.forward(X_weighted, Xf) # compute loss 
  5     loss.backward() # backward
  6     opt.step() # optimizer step

 <ipython-input-165-f6a37d945377> in forward(self, X_weighted, X)
 15         b = self.wc(embedding_input)
 16         bc = self.wc(embedding_input)
 ---> 17         loss = loss_fn(X_weighted, w, wc, b, bc, X)
 18         return loss
 19         print(w.shape)

 <ipython-input-155-0783c47cd8df> in loss_fn(X_weighted, W, W_context, B, B_context, X)
  2             B: FloatTensor, B_context: FloatTensor,
  3             X: FloatTensor) -> FloatTensor:
  ----> 4     J = X @ ((W * W_context.t()+ B + B_context.t() - math.log(X)) **2)
  5     return J
  6 

  RuntimeError: The size of tensor a (30) must match the size of tensor b (5359) at non-singleton dimension 1

Я ожидаю, что тренировочный набор начнет обучение в основном, что сейчас прерывается.

...