Hey Community,
I´m very new to PyTorch and wrote my first working programm recently.
I do this for my bachelor-degree and have problems with the output of my model.
I am using a dataset about the number of people, beeing in a room at the same time, depending on some parameters like the date, time, holidays, weather-conditions and so on. The aim is to predict the number of people for a certain time, like half an hour, an hour or two in the future.
There are 13 Input-Values and one output.
I think the biggest trouble I have right now is to configure the parameters correctly that my loss drops lower than it is. Right now, it is always about 1.5 in average.
I hope someone of you has some tips or tricks how to get along with my data correclty, since this is required for my degree.
I will leave you the code here.
Thank you in advance!!!
Kind regards
Christian Richter
import torch
import torch.nn as nn
import torch.nn.functional as F
from torch.autograd import Variable
import torch.optim as optim
import pandas as pd
import matplotlib.pyplot as plt
### Dataset ###
dataset = pd.read_csv('./data/csv/train_data_csv_2.csv')
x_temp = dataset.iloc[:, :-1].values
print(x_temp)
print()
print(x_temp.size)
print()
y_temp = dataset.iloc[:, 13:].values
print(y_temp)
print()
print(y_temp.size)
print()
x_train_tensor = torch.FloatTensor(x_temp)
y_train_tensor = torch.FloatTensor(y_temp)
### Network Architecture ###
class Network(nn.Module):
def __init__(self):
super(Network, self).__init__()
self.linear1 = nn.Linear(13, 13) #13 Input-Neurons, 13 Output-Neurons, Linearer Layer
self.linear2 = nn.Linear(13, 13)
self.linear3 = nn.Linear(13, 13)
self.linear4 = nn.Linear(13, 1600)
def forward(self, x):
pax_predict = F.torch.sigmoid(self.linear1(x))
pax_predict = F.torch.sigmoid(self.linear2(x))
pax_predict = F.torch.sigmoid(self.linear3(x))
pax_predict = self.linear4(x)
return pax_predict
def num_flat_features(self, pax_predict):
size = pax_predict.size()[1:]
num = 1
for i in size:
num *= i
return num
network = Network()
print(network)
## Loss-Functions ###
criterion = nn.MSELoss()
target = Variable(y_train_tensor)
### OPTIMIZER ###
#optimizer = torch.optim.SGD(network.parameters(), lr=0.00000001) #Epochen: 50-100
#optimizer = torch.optim.Adam(network.parameters(), lr=5) #Epochen: 50
#optimizer = torch.optim.Adadelta(network.parameters(), lr=10) #Epochen: 50
optimizer = torch.optim.SGD(network.parameters(), lr=1, momentum=0.8) #Epochen: 50-100
### Training ###
for epoch in range(100):
input = Variable(x_train_tensor)
y_pred = network(input)
loss = criterion(y_pred, target)
loss_avg = loss /len(y_train_tensor)
optimizer.zero_grad()
loss.backward()
optimizer.step()
print('Epoch:', epoch, ' Total Loss:', loss.data)
print('Average Loss:', loss_avg)
print()
plt.scatter(epoch, loss_avg.data, color='r', s=10, marker='o')
#plt.show
plt.savefig('./plot/figure.png')
#test_exp = torch.Tensor([[40116],[33], [1], [0], [1], [0], [0], [0], [0]])
test_exp = torch.Tensor([[231216,36,5,0,1,0,0,0,0,1,1,1,1]])
result = network(test_exp).data[0][0].item()
print('Vorhergesagte Anzahl: ', result)