Сохраняйте Точность получения 0 при обучении нейронной сети - Python - PullRequest
0 голосов
/ 21 января 2020

Я новичок в нейронной сети, и я пытаюсь построить и обучить нейронную сеть, где я могу предсказать 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 

И все эпохи имеют те же цифры и точность, которая составляет ноль . Есть ли способ, которым я могу решить это?

Ответы [ 3 ]

0 голосов
/ 21 января 2020

Переменная int_rate, которую вы пытаетесь предсказать, является непрерывной, а не дискретной. Это означает, что у вас есть проблема регрессии. accuracy metri c предназначен только для задач классификации, поэтому он не имеет никакого смысла для регрессии (поэтому он всегда равен нулю).

Также, поскольку вы используете активацию sigmoid в на выходе сеть может прогнозировать значения только в диапазоне [0, 1], поэтому для использования этой активации необходимо нормализовать целевые данные (переменная int_rate).

0 голосов
/ 21 января 2020

Прежде всего, вы пытаетесь предсказать непрерывное значение, у вас есть два варианта сделать это, либо вы не используете сигмоид в конце вашей модели, но линейный или без активации , модель выведет одно значение. Как и предполагали другие, вы можете нормализовать свои данные, если вы знаете границы и оставляете сигмовидную.

В любом случае точность может не быть идеальной метрикой для использования в случае регрессии. Обычно это ничего не значит, MSE - достаточно хороший показатель c.

0 голосов
/ 21 января 2020

Вам необходимо нормализовать ваши данные так, чтобы они находились между 0 и 1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...