gpt4 book ai didi

neural-network - 为什么我的神经网络在第一个时期后停留在高损失值上

转载 作者:行者123 更新时间:2023-12-04 20:26:43 28 4
gpt4 key购买 nike

我正在使用神经网络进行回归。对于 NN 来说,这应该是一项简单的任务,我有 10 个特征和 1 个要预测的输出。我在我的项目中使用 pytorch,但我的模型学习不好。损失从一个非常高的值(40000)开始,然后在前 5-10 个时期之后损失迅速减少到 6000-7000,然后它卡在那里,无论我做什么。我什至尝试更改为 skorch 而不是 pytorch 以便我可以使用交叉验证功能,但这也没有帮助。我尝试了不同的优化器并向网络添加了层和神经元,但这并没有帮助,它停留在 6000,这是一个非常高的损失值。我在这里做回归,我有 10 个特征,我试图预测一个连续值。这应该很容易做到,这就是为什么它让我更加困惑。

这是我的网络:
我在这里尝试了制作更复杂架构的所有可能性,例如添加层和单元到批量标准化、更改激活等。没有任何效果

class BearingNetwork(nn.Module):
def __init__(self, n_features=X.shape[1], n_out=1):
super().__init__()
self.model = nn.Sequential(

nn.Linear(n_features, 512),
nn.BatchNorm1d(512),
nn.LeakyReLU(),
nn.Linear(512, 64),
nn.BatchNorm1d(64),
nn.LeakyReLU(),
nn.Linear(64, n_out),
# nn.LeakyReLU(),
# nn.Linear(256, 128),
# nn.LeakyReLU(),
# nn.Linear(128, 64),
# nn.LeakyReLU(),
# nn.Linear(64, n_out)
)

def forward(self, x):
out = self.model(x)
return out

这是我的设置:
使用 skorch 比 pytorch 更容易。在这里,我还监控 R2 指标,并将 RMSE 作为自定义指标来监控我的模型的性能。我也为 Adam 尝试了 amsgrad,但这没有帮助。
R2 = EpochScoring(r2_score, lower_is_better=False, name='R2')
explained_var_score = EpochScoring(EVS, lower_is_better=False, name='EVS Metric')
custom_score = make_scorer(RMSE)
rmse = EpochScoring(custom_score, lower_is_better=True, name='rmse')

bearing_nn = NeuralNetRegressor(

BearingNetwork,
criterion=nn.MSELoss,
optimizer=optim.Adam,
optimizer__amsgrad=True,
max_epochs=5000,
batch_size=128,
lr=0.001,
train_split=skorch.dataset.CVSplit(10),
callbacks=[R2, explained_var_score, rmse, Checkpoint(), EarlyStopping(patience=100)],
device=device

)

我还标准化了输入值。

我的输入具有以下形状:
torch.Size([39006, 10])

和输出的形状是:
torch.Size([39006, 1])

我使用 128 作为我的 Batch_size 但我也尝试了其他值,如 32、64、512 甚至 1024。虽然标准化输出不是必需的,但我也尝试过,当我预测值时它不起作用,损失很高.请有人帮助我,我将不胜感激每一个有用的建议。我还将添加我的训练和 val 损失和 epoch 指标的屏幕截图,以可视化损失在前 5 个 epoch 中是如何减少的,​​然后它永远保持在 6000 值,这是一个非常高的损失值。

loss and metrics over epochs

最佳答案

考虑到您的训练和开发损失随着时间的推移而减少,您的模型似乎正在正确训练。关于您对训练和开发损失值的担忧,这完全取决于您的目标值的规模(您的目标值有多大?)以及用于计算训练和开发损失的指标。如果您的目标值很大,而您想要较小的训练和开发损失值,则可以对目标值进行归一化。

从我收集到的关于你的实验以及你的 R2 分数来看,你似乎在错误的领域寻找解决方案。在我看来,考虑到您的 R2 分数较低,您的功能似乎不够强大,这可能意味着您存在数据质量问题。这也可以解释为什么您的架构调整没有提高模型的性能,因为问题不是您的模型。所以如果我是你,我会考虑我可以添加哪些新的有用功能,看看是否有帮助。在机器学习中,一般规则是模型的好坏取决于它们所训练的数据。我希望这有帮助!

关于neural-network - 为什么我的神经网络在第一个时期后停留在高损失值上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59153248/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com