Я новичок в глубоком обучении, и я построил очень простую модель, чтобы попытаться обучить мои данные. У меня есть две функции ввода: sex
и age
. sex
равно 0
или 1
, а age
находится между 25
и 60
. Вывод просто 0
означает, что у этого человека нет такой болезни, а 1
означает, что имеет такую болезнь.
Однако, когда я тренирую свою модель, потери на тренировке совсем не уменьшаются. Похоже, потому что мои две функции очень разные по дальности. Так как я могу это исправить? Любые предложения будут ценны.
Мой код здесь:
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())
И потеря поезда выглядит следующим образом
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
РЕДАКТИРОВАТЬ
СпасибоВы за ваши комментарии. Извините, я не объяснил свой вопрос четко. Это часть моей сети, и мои входные данные состоят из двух частей: первая часть - это некоторые сигнальные данные, и я использую модель CNN для обучения, и она работает хорошо;вторая часть - это то, что я упомянул выше. Моя цель - объединить две модели, чтобы улучшить мою точность. Я пробовал нормализацию и похоже, что это работает. Я хочу знать, всегда ли необходимо проводить нормализацию при предварительной обработке данных? Спасибо!