Hi! I am new to pytorch and I am trying to recreate the same simple neural net model as scikit-learn.neural_network.
Sklearn model
mlp = MLPRegressor()
mlp.fit(x,y)
_out: MLPRegressor(activation='relu', alpha=0.0001, batch_size='auto', beta_1=0.9,_
_ beta_2=0.999, early_stopping=False, epsilon=1e-08,_
_ hidden_layer_sizes=(100,), learning_rate='constant',_
_ learning_rate_init=0.001, max_iter=200, momentum=0.9,_
_ nesterovs_momentum=True, power_t=0.5, random_state=None,_
_ shuffle=True, solver='adam', tol=0.0001, validation_fraction=0.1,_
_ verbose=False, warm_start=False)_
mlp.score(x,y)
_out: 0.950355451344164_
And here the code of the pytorch nn model which should be the same but gives me a score between 0.17 - 0.45:
import torch
import torch.nn as nn
import torch.nn.functional as F
import torch.utils.data as utils_data
from torch.autograd import Variable
inputs = Variable(torch.Tensor(x.values))
targets = Variable(torch.Tensor(y.values))
class MLP(nn.Module):
def __init__(self, input_size, hidden_size, output_size):
super(MLP, self).__init__()
self.fc1 = nn.Linear(input_size, hidden_size)
self.fc2 = nn.Linear(hidden_size, output_size)
def forward(self, x):
out = self.fc2(F.relu(self.fc1(x)))
return out
input_size = inputs.size()[1]
hidden_size = 100
output_size = 1
num_epoch = 200
learning_rate = 1e-3
model = MLP(input_size = input_size, hidden_size = hidden_size,
output_size = output_size)
optimizer = torch.optim.Adam(model.parameters(), lr = learning_rate, weight_decay=1e-4)
loss_fct = nn.MSELoss()
training_samples = utils_data.TensorDataset(inputs, targets)
data_loader_trn = utils_data.DataLoader(training_samples, batch_size=200, drop_last=False, shuffle=True)
#train
for epoch in range(num_epoch):
cum_loss = 0
for batch_idx, (data, target) in enumerate(data_loader_trn):
tr_x, tr_y = data.float(), target.float()
pred = model(tr_x)
loss = loss_fct(pred, tr_y)
optimizer.zero_grad()
loss.backward()
optimizer.step()
cum_loss += loss.item()
if epoch % 10 == 0:
print ('Epoch [%d/%d], Loss: %.4f'
%(epoch+1, num_epoch, cum_loss))
final_prediction = model(inputs)
final_pred_np = final_prediction.clone().detach().numpy()
np.corrcoef(final_pred_np.squeeze(), targets)[0,1]
_out: 0.17246591146678705_
additional informations: x.shape() = (18008, 2784)
Could you help me find my mistakes? Why this pytorch model doesn’t do a score of 0.95 as the sklearn model ?
Sorry if I have wrongly implemented this topic it is actually my first post on this website =/
Thanks a lot!