训练神经网络时将获得的精度保持为零-Python

时间:2020-01-21 09:29:52

标签: python keras neural-network

我是神经网络的新手,我正在尝试构建和训练可以预测 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 

所有纪元都具有相同的数字和精度,即为。有办法解决吗?

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

首先,您要预测一个连续值,您有两种选择,要么在模型结尾不使用 Sigmoid ,要么使用线性不激活,然后模型将输出单个值。正如其他建议一样,如果您知道边界并保留了S型曲线,则可以对数据进行归一化。

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