为啥我的回归模型将损失和指标设为 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?的主要内容,如果未能解决你的问题,请参考以下文章