Получение ошибки: только тензоры одного элемента могут быть преобразованы в скаляры Python - PullRequest
0 голосов
/ 27 ноября 2018

Не могли бы вы помочь, как решить эту проблему.По сути, я пытаюсь получить данные о тензорной функции Pytorch, которые являются векторными, а не скалярными.X1 и X2 - это в основном столбцы в CSV-файле, который содержит много строк.Как перебирать все отдельные данные из x1 и x2, а не просто пытаться проанализировать весь вектор.Я новичок в Python и Pytorch.

import torch
import random
import pandas

data = pandas.read_csv('train/train.tsv', sep='\t')


learningrate = torch.tensor(0.01)
W = torch.rand([2, 2], dtype=torch.float, requires_grad=True)
b = torch.rand(2, dtype=torch.float, requires_grad=True)
U = torch.rand(2, dtype=torch.float, requires_grad=True)
c = torch.rand(1, dtype=torch.float, requires_grad=True)


def get_item():
 x1 = torch.tensor(data['Powierzchnia w m2'],
                  dtype=torch.float, requires_grad=True)
 x2 = torch.tensor(data['Liczba pokoi'],
                  dtype=torch.float, requires_grad=True)
 x = torch.tensor([x1, x2], dtype=torch.float)
 yexpected = torch.tensor(data['cena'].values, dtype=torch.float)
 return x, yexpected


for _ in range(100000):

 x, yexpected = get_item()
 h = torch.sigmoid(W @ x+b)

print(x)
print(yexpected)
print(h)
y = torch.sigmoid(U@h+c)
loss = (y-yexpected)**2
print(loss)
loss.backward()
with torch.no_grad():
    W -= learningrate * W.grad
    b -= learningrate * b.grad
    c -= learningrate * c.grad
    U -= learningrate * U.grad
    b.grad.zero_()
    W.grad.zero_()
    c.grad.zero_()
    U.grad.zero_()
...