I am doing an implementation the exercises for Machine Learning Lecture from Coursera by Andrew Ng.
In ex02, my mission is predicting the result of someone’s admission to a school.
As a dataset, there given 2 exam score as x1 and x2, and 1 or 0 as a result of admission.
I correctly implemented Logistic Regression for this problem in Octave with same dataset.
But It doesn’t work at all in Pytorch. Doing this simple work whole day, I ask your help.
As simple code, I am uploading my code in Pytorch.
The problems are below.
- The loss goes down somewhat, but it is always above 0.6 but It was down as 0.2 when I did in Octave.
- As a result, it doesn’t predict well… actually never.
import pandas as pd import numpy as np import torch import matplotlib.pyplot as plt import torch.nn as nn from torch.autograd import Variable import torch.nn.functional as F class LogisticRegression(nn.Module): def __init__(self, input_size, num_class): super(LogisticRegression, self).__init__() self.linear = nn.Linear(input_size, num_class) def forward(self, x): out = self.linear(x) return F.sigmoid(out) data = pd.read_csv('data/ex2data1.txt', header=None) X = Variable(torch.from_numpy(data.iloc[:, :2].as_matrix()).float()) Y = Variable(np.reshape(torch.from_numpy(data.iloc[:, 2].as_matrix()).float(), (-1, 1))) input_size = 2 num_class = 1 total_epoch = 1000 learning_rate = 0.0001 model = LogisticRegression(input_size, num_class) criterion = nn.BCELoss() optimizer = torch.optim.SGD(model.parameters(), lr=learning_rate) loss_history =  for epoch in range(total_epoch): output = model(X) optimizer.zero_grad() loss = criterion(output, Y) loss.backward() optimizer.step() if (epoch + 1) % 5 == 0: print('Epoch: [%d/%d], Loss: %.4f' %(epoch+1, total_epoch, loss.data)) loss_history.append(loss.data) input = Variable(torch.Tensor([20, 30])) print("predict", (20, 30), model(input).data) input = Variable(torch.Tensor([80, 30])) print("predict", (80, 30), model(input).data) input = Variable(torch.Tensor([10, 10])) print("predict", (10, 10), model(input).data) input = Variable(torch.Tensor([45, 85])) print("predict", (45, 85), model(input).data) def plotLossHistory(loss_history): plt.figure() plt.plot(loss_history) plt.show() plotLossHistory(loss_history)