Предсказание для моей нейронной сети, использующей pytorch, стремительно растет и становится огромным, пока не превратится в объект nan. Как я могу это исправить? - PullRequest
0 голосов
/ 30 апреля 2020

По какой-то причине значение предсказания (y_pred) моей нейронной сети стремительно растет до тех пор, пока оно не станет объектом nan. Как я могу это исправить? Я пытаюсь построить нейронную сеть с одним весом и одним смещением. Это мой код:

import numpy as np
import random
import matplotlib.pyplot as plt

x_train = np.array([random.randint(1,1000) for x in range(1000)], dtype = np.float32)
y_train = np.array([int(num*3+1) for num in x_train], dtype = np.float32)

x_test = np.array([random.randint(1,1000) for x in range(1000)], dtype = np.float32)
y_test = np.array([int(num*3+1) for num in x_train], dtype = np.float32)

X_train = torch.from_numpy(x_train)
Y_train = torch.from_numpy(y_train)

plt.figure(figsize = (8,8))
plt.scatter(X_train, Y_train)
plt.show()

X_test = torch.from_numpy(x_test)
Y_test = torch.from_numpy(y_test)

input_size = 1
hidden_size = 1
output_size = 1
learning_rate = 0.01


w1 = torch.rand(input_size, hidden_size, requires_grad = True)
b1 = torch.rand(hidden_size, output_size, requires_grad = True)



for i in range(100):

    y_pred = torch.unsqueeze(X_train, 1).mm(w1).clamp(min = 0).add(b1)
    print(y_pred)
    loss = (y_pred-Y_train).pow(2).sum()

    loss.backward()

    with torch.no_grad():
        w1-=w1.grad*learning_rate
        b1-=b1.grad*learning_rate
        w1.grad.zero_()
        b1.grad.zero_()

...