2017-01-17 1 views
0

Я запускаю свой набор упражнений 30k на библиотеке python Keras для нейронной сети (модель «последовательный»).Получение 0 или 1 как значений вероятности в нейронной сети Последовательная модель Keras

Когда я устанавливаю модель и вычисляет вероятности на тестовом наборе (size = 13k), тогда я получаю только 0 или 1. В то время как я должен получить некоторые дробные значения, такие как 0,62, 0,42, 0,31 и т. Д.

Я пробовал использовать class_weight и настраивал его на «авто» или «сбалансированный», но я не смог решить эту проблему.

Выход не является целым типом, его тип с плавающей точкой.

Ниже приведен код

from keras.models import Sequential 
from keras.layers import Dense 
import numpy as np 
seed = 8 
np.random.seed(seed) 

model = Sequential() 
model.add(Dense(9, input_dim=8, init='uniform', activation='relu')) 
model.add(Dense(5, init='uniform', activation='relu')) 
model.add(Dense(1, init='uniform', activation='sigmoid')) 

from keras.optimizers import SGD 
model.compile(loss='binary_crossentropy', optimizer=SGD(lr=0.01, momentum=0.9, nesterov=True), metrics=['accuracy']) 

trainx = X_train.as_matrix() 
trainy = y_train.as_matrix() 

import time as time 
start = time.time() 
model.fit(trainx, trainy, nb_epoch=10, batch_size=10, verbose = 2, class_weight ='auto') 
print (time.time() - start) 

X_test = X_test.as_matrix() 
y_test = y_test.as_matrix() 

proba = model.predict_proba(X_test, batch_size=10) 

И значения PROBA все 0s. Данные имеют только 2% случаев неплатежеспособности, поэтому его несбалансированный класс.

+3

Не могли бы вы показать нам свой код здесь, мы можем помочь вам лучше. – Arman

+1

Начните с изучения ввода конечного слоя. Softmax может давать одноразовый выход, если веса имеют большую величину. –

+0

Вместо этого вы пытаетесь использовать 'model.predict()'? Также было бы полезно, если бы вы могли дать нам образец набора данных, поскольку иногда проблема там (например, проблема нормализации) –

ответ

1

Звучит ужасно, как будто вы можете получить целочисленный доход, который может быть только 1 или 0, а не возврат поплавка. Таким образом, вы можете попытаться выяснить, находится ли в вашем коде int, превращая его в целое число, или вам может понадобиться превратить его в float. Невозможно сказать, не больше контекста ...

0

Может быть, я ошибаюсь, но я никогда не видел этот аргумент, чтобы соответствовать до сих пор:

class_weight ='auto' 

Я хотел бы попробовать вместо

class_weight = {0: 1., 1: 50.} 

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

Смежные вопросы