使用 CNN 构建预测模型

数据挖掘 深度学习 预测建模 喀拉斯 张量流 美国有线电视新闻网
2022-03-07 07:59:48

我有一个输入数组 X,它的形状是(38000,32,1); 输出数组 Y 是(38000,1), Y 的元素可以是0或 一个数值,如0.0401391.075341,或其他一些数值等。 X 中的一个典型向量如下所示

在此处输入图像描述

我想建立一个模型来基于 X 预测 Y。这是模型,两个卷积层,然后是最大池化,然后是一个卷积层,一个池化,然后是一个全连接层。详细架构如下。

outX = conv_filter(20, 50, strides=1, activation='relu')(inputs)
outX = conv_filter(5, 60, activation='relu')(outX)
 outX = MaxPooling1D(2)(outX)
outX = conv_filter(2, 70, activation='relu')(outX)
outX = MaxPooling1D(2)(outX)

outX = Dense(300, activation='relu')(outX)
outX = Flatten()(outX)
predictions = Dense(1,activation='linear')(outX)
model = Model(inputs=[inputs],outputs=predictions)

损失函数是'mean_squared_error'。结果看起来不太好。我能想到的原因之一是输入向量的数值,它往往非常小。它会导致任何数字问题吗?有什么建议可以对它们进行预处理吗?另外,网络架构有什么可以改进的地方吗?任何建议将不胜感激。

1个回答

如果您还没有弄清楚发生了什么,那么您可以尝试一些事情。

1)由于您提到您的输入值非常小,您可以尝试对其进行标准化。我同意非常小的(在你的情况下,非常小的)值可能会弄乱权重更新。当你这样做时,请确保先进行标准化,然后再进行训练-测试拆分

2)你能告诉我你的损失在训练期间的样子吗?你看到过拟合了吗?如果你这样做了,你是否使用了dropout?您是否尝试过对权重进行 L2 正则化?(仅在权重上使用它们,而不是在偏差上)

可能会发生一百万件事,网络中可能还有很大的改进空间,但我需要看看随着训练的进行,你的损失是如何减少的。此外,您需要详细说明您的结果看起来有多糟糕?(我假设您的培训非常成功,但您的测试错误率很高?)。另外,如果您不一定要使用 CNN,您是否尝试使用具有几个隐藏层的 ANN 并查看该模型的效果?