我正在处理一个看似简单的回归任务,其中我想要一个准确的深度神经网络,该网络在矩阵(
x_train
)上进行训练,该矩阵具有与相应目标值(y_train
)相同的精确值。
在这个问题中
x_train
中的每个样本与其对应的y_train
具有相同的精确值。y_train
中的每个样本都是一个浮点数,x_train
中的每个样本具有(128, 128, 1)
的形状。有 1000 个这样的样本。
y_train
可以从这里.
x_train
可以从 y 生成如下:
x_train = np.array([ np.full((128, 128, 1), i) for i in y_train[:,0] ])
这显然看起来像是一个需要在深度神经网络 (DNN) 中解决的简单问题。但是,我的损失和均方根误差 (RMSE) 值分别仅达到 0.08 和 0.1。这听起来不是很压倒性的。我希望并希望在这里有更好的 RMSE 值。
在这个简单的问题中是否有可能获得更好的 RMSE?如果是,那么我应该遵循什么方法?
下面是我正在使用的DNN。
normalizer = tf.keras.layers.Normalization(input_shape=[128, 128, 1], axis=-1)
def build_and_compile_model(norm):
model = tf.keras.Sequential([
norm,
layers.Conv2D(64, 64, activation='relu'),
layers.Conv2D(3, 3, activation='relu'),
layers.MaxPooling2D(2),
layers.Conv2D(3, 3, activation='relu'),
layers.Conv2D(3, 3, activation='relu'),
layers.Conv2D(3, 3, activation='relu'),
layers.Conv2D(3, 3, activation='relu'),
layers.MaxPooling2D(2),
layers.Conv2D(3, 3, activation='relu'),
layers.Conv2D(3, 3, activation='relu'),
layers.Conv2D(3, 3, activation='relu'),
layers.Conv2D(3, 3, activation='relu'),
layers.Flatten(),
layers.Dense(units=512, activation='relu'),
layers.Dense(units=256, activation='relu'),
layers.Dense(units=64, activation='relu'),
layers.Dense(units=1)
])
model.compile(loss='mean_absolute_error',
optimizer=tf.keras.optimizers.Adam(0.001),
metrics=[tf.keras.metrics.RootMeanSquaredError()])
return model
下面是我的损失和 RMSE 曲线。
在你的问题中,你试图预测一个与回归目标具有相同值的矩阵。这意味着您的模型应该能够完美地预测给定输入的目标值。但是,您当前的模型无法实现这一点,并且您获得了相对较高的 RMSE 值。您可以尝试一些方法来提高模型的性能:
1- 增加模型容量:您可以尝试通过添加更多层、增加卷积层中过滤器的数量或增加密集层中的单元数量来增加模型容量。这将使模型能够捕获数据中更复杂的模式。
2- 改变损失函数:你目前使用平均绝对误差作为损失函数。与均方误差损失函数相比,此损失函数对异常值的敏感性较低。您可以尝试将损失函数更改为均方误差,看看这是否会提高模型的性能。
3- 更改规范化:您目前正在使用规范化作为模型的第一层。该层旨在将输入数据标准化为零均值和单位方差。但是,由于您的输入数据已经在一个狭窄的范围内,因此可能没有必要进行这种标准化。您可以尝试删除规范化层,看看这是否会提高模型的性能。
4- 添加正则化:诸如 dropout 或 L2 正则化之类的正则化技术可以帮助防止模型过度拟合。您可以尝试向模型添加 dropout 层或 L2 正则化,看看这是否会提高其性能。
5-增加训练数据:你提到你只有1000个训练样本。增加训练数据的大小可以帮助模型更好地概括并提高其性能。
6- 更改优化器:您当前正在使用学习率为 0.001 的 Adam 优化器。您可以尝试将优化器更改为不同的优化器,例如随机梯度下降 (SGD),看看这是否会提高模型的性能。
尝试使用这些方法进行试验,看看它们是否可以提高模型的性能。