为啥我的回归模型将损失和指标设为 0?

Posted

技术标签:

【中文标题】为啥我的回归模型将损失和指标设为 0?【英文标题】:Why my regression model gives 0 to loss and metric?为什么我的回归模型将损失和指标设为 0? 【发布时间】:2021-07-27 13:36:34 【问题描述】:
xss=StandardScaler()
yss=StandardScaler()

 dataset=pd.read_csv('primes.csv')
 x_train=dataset["x"]
 x_train=x_train[0:5400]
 y_train=dataset["y"]
 y_train=y_train[0:5400]
 x_test=dataset["x"]
 x_test=x_test[5400:]
 y_test=dataset["y"]
 y_test=y_test[5400:]
 x_train=[x_train]
 y_train=[y_train]
 x_train=xss.fit_transform(x_train)
 y_train=yss.fit_transform(y_train)
 x_train = np.asarray(x_train).astype('float32')
 y_train = np.asarray(y_train).astype('float32')



 model=Sequential()
 model.add(Dense(1024,activation="relu"))
 model.add(Dropout(0.01))
 model.add(Dense(128,activation="relu"))
 model.add(Dropout(0.01))
 model.add(Dense(24,activation="relu"))
 model.add(Dense(1,activation="linear"))
 optimizer=tf.keras.optimizers.Adam(1.5e-2,0.5)
 model.compile(optimizer = optimizer, loss = 'mse', metrics = ['mean_absolute_error'])
 model.fit(x_train,y_train,epochs=10,batch_size=128)

我希望我的输出介于 0 到 100000 之间,但经过这么多次迭代后它只输出 0 损失和度量。

纪元 1/10 1/1 [==============================] - 1s 582ms/step - loss: 0.0000e+00 - mean_absolute_error: 0.0000e+00 纪元 2/10 1/1 [==============================] - 0s 30ms/step - loss: 0.0000e+00 - mean_absolute_error: 0.0000e+00 时代 3/10 1/1 [===============================] - 0s 25ms/step - loss: 0.0000e+00 - mean_absolute_error: 0.0000e+00 时代 4/10 1/1 [===============================] - 0s 28ms/step - loss: 0.0000e+00 - mean_absolute_error: 0.0000e+00 纪元 5/10 1/1 [==============================] - 0s 26ms/step - loss: 0.0000e+00 - mean_absolute_error: 0.0000e+00 时代 6/10 1/1 [==============================] - 0s 26ms/step - loss: 0.0000e+00 - mean_absolute_error: 0.0000e+00 时代 7/10 1/1 [===============================] - 0s 28ms/step - loss: 0.0000e+00 - mean_absolute_error: 0.0000e+00 时代 8/10 1/1 [==============================] - 0s 27ms/step - loss: 0.0000e+00 - mean_absolute_error: 0.0000e+00 纪元 9/10 1/1 [===============================] - 0s 28ms/step - loss: 0.0000e+00 - mean_absolute_error: 0.0000e+00 纪元 10/10 1/1 [==============================] - 0s 27ms/step - loss: 0.0000e+00 - mean_absolute_error: 0.0000e+00

CSV file that I am using

【问题讨论】:

你的标签是什么形状的? 您不应该在最后一层使用 softmax 进行回归。 Softmax 输出[0, 1] 范围内的概率。 我其实没有标签只有数字,你可以看一下csv附件 您好,欢迎来到 SO!如果您在问题中添加更多信息(例如输出日志)会更好。 【参考方案1】:

尝试将最后一层的激活函数改为“线性”。由于您正在尝试执行回归“线性”激活函数是合适的。正如@Nikhil Kumar 提到的,“softmax”用于进行分类。

【讨论】:

它现在正在向 nan 提供损失和指标,您对此有什么想法吗? 您能否发布一个指向您的数据集的链接和完整的代码,以便我可以尝试复制该问题? 刚做的,你可以看看。 我认为这个问题可能是由于我没有对数据进行监管,但我认为这会破坏整个目的。 这里是另一个thread,关于同样的问题。此处讨论了对代码的其他可能更改。【参考方案2】:

您需要对数据使用正则化(将其缩放到 0-1 之间的值)。对于此类数据,您的模型可能太大(超过 15M 参数)。为什么要一次拟合 5400 个数据点?我不认为那是你的本意。如果您想找到 x 和 y 之间的相关性,您需要将数据集分成 (x(1), y(1)) 而不是 (x(5400), y(5400)) 的批次。

【讨论】:

你会推荐什么正则化方法(不破坏整个想法)?我应该如何划分我的数据集? 您需要知道您尝试预测的数据的最大值是多少,然后将整个数据集除以该值,以便获得介于 0 和 1 之间的值。查看一些 tf 教程,以便了解如何创建数据集。 更新了代码,你觉得现在是什么问题?

以上是关于为啥我的回归模型将损失和指标设为 0?的主要内容,如果未能解决你的问题,请参考以下文章

回归模型常见的损失函数

为啥我的 SGD 与我的线性回归模型相差甚远?

回归评价指标MSERMSEMAER-Squared

ML-9-4支持向量机--SVM回归模型(SVR)

回归任务中的评价指标之MSE,RMSE,MAE,R-Squared,MAPE

为啥我的回归系数在我的 R 模型中没有意义?