#pytorch
Вопрос:
Для практики я попытался создать простую 2-слойную глубокую нейронную сеть с помощью pytorch, используя данные, которые я получил от https://raw.githubusercontent.com/Blackman9t/Machine_Learning/master/china_gdp.csv . Таким образом, годы являются входными значениями, а значение-прогнозируемым значением. Предположительно, эти данные не имеют линейной корреляции, поэтому для лучших прогнозов требуется многослойная нейронная сеть. Проблема в том, что потери на самом деле увеличиваются и переходят в «nan», даже если я стараюсь очень быстро учиться. Кто-нибудь может объяснить, почему это происходит? Это потому, что у меня есть только 1 значение в качестве входных данных?
import torch
import torch.nn as nn
import torch.nn.functional as F
raw_data = [[1960],[59184116488.9977],[1961],[49557050182.9631],[1962],[46685178504.3274],[1963],[50097303271.0232],[1964],[59062254890.1871],[1965],[69709153115.3147],[1966],[75879434776.1831],[1967],[72057028559.6741],[1968],[69993497892.3132],
[1969],[78718820477.9257],[1970],[91506211306.3745],[1971],[98562023844.1813],[1972],[112159813640.376],[1973],[136769878359.668],[1974],[142254742077.706],[1975],[161162492226.686],[1976],[151627687364.405],[1977],[172349014326.931],[1978],[148382111520.192],[1979],[176856525405.729],[1980],[189649992463.987],[1981],[194369049090.197],[1982],[203549627211.606],[1983],[228950200773.115],[1984],[258082147252.256],[1985],[307479585852.339],[1986],[298805792971.544],[1987],[271349773463.863],[1988],[310722213686.031],[1989],[345957485871.286],[1990],[358973230048.399],[1991],[381454703832.753],[1992],[424934065934.066],[1993],[442874596387.119],[1994],[562261129868.774],[1995],[732032045217.766],[1996],[860844098049.121],[1997],[958159424835.34],[1998],[1025276902078.73],[1999],[1089447108705.89],[2000],[1205260678391.96],[2001],[1332234719889.82],[2002],[1461906487857.92],[2003],[1649928718134.59],[2004],[1941745602165.09],[2005],[2268598904116.28],[2006],[2729784031906.09],[2007],[3523094314820.9],[2008],[4558431073438.2],[2009],[5059419738267.41],[2010],[6039658508485.59],[2011],[7492432097810.11],[2012],[8461623162714.07],[2013],[9490602600148.49],[2014],[10354831729340.4]]
years = [x for x in raw_data[::2]]
values = [x for x in raw_data[1::2]]
X = torch.tensor(years, dtype=torch.float32)
Y = torch.tensor(values, dtype=torch.float32)
class PredictorModel(nn.Module):
def __init__(self, input_size, output_size):
super().__init__()
self.linear1 = nn.Linear(input_size,10)
self.linear2 = nn.Linear(10,1)
def forward(self, xb):
out = self.linear1(xb)
out = F.leaky_relu(out)
out = self.linear2(out)
return out
model = PredictorModel(1,1)
optimizer = torch.optim.SGD(model.parameters(), lr=0.0000000001)
epochs = 10
for epoch in range(epochs):
# forward pass
y_predicted = model(X)
# print(y_predicted)
# print(Y)
# exit(1)
loss = F.mse_loss(y_predicted, Y)
# backward pass
loss.backward()
# update
optimizer.step()
optimizer.zero_grad()
print(f'epoch: {epoch 1}, loss:{loss.item():.4f}')