【问题标题】: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!如果您在问题中添加更多信息(例如输出日志)会更好。

标签: python keras deep-learning tensorflow2.0


【解决方案1】:

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

【讨论】:

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

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

【讨论】:

  • 你会推荐什么正则化方法(不破坏整个想法)?我应该如何划分我的数据集?
  • 您需要知道您尝试预测的数据的最大值是多少,然后将整个数据集除以该值,以便获得介于 0 和 1 之间的值。查看一些 tf 教程,以便了解如何创建数据集。
  • 更新了代码,你觉得现在是什么问题?
猜你喜欢
  • 2021-08-23
  • 2017-10-02
  • 1970-01-01
  • 1970-01-01
  • 2019-12-12
  • 2019-10-01
  • 2021-08-30
  • 1970-01-01
  • 2021-03-17
相关资源
最近更新 更多