Python 神经网络Keras序列模型中概率值取0或1
我正在python库Keras上为神经网络(模型“顺序”)运行30k的训练集 当我拟合模型并计算测试集(大小=13k)上的概率时,我得到的结果仅为0或1。而我应该得到一些分数,比如0.62,0.42,0.31等等 我尝试使用class_weight并将其设置为“自动”或“平衡”,但我无法解决此问题 输出不是整数类型,仅为浮点类型 下面是代码Python 神经网络Keras序列模型中概率值取0或1,python,neural-network,keras,sequential,Python,Neural Network,Keras,Sequential,我正在python库Keras上为神经网络(模型“顺序”)运行30k的训练集 当我拟合模型并计算测试集(大小=13k)上的概率时,我得到的结果仅为0或1。而我应该得到一些分数,比如0.62,0.42,0.31等等 我尝试使用class_weight并将其设置为“自动”或“平衡”,但我无法解决此问题 输出不是整数类型,仅为浮点类型 下面是代码 from keras.models import Sequential from keras.layers import Dense import nump
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%的默认值大小写,因此它的类是不平衡的。听起来很像您可能得到的是一个整数返回,它只能是1或0,而不是浮点返回。因此,您可以尝试查看
int
是否在代码中的任何位置将其转换为整数,或者您可能需要将其转换为float
的某个位置。如果没有更多的上下文,就不可能说…也许我错了,但到目前为止,我从来没有看到过这个论点是合适的:
class_weight ='auto'
我会试试看
class_weight = {0: 1., 1: 50.}
事实上,您的问题似乎来自不平衡的数据集。请在此处显示您的代码,我们可以帮助您更好地解决问题。请从检查最后一层的输入开始。如果权重较大,Softmax可以产生一个类似热的输出。您是否尝试使用
model.predict()
?此外,如果您能给我们提供数据集的样本,也会很有帮助,因为有时问题存在(例如,标准化问题),在明确取出数据集后,会因为添加紧急乞讨而被否决。请不要试图将自己的截止日期转移给志愿者,这是不礼貌的。如果您只是无意中覆盖了对问题的编辑,请在编辑之前始终刷新页面,以便保留志愿者编辑所做的任何修改。您的模型的准确性如何?它会不会太过拟合以至于总是采用二进制结果?