I have just check what you suggest and used two data sets for comparing. The problems I see about very different training and validation errors appear just for one of the sets, the one with lower data points so I guess the problem is with my data points.
Thank you very much for the answer.
I also post the code of train() in case there is also something wrong.
def train(x_train, y_train, x_val, y_val, model, max_it):
      loss = torch.nn.MSELoss(size_average=True)
      opt = torch.optim.Rprop(model.parameters(), lr=0.5)

      for epoch in xrange(max_it):
           tr_loss = train_epoch(model, x_train, y_train, loss, opt)
           v_loss = val_epoch(model, x_val, y_val, loss)
          # some clauses for exiting if overfitting or convergency reached.

def  train_epoch(model, x, y, loss, opt):
      model.train()
      y_pred = model(x)
      loss_tr = loss(y_pred, y)
      opt.zero_grad()
      loss_tr.backward()
      opt.step()
      return loss_tr.data.item()

def  val_epoch(model, x, y_, loss):
      model.eval()
      y_pred = model(x)
      loss_val = loss(y_pred, y)
      return loss_val.data.item()