Обычно / нормально для tf.keras.model.predect () генерировать значение вне диапазона данных? - PullRequest
0 голосов
/ 01 мая 2020

Это нормально для tf.keras.model.predect () для генерации значения за пределами заданного диапазона данных?

Я получаю отрицательное значение от model.predict (). Данные из столбца прогнозирования цели, используемые в модели, состояли только из 1 или 0. Я ожидал, что model.predict () сгенерирует значение от 0 до 1.

Когда я помещаю новые подобные данные в model.predict, чтобы попытаться получить классификацию, я часто получаю значение меньше чем 0 или больше 1. Должен ли я считать, что это означает, что все значения, превышающие .5, с большей вероятностью будут равны 1, а чем выше значение, тем вероятнее, что оно будет 1?

epoch_count = 1    
model = tf.keras.Sequential([
  feature_layer,
  layers.Dense(128, activation='relu'),
  layers.Dense(128, activation='relu'),
  layers.Dense(1)
])

model.compile(optimizer='adam',
              loss=tf.keras.losses.BinaryCrossentropy(from_logits=True),
              metrics=['accuracy'])

model.fit(train_ds,
          validation_data=val_ds,
          epochs=epoch_count)

Ответы [ 2 ]

5 голосов
/ 01 мая 2020

Вы в замешательстве, потому что ваша модель на самом деле выводит логиты, а не вероятности (в диапазоне [0, 1]).

Поскольку вы используете tf.keras.losses.BinaryCrossentropy(from_logits=True) в качестве потери, вы настроили ее для приема логитов ( это то, что делает from_logits=True), что означает, что внутри потери применяется активация sigmoid.

После тренировки, если вы хотите иметь выходы в диапазоне [0, 1], вы должны применить sigmoid активация. Вы можете сделать это следующим образом:

model.add(Activation('sigmoid'))

После этого, как только вы predict на модели, вы получите [0, 1] значения.

0 голосов
/ 01 мая 2020

Да, это может произойти, когда у вас есть изменения в ваших данных. Т.е., если ваши входные данные имеют сдвиг распределения, вы часто можете получать значения в разных направлениях. Если вы хотите убедиться, что вы можете получить вероятности вместо значений, добавьте функцию softmax. Это ограничит ваши выходы между 0 и 1.

keras.activations.softmax(x, axis=-1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...