How to train features in different scales in deep learning model
I'm new in deep learning and I built a very simple model to try to train my data. I have two features input: sex and age. sex is 0 or 1 and age is between 25 and 60. Output is just 0 means this person has no such disease and 1 means has such disease.

However, when I train my model, the training loss does not decrease at all. It looks like because my two features are very different in range. So how can I fix this? Any suggestions would be greatly appreciated. 

My code is here:

class Net(nn.Module):
    def __init__(self):
        super(Net,self).__init__()

        self.fc1 = nn.Sequential(
            nn.Linear(2,50),
            nn.ReLU(),
            nn.Linear(50,2)
        )

    def forward(self,x):
        x = self.fc1(x)

        x = F.softmax(x, dim=1)
        return x

#Inputs
X = np.column_stack((sex,age))
X = torch.from_numpy(X).type(torch.FloatTensor)
y = torch.from_numpy(y).type(torch.LongTensor)


#Initialize the model        
model = Net()
#Define loss criterion
criterion = nn.CrossEntropyLoss()
#Define the optimizer
optimizer = torch.optim.Adam(model.parameters(), lr=0.01)

epochs = 1000

losses = []
for i in range(epochs):

    y_pred = model.forward(X)
    #Compute Cross entropy loss
    loss = criterion(y_pred,y)
    #Add loss to the list
    losses.append(loss.item())
    #Clear the previous gradients
    optimizer.zero_grad()
    #Compute gradients
    loss.backward()
    #Adjust weights
    optimizer.step()
    _, predicted = torch.max(y_pred.data, 1)

    if i % 50 == 0:
        print(loss.item())


And the train loss looks like this

0.9273738861083984
0.6992899179458618
0.6992899179458618
0.6992899179458618
0.6992899179458618
0.6992899179458618
0.6992899179458618
0.6992899179458618
0.6992899179458618
0.6992899179458618
0.6992899179458618
0.6992899179458618
0.6992899179458618
0.6992899179458618


EDIT

Thank you for your comments. Sorry I didn't explain my question clearly. This is part of my network and my input data contains two parts: the first part is some signal data and I use CNN model to train it and it works well; the second part is what I mentioned above. My goal is to merge two models to improve my accuracy.
I've tried normalization and looks like it works. I want to know is it always necessary to do normalization when pre-processing data? Thank you!

An alternative.

If the age has discrete values in the range (25-60), then one possible way would be to learn embeddings for those two attributes, sex and age.

For example,

class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()

        self.sex_embed = nn.Embedding(2, 20)
        self.age_embed = nn.Embedding(36, 50)

        self.fc1 = nn.Sequential(
            nn.Linear(70, 35),
            nn.ReLU(),
            nn.Linear(35, 2)
        )

    def forward(self, x):
        # write the forward


In the above example, I assume age values will be integer (25, 26, ..., 60), so for each possible value, we can learn a vector representation.

So, I propose to learn a 20d representation of sex and 50d representation of age. You can change the dimensions and do experiments to find an optimal value.
