Тип преобразования - PullRequest
0 голосов
/ 20 декабря 2018

Я довольно новичок в pytorch, поэтому я не совсем уверен, является ли это ошибкой или просто ошибкой на моем конце.

Я пытаюсь построить простой модуль LogisticRegression на make_classification набор данных в sklearn, но по какой-то причине я продолжаю получать это.

RuntimeError: Ожидаемый объект скалярного типа Double, но получил скалярный тип Float для аргумента # 2 'mat2'

Я пытался преобразовать обе мои переменные X и y в double, но, похоже, он почему-то думает, что это число с плавающей точкой.

Вот мой код:

X, y = make_classification(n_samples=60000,n_features=10, n_redundant=0, n_informative=2)

X_train,y_train, X_test, y_test = train_test_split(X, y, stratify=y, random_state=42)

X_train = Variable(torch.from_numpy(X_train)).double()
y_train = Variable(torch.from_numpy(y_train)).double()
X_test = Variable(torch.from_numpy(X_test)).double()
y_test = Variable(torch.from_numpy(y_test)).double()

Вот сеть

input_dim = 40000
output_dim = 2
criterion = nn.CrossEntropyLoss()
learning_rate = 0.001
batch_size = 100
n_iters = 3000
num_epochs = int(n_iters / (len(X_train) / batch_size))

model = SingleLayeredNetwork(input_dim, output_dim)
optimizer = torch.optim.SGD(model.parameters(), lr=learning_rate)

class SingleLayeredNetwork(nn.Module):
    def __init__(self, input_dimension, output_dimension):
        super(SingleLayeredNetwork, self).__init__()
        self.layer = nn.Linear(input_dimension, output_dimension)

    def forward(self, x):
        out = self.layer(x)
        return out

Вот цикл обучения

iter = 0
for epoch in range(num_epochs):
for train, test in zip(X_train, y_train):
    train = train.double()
    print(train)
    print(train.dtype)
    print(torch.typename(train))
    optimizer.zero_grad()

    outputs = model(train)
    loss = criterion(outputs, test)

    loss.backward()

    # Updating parameters
    optimizer.step()

    iter += 1

    if iter % 500 == 0:
        # Calculate Accuracy         
        correct = 0
        total = 0
        # Iterate through test dataset
        for tra, tes in zip(X_test, y_test):
            # Load images to a Torch Variable
            tra = tra

            # Forward pass only to get logits/output
            outputs = model(tra)

            # Get predictions from the maximum value
            # 100 x 1
            _, predicted = torch.max(train, 1)

            # Total number of labels
            total += labels.size(0)

            # Total correct predictions
            correct += (predicted == test).sum()

        accuracy = 100 * correct.item() / total

        # Print Loss
        print('Iteration: {}. Loss: {}. Accuracy: {}'.format(iter, loss.item(), accuracy))

Вот ошибка, которую я продолжаю получать


RuntimeError Traceback (последний вызов последнего) в 10 optimizer.zero_grad () 11 ---> 12 выходов = модель (поезд) 13 потерь = критерий (выходы, тест) 14

~ / miniconda3 / envs / mlbook / lib / python3.6 /site-packages / torch / nn / modules / module.py в call (self, * input, ** kwargs) 487 result = self._slow_forward (* input, ** kwargs) 488 else: -> 489 result = self.forward (* input, ** kwargs) 490 для хука в self._forward_hooks.values ​​(): 491 hook_result = хук (self, input,результат)

вперёд (self, x) 5 6 def вперёд (self, x): ----> 7 out = self.layer (x) 8 return out

~ /miniconda3 / envs / mlbook / lib / python3.6 / site-packages / torch / nn / modules / module.py в вызов (self, * input, ** kwargs) 487 result = self._slow_forward (* input, ** kwargs) 488 else: -> 489 result = self.forward (* input, ** kwargs) 490 для ловли в self._forward_hooks.values ​​(): 491 hook_result = hook (self, input, result)

~ / miniconda3 / envs / mlbook / lib / python3.6 / site-packages / torch / nn / modules / linear.py вперед (self, input) 65 @weak_script_method 66 def вперед (self, input): ---> 67 return F.linear (входные данные, self.weight, self.bias) 68 69 def extra_repr (self):

~ / miniconda3 / envs / mlbook / lib / python3.6 /Сайт-пакеты / torch / nn / functions.py в линейном (вход, вес, смещение) 1352 ret = torch.addmm (тorch.jit._unwrap_optional (bias), input, weight.t ())
1353 else: -> 1354 output = input.matmul (weight.t ()) 1355, если смещение отсутствует None: 1356 output + = torch.jit._unwrap_optional (bias)

RuntimeError: Ожидаемый объект скалярного типа Double, но получил скалярный тип Float для аргумента # 2 'mat2'

Чего мне не хватает?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...