Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Keras中的神经网络预测概率总是等于1_Python_Tensorflow_Machine Learning_Keras_Neural Network - Fatal编程技术网

Python Keras中的神经网络预测概率总是等于1

Python Keras中的神经网络预测概率总是等于1,python,tensorflow,machine-learning,keras,neural-network,Python,Tensorflow,Machine Learning,Keras,Neural Network,我正在学习ML,MNIST集合上的神经网络,我有预测概率函数的问题。我想接收模型预测的概率,但当我调用函数predict_proba时,我总是接收像[0,0,1,0,0,…]这样的数组,这意味着模型总是以100%的概率进行预测 你能告诉我我的模型出了什么问题,为什么会发生这种情况,以及如何修复它吗 我的模型看起来像: #加载MNIST数据集并拆分为训练集和测试集 (列车图像,列车标签),(测试图像,测试标签)=mnist.load\u data() #重塑CNN期望的格式(批次、高度、宽度、通道

我正在学习ML,MNIST集合上的神经网络,我有预测概率函数的问题。我想接收模型预测的概率,但当我调用函数predict_proba时,我总是接收像[0,0,1,0,0,…]这样的数组,这意味着模型总是以100%的概率进行预测

你能告诉我我的模型出了什么问题,为什么会发生这种情况,以及如何修复它吗

我的模型看起来像:

#加载MNIST数据集并拆分为训练集和测试集
(列车图像,列车标签),(测试图像,测试标签)=mnist.load\u data()
#重塑CNN期望的格式(批次、高度、宽度、通道)
train_images=train_images.Reformate(train_images.shape[0],train_images.shape[1],train_images.shape[2],1).aType(
“浮动32”)
test_images=test_images.reformate(test_images.shape[0],test_images.shape[1],test_images.shape[2],1)。astype(“float32”)
#将图像从0-255规格化为0-1
列车图像/=255
测试图像/=255
#使用一个热编码来设置类
类的数量=10
列车标签=keras.utils.to\u分类(列车标签、列车类别数量)
test\u labels=keras.utils.to\u category(test\u labels,类的数量)
#创建模型,添加图层
模型=顺序()
model.add(Conv2D(32,(5,5),input_shape=(train_images.shape[1],train_images.shape[2],1),activation=“relu”))
add(MaxPooling2D(池大小=(2,2)))
添加(Conv2D(32,(3,3),activation=“relu”))
add(MaxPooling2D(池大小=(2,2)))
模型。添加(辍学率(0.5))
model.add(展平())
添加(密集(128,activation=“relu”))
模型。添加(辍学率(0.5))
model.add(密集(类的数量,activation=“softmax”))
#编译模型
compile(loss=“categorical\u crossentropy”,optimizer=Adam(),metrics=[“accurity”])
#学习模型
model.fit(序列图像、序列标签、验证数据=(测试图像、测试标签)、年代=7、批次大小=200)
#试验获得的模型
分数=模型。评估(测试图像、测试标签、详细度=0)
打印(“模型损失={}”。格式(分数[0]))
打印(“模型精度={}”。格式(分数[1]))
#保存模型
model\u filename=“cnn\u model.h5”
model.save(model\u文件名)
打印(“CNN模型保存在文件:{}”。格式(模型\文件名))
对于加载图像,我使用PIL和NP。 我使用keras中的save函数保存模型,并使用keras.models中的load_model将其加载到另一个脚本中,然后我只需调用

def load_image_for_cnn(文件名):
img=Image.open(filename.convert(“L”)
img=np.resize(img,(28,28,1))
im2arr=np.数组(img)
返回im2arr.整形(1,28,28,1)
def加载模式(自):
返回负荷模型(“cnn模型h5”)
def预测概率(自我、图像):
返回自我。模型。预测概率(图像)[0]
使用它看起来像:

predictor.predict_概率(predictor.load_image_for_cnn(文件名))

查看代码的这一部分:

# Normalize images from 0-255 to 0-1
train_images /= 255
test_images /= 255
加载新图像时,您没有执行此操作:

def load_image_for_cnn(filename):
    img = Image.open(filename).convert("L")
    img = np.resize(img, (28, 28, 1))
    im2arr = np.array(img)
    return im2arr.reshape(1, 28, 28, 1)
应用与训练集相同的标准化是测试任何新图像的要求,如果不这样做,就会得到奇怪的结果。您只需按如下方式规范化图像像素:

def load_image_for_cnn(filename):
    img = Image.open(filename).convert("L")
    img = np.resize(img, (28, 28, 1))
    im2arr = np.array(img)
    im2arr = im2arr / 255.0
    return im2arr.reshape(1, 28, 28, 1)

查看代码的这一部分:

# Normalize images from 0-255 to 0-1
train_images /= 255
test_images /= 255
加载新图像时,您没有执行此操作:

def load_image_for_cnn(filename):
    img = Image.open(filename).convert("L")
    img = np.resize(img, (28, 28, 1))
    im2arr = np.array(img)
    return im2arr.reshape(1, 28, 28, 1)
应用与训练集相同的标准化是测试任何新图像的要求,如果不这样做,就会得到奇怪的结果。您只需按如下方式规范化图像像素:

def load_image_for_cnn(filename):
    img = Image.open(filename).convert("L")
    img = np.resize(img, (28, 28, 1))
    im2arr = np.array(img)
    im2arr = im2arr / 255.0
    return im2arr.reshape(1, 28, 28, 1)

预测概率的电话在哪里?它不在你包含的代码中。请将其包含在您的问题中。我忘记了,补充道。这不仅仅是一行,告诉我们图像是如何加载的,这非常重要。我曾写道,我正在使用keras.models中的load_model函数,但我添加了它的外观(保存和加载)。我正在讨论如何加载和传递输入图像以预测_proba,不是模型的加载方式。预测概率的调用在哪里?它不在你包含的代码中。请将其包含在您的问题中。我忘记了,补充道。这不仅仅是一行,告诉我们图像是如何加载的,这非常重要。我曾写道,我正在使用keras.models中的load_model函数,但我添加了它的外观(保存和加载)。我正在讨论如何加载和传递输入图像以预测_proba,而不是如何加载模型。