在神经网络Keras序列模型中获得0或1作为概率值

时间:2017-01-17 13:58:14

标签: python neural-network keras sequential

我在python库Keras上运行我的训练集30k用于神经网络(模型"顺序")。

当我拟合模型并计算测试集上的概率(大小= 13k)时,我只得到0或1。而我应该得到一些小数值,如0.62,0.42,0.31等。

我尝试使用class_weight并将其设置为' auto'或者平衡'但我无法解决这个问题。

输出不是整数类型,仅为浮点类型。

以下是代码

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的值都是0。 数据只有2%的违约案例,因此其不平衡的类别。

2 个答案:

答案 0 :(得分:1)

听起来很糟糕,你可能会得到一个整数返回值,它只能是1或0,而不是浮点数返回。因此,您可以尝试查看代码中是否int将其转换为整数,或者您可能需要将其转换为某个地方的float。没有更多背景就无法分辨......

答案 1 :(得分:1)

也许我错了,但到目前为止我从未见过这个论点:

 class_weight ='auto'

我会尝试改为

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

确实,您的问题似乎来自不平衡的数据集。