【问题标题】:Basic Regression Neural Network unable to learn基本回归神经网络无法学习
【发布时间】:2021-09-15 01:06:17
【问题描述】:
  • 我正在尝试训练一个基本的神经网络,用于在数据集上进行回归以预测汽车的价格范围。线性回归模型对数据集表现不佳,因此制作了神经网络模型。 这是我使用的图层。

        tf.keras.backend.clear_session()
    
        nmodel = Sequential()
        nmodel.add(tf.keras.layers.Dense(10, activation='relu', input_shape=[28,]))
        nmodel.add(tf.keras.layers.Dense(units=1))
    
    
  • 编译后可以得到如下输出

        opt = tf.keras.optimizers.Adam(learning_rate=.2)
        nmodel.compile(loss='mean_squared_error' , optimizer=opt, metrics=['accuracy'])
    
  • 这是我用来拟合它的最后一个函数。

        keras_history = nmodel.fit(X_train, Y_train , batch_size=32 ,epochs=100 , validation_data=(X_test, Y_test))
    
  • 训练集的损失通常在 5 个 epoch 后开始停滞,此后模型停止学习。该模型的准确率也很低,即~=0.0015。

  • 我尝试了几种方法来解决这个问题。我一开始以为可能是学习率太小了,但是当我提高学习率时,它也不会学习。

  • 我想移除激活函数,因为可能 relu 导致神经元在达到一定损失后死亡。那也没有结果。

  • 我测试了不同数量的层和不同数量的神经元。最后,它们都对模型学习没有影响。

  • 我曾经做过分类神经网络,这是我第一次做回归神经网络。我觉得我缺少一些非常基本的东西。

【问题讨论】:

  • 代码必须在问题本身中作为文本,而不是作为外部链接。
  • @Dr.Snoopy 对不起。从现在开始,我将确保在问题中有代码。
  • 准确率在这里不是一个正确的指标,它是用来分类的。

标签: python tensorflow keras neural-network regression


【解决方案1】:

我查看了你的笔记本,发现了两件事:

您不应该 fit_transform 测试集

我们在训练数据上使用 fit_transform() 来学习对训练数据进行缩放的参数,同时对后者进行缩放。但是,我们只对测试数据使用 transform(),因为我们需要从训练数据中学习缩放参数才能缩放测试数据。 你需要有 X_test = scaler.transform(X_test)

另外,您不需要缩放目标值。

你可以改用这个:

scaler = MinMaxScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)

【讨论】:

  • 对不起,这似乎也没有帮助。模型而不是数据可能存在一些问题,因为 sklearn 线性回归模型似乎适用于给定数据。
  • 精度不能用于回归。对于您的 LinearRegression 模型,您正在使用 the score() 函数,该函数返回预测的决定系数 R²。如果您想将神经网络与线性回归进行比较,您应该计算后者的 MSE:lin_mse = mean_squared_error(actual_price, predicted_price)。或者,您可以计算神经网络的决定系数 R²。
猜你喜欢
  • 2016-05-25
  • 2020-01-16
  • 2014-05-29
  • 2016-07-11
  • 1970-01-01
  • 2019-03-15
  • 2011-08-17
  • 2020-10-29
  • 1970-01-01
相关资源
最近更新 更多