我的训练数据集对我的神经网络来说太复杂了吗?

时间:2019-07-26 17:03:09

标签: tensorflow machine-learning keras data-science

嗨,我是机器学习和堆栈溢出的新手,我试图从我的回归模型中解释两个图。

Training error and Validation error from my machine leanring model

我的情况类似于这些人Very large loss values when training multiple regression model in Keras,但我的MSE和RMSE非常高。

我的造型是否合适?如果是,我该怎么解决这个问题?

这是我用来解决回归问题的神经网络

def build_model():
model = keras.Sequential([
    layers.Dense(128, activation=tf.nn.relu, input_shape=[len(train_dataset.keys())]),
    layers.Dense(64, activation=tf.nn.relu),
    layers.Dense(1)
])
optimizer = tf.keras.optimizers.RMSprop(0.001)

model.compile(loss='mean_squared_error',
              optimizer=optimizer,
              metrics=['mean_absolute_error', 'mean_squared_error'])
return model

这是我的数据集Data set_1 我有500个样本,10个功能和1个目标(res_0)

3 个答案:

答案 0 :(得分:3)

恰恰相反:看起来您的模型过度拟合。如果您的训练集错误率较低,则意味着您的模型已经从数据中很好地学习了,并且可以准确地推断出结果。但是,如果之后的验证数据很高,则意味着从训练数据中学到的信息不能成功地应用于新数据。。这是因为您的模型过于“适合”您的训练数据,并且仅学习了如何根据这些数据很好地进行预测。

为解决此问题,我们可以引入Stores来减少过度拟合。一种非常常见的技术是使用Dropout层。这将随机删除一些节点,以使模型不会与它们过分关联-从而减少了对那些节点的依赖性,并也使用其他节点来“学习”更多信息。我提供了一个示例,您可以在下面进行测试;尝试发挥价值和其他技巧,以了解最有效的方法。另外请注意:您确定在密集层中需要多个节点吗?似乎对您的数据集相当多,并且这也可能导致过拟合。

def build_model():
model = keras.Sequential([
layers.Dense(128, activation=tf.nn.relu, input_shape=[len(train_dataset.keys())]),
Dropout(0.2),
layers.Dense(64, activation=tf.nn.relu),
layers.Dense(1)
])
optimizer = tf.keras.optimizers.RMSprop(0.001)

model.compile(loss='mean_squared_error',
          optimizer=optimizer,
          metrics=['mean_absolute_error', 'mean_squared_error'])
return model

答案 1 :(得分:1)

正如@omoshiroiii在现有答案中所述,您的模型实际上似乎过拟合,这就是RMSE和MSE太高的原因。您的模型了解了训练数据中的细节和噪声,以至于现在对模型在新数据上的性能产生负面影响,因此解决方案是随机删除一些节点,以使模型无法与它们建立过多关联。 / p>

答案 2 :(得分:1)

好吧,我认为您的模型过拟合

有几种方法可以帮助您:

1-减少网络的容量,您可以通过删除层或减少隐藏层中的元素数量来实现

2-滤除图层,通过将某些要素设置为零将随机删除某些要素

3-常规化

如果我想对此做一个简短的解释:

-减少网络的容量:

某些模型具有大量可训练的参数。该数字越高,模型越容易记住每个训练样本的目标类别。显然,这对于概括新数据并不理想。通过降低网络容量,它将学习重要的模式或将损失最小化的模式。但是请记住,过多降低网络容量会导致容量不足。

正则化:

此页面可以为您提供很多帮助 https://towardsdatascience.com/handling-overfitting-in-deep-learning-models-c760ee047c6e

-退出图层

您可以使用这样的图层

model.add(layers.Dropout(0.5))

这是一个辍学层,有50%的机会将输入设置为零。

有关更多详细信息,请参见以下页面:

https://machinelearningmastery.com/how-to-reduce-overfitting-with-dropout-regularization-in-keras/