我是一个新的深度学习者,我建立了一个非常简单的模型来训练我的数据。我有两个特性输入: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模型进行训练,效果很好;第二部分是我前面提到的。我的目标是合并两个模型,以提高我的准确性。 我试过正常化,看起来很有效。我想知道在对数据进行预处理时是否总是需要进行归一化处理?谢谢你
另一种选择。
如果age的离散值在
(25-60)
范围内,那么一种可能的方法就是学习这两个属性sex
和age
的嵌入例如
在上面的例子中,我假设年龄值是整数
(25, 26, ..., 60)
,因此对于每个可能的值,我们可以学习向量表示所以,我建议学习
20d
的性别表征和50d
的年龄表征。您可以更改尺寸并进行实验以找到最佳值相关问题 更多 >
编程相关推荐