如何获得Keras中的分类概率?

如何获得Keras中的分类概率?,keras,classification,conv-neural-network,predict,softmax,Keras,Classification,Conv Neural Network,Predict,Softmax,我试图从经过训练的Keras模型中获得分类概率,但当我使用model.predict(或model.predict_proba)方法时,我得到的只是以下形式的数组: 数组([[0,0,0,0,0,0,0,0,0,1,0,0,0.]),dtype=float32) 所以基本上我得到一个热编码的浮点数组。“1”基本上在正确的位置,因此培训似乎效果良好。但是为什么我不能得到概率呢?请参阅所用架构的代码 首先,我读入了数据: mnist\u train=pd.read\u csv('data/mnist

我试图从经过训练的Keras模型中获得分类概率,但当我使用model.predict(或model.predict_proba)方法时,我得到的只是以下形式的数组: 数组([[0,0,0,0,0,0,0,0,0,1,0,0,0.]),dtype=float32)

所以基本上我得到一个热编码的浮点数组。“1”基本上在正确的位置,因此培训似乎效果良好。但是为什么我不能得到概率呢?请参阅所用架构的代码

首先,我读入了数据:

mnist\u train=pd.read\u csv('data/mnist\u train.csv'))
mnist\u test=pd.read\u csv('data/mnist\u test.csv'))
mnist_train_images=mnist_train.iloc[:,1:]值
mnist\u train\u labels=mnist\u train.iloc[:,:1]。值
mnist_test_images=mnist_test.iloc[:,1:]值
mnist_test_labels=mnist_test.iloc[:,:1]。值
mnist\u train\u images=mnist\u train\u images.astype('float32'))
mnist\u test\u images=mnist\u test\u images.astype('float32'))
mnist\u列车图像/=255
mnist_测试_图像/=255
mnist\u train\u labels=keras.utils.to\u category(mnist\u train\u labels,10)
mnist_test_labels=keras.utils.to_category(mnist_test_labels,10)
mnist_train_images=mnist_train_images.重塑(60000,28,28,1)
mnist_test_images=mnist_test_images.重塑(10000,28,28,1)
然后我建立我的模型并训练:

num\u classes=mnist\u test\u标签。形状[1]
模型=顺序()
添加(Conv2D(64,(5,5),input_shape=(28,28,1),activation='relu',data_format=“channels\u last”,padding=“same”))
添加(Conv2D(64,(5,5),input_shape=(28,28,1),activation='relu',data_format=“channels\u last”,padding=“same”))
add(MaxPooling2D(池大小=(2,2)))
添加(Conv2D(128,(3,3),activation='relu',data\u format=“channels\u last”,padding=“same”))
添加(Conv2D(128,(3,3),activation='relu',data\u format=“channels\u last”,padding=“same”))
add(MaxPooling2D(池大小=(2,2)))
模型。添加(辍学(0.2))
model.add(展平())
添加(密集(128,activation='relu'))
添加(密集(num_类,activation='softmax'))
compile(loss='classifical_crossentropy',optimizer='adam',metrics=['accurity'])
model.fit(mnist\u train\u图像,mnist\u train\u标签,验证数据=(mnist\u test\u图像,mnist\u test\u标签),历元=20,批量大小=256,详细度=2)
分数=模型。评估(mnist\U测试图像,mnist\U测试标签,详细=0)
打印(“CNN错误:%.2f%%”%(100分[1]*100))
model.save('mnist-weights.model'))
模型.保存权重(“mnist模型.h5”)
model_json=model.to_json()
打开(“mnist model.json”、“w”)作为json\u文件:
json_file.write(model_json)
但是,当我在另一个应用程序中加载该模型并尝试预测这样的概率时,就会出现所描述的错误。我做错了什么

json\u file=open('alphabet\u keras/mnist\u model.json','r')
model_json=json_file.read()
model=model_from_json(model_json)
型号。负载重量(“字母表/mnist型号h5”)
字母=cv2.CVT颜色(某些颜色,cv2.COLOR\u bgr2灰色)
字母=fitSquare(字母,28,2)#专有功能,无所谓
字母\u展开=np。展开\u dims(字母,轴=0)
字母\u展开=np。展开\u dims(字母\u展开,轴=3)
模型.预测概率(字母扩展)#[0]
结果如下: 数组([[0,0,0,0,0,0,0,0,0,1,0,0,0.]),dtype=float32)

我预计会出现以下情况: 数组([[0.1,0.34,0.2,0.8,0.1,0.62,0.67,1.0,0.31,0.59]],dtype=float32)


没有任何类型的错误消息。请帮助:)

您的预期输出不正确,因为分类神经网络的输出是标签上的概率分布,这意味着概率介于0和1之间,并且它们的总和为1.0。显示的值总和大于1.0


关于您的具体问题,看起来概率是饱和的,这是因为您没有用训练集和测试集除以255来规范化像素值,这种不一致性将使输出神经元饱和。

在规范化我的推理数据后,它工作了,谢谢!(我知道我提供的预期输出是不可能的,我只是键入了一些介于0和1之间的值