【问题标题】:Keep Getting Accuracy zero when training Neural Network - Python训练神经网络时保持精度为零 - Python
【发布时间】:2020-05-07 07:50:30
【问题描述】:

我是神经网络的新手,我正在尝试构建和训练一个可以预测 int_rate 的神经网络。数据如下所示:

    loan_amnt   annual_inc  emp_length  int_rate
       10000    38000.0    5.600882      12.40
       13750    17808.0    5.600882      28.80
       26100    68000.0    10.00000      20.00

标准化数据后:

array([[0.23076923, 0.01141827, 0.44444444],
       [0.32692308, 0.00535096, 0.44444444],
       [0.64358974, 0.02043269, 1.        ],
       ...,
       [0.23076923, 0.04507212, 1.        ],
       [0.43846154, 0.0390625 , 0.44444444],
       [0.14102564, 0.02103365, 1.        ]])

在将数据拆分为特征和目标(目标是 int_rate)后,我得到了这些形状:

print(X_train.shape, X_val.shape, X_test.shape, Y_train.shape, Y_val.shape, Y_test.shape)

输出:(693, 3) (148, 3) (149, 3) (693,) (148,) (149,)

在那之后,我开始构建我的模型:

        model = Sequential([
     Dense(32, activation='relu', input_shape=(3,)),
     Dense(32, activation='relu'),
     Dense(1, activation='sigmoid'),
     ])

然后使用均方误差作为我的损失函数对其进行编译:

          model.compile(loss='mse',
              optimizer='adam',
              metrics=['acc'])

最后,拟合和训练模型:

          hist = model.fit(X_train, Y_train,
          batch_size=32, epochs=100,
          validation_data=(X_val, Y_val)) 

训练时:

    Train on 693 samples, validate on 148 samples

    Epoch 1/100
    693/693 [==============================] - 2s 2ms/step - loss: 158.9353 - acc: 0.0000e+00 - val_loss: 
    188.9402 - val_acc: 0.0000e+00

    Epoch 2/100
    693/693 [==============================] - 0s 51us/step - loss: 158.9353 - acc: 0.0000e+00 - 
    val_loss: 
    188.9402 - val_acc: 0.0000e+00 

并且所有的 Epoch 具有相同的数字和准确度,即 。有什么办法可以解决吗?

【问题讨论】:

  • 尝试在零和一之间规范化所有数据。 emp_length 是一个比贷款金额小得多的数字
  • 我已经使用`preprocessing.MinMaxScaler()`和`min_max_scaler.fit_transform(X)`对其进行了标准化购买

标签: python keras neural-network


【解决方案1】:

您尝试预测的int_rate 变量是连续的,而不是离散的。这意味着你有一个回归问题。 accuracy 指标仅用于分类问题,因此它对回归没有任何意义(这就是它始终为零的原因)。

此外,由于您在输出中使用sigmoid 激活,网络只能预测[0, 1] 范围内的值,因此要使用此激活,您必须对目标数据(int_rate 变量)进行归一化。

【讨论】:

    【解决方案2】:

    首先,您尝试预测一个连续值,您有两种选择,要么在模型末尾不使用 sigmoid,而是使用 linearno activation,模型将输出单个值。正如其他人建议的那样,如果您知道边界并离开 sigmoid,您可以规范化您的数据。

    在任何一种情况下,准确性都可能不是用于回归的完美指标。通常它没有任何意义,MSE 是一个足够好的指标。

    【讨论】:

      猜你喜欢
      • 2023-01-01
      • 2017-06-08
      • 2020-06-07
      • 1970-01-01
      • 2011-04-07
      • 1970-01-01
      • 2017-09-08
      • 2017-10-12
      • 2019-07-23
      相关资源
      最近更新 更多