- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在学习 ML、MNIST 集上的神经网络,但我对 Predict_proba 函数有疑问。我想接收模型做出的预测的概率,但是当我调用函数 Predict_proba 时,我总是收到像 [0, 0, 1., 0, 0, ...] 这样的数组,这意味着模型总是以 100% 的概率进行预测。
您能告诉我我的模型出了什么问题吗?为什么会发生这种情况以及如何解决?
我的模型看起来像:
# Load MNIST data set and split to train and test sets
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()
# Reshaping to format which CNN expects (batch, height, width, channels)
train_images = train_images.reshape(train_images.shape[0], train_images.shape[1], train_images.shape[2], 1).astype(
"float32")
test_images = test_images.reshape(test_images.shape[0], test_images.shape[1], test_images.shape[2], 1).astype("float32")
# Normalize images from 0-255 to 0-1
train_images /= 255
test_images /= 255
# Use one hot encode to set classes
number_of_classes = 10
train_labels = keras.utils.to_categorical(train_labels, number_of_classes)
test_labels = keras.utils.to_categorical(test_labels, number_of_classes)
# Create model, add layers
model = Sequential()
model.add(Conv2D(32, (5, 5), input_shape=(train_images.shape[1], train_images.shape[2], 1), activation="relu"))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(32, (3, 3), activation="relu"))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.5))
model.add(Flatten())
model.add(Dense(128, activation="relu"))
model.add(Dropout(0.5))
model.add(Dense(number_of_classes, activation="softmax"))
# Compile model
model.compile(loss="categorical_crossentropy", optimizer=Adam(), metrics=["accuracy"])
# Learn model
model.fit(train_images, train_labels, validation_data=(test_images, test_labels), epochs=7, batch_size=200)
# Test obtained model
score = model.evaluate(test_images, test_labels, verbose=0)
print("Model loss = {}".format(score[0]))
print("Model accuracy = {}".format(score[1]))
# Save model
model_filename = "cnn_model.h5"
model.save(model_filename)
print("CNN model saved in file: {}".format(model_filename))
为了加载图像,我使用 PIL 和 NP。我使用 keras 中的 save 函数保存模型,并使用 keras.models 中的 load_model 将其加载到另一个脚本中,然后我只需调用
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_cnn_model(self):
return load_model("cnn_model.h5")
def predict_probability(self, image):
return self.model.predict_proba(image)[0]
使用它看起来像:
predictor.predict_probability(predictor.load_image_for_cnn(filename))
最佳答案
看看你的代码的这一部分:
# 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)
关于python - Keras Predict_proba 中的神经网络始终返回等于 1 的概率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56550889/
假设我的标记数据有两个类 1 和 0。当我在测试集上运行 Predict_proba 时,它返回一个包含两列的数组。哪一列对应哪个类? 最佳答案 第 0 列对应于类 0,第 1 列对应于类 1。 关于
只是一个简单的问题,如果我想将对象分类为 0 或 1,但我希望模型返回一个“可能性”概率,例如,如果一个对象是 0.7,这意味着它有 0.7 的机会进入第 1 类,我是做回归还是坚持使用分类器并使用
我想通过交叉验证从逻辑回归模型预测概率。我知道您可以获得交叉验证分数,但是否可以从 predict_proba 返回值而不是分数? # imports from sklearn.linear_mode
我在我的数据集上训练了一个 RandomForestClassifier,可以从文本正文中预测 8 个不同的主题。对于给定示例,数据集如下所示 X_train = [[0,0,0,0,0,1,0,0,
我正在使用 Python 的 sklearn 对文本进行分类。 我调用函数 predict_proba,它看起来像这样: [[ 6.74918834e-53 1.59981248e-51 2
我正在使用 scikit-learn 通过逻辑回归来实现分类。使用 predict() 函数预测类标签,而使用 predict_proba() 函数打印预测概率。 下面粘贴了代码片段: # Parti
我正在处理一个多类、高度不平衡的分类问题。我使用随机森林作为基础分类器。 我必须在考虑多个标准(指标:精度、召回 conf_matrix、roc_auc)的情况下给出模型性能报告。 模型火车: rf
我使用 Scikit-learn 和 XGBoost 在同一数据上训练了 2 个梯度提升模型。 Scikit-learn 模型 GradientBoostingClassifier( n_es
scikit-learn 的 DecisionTreeClassifier 支持通过 predict_proba() 函数预测每个类的概率。 DecisionTreeRegressor 中不存在这一点
所以我使用 sci-kit learns RandomForestClassifier 将天文来源的数据分为三类。为了让我的问题更简单,我在测试集中仅使用了两个来源,并获得了 predict_prob
我正在使用 sklearn 库来训练和测试我的数据。 targetDataCsv = pd.read_csv("target.csv","rt")) testNormalizedCsv = csv.
我试图通过调用 Keras 模型的 predict_proba() 生成类(class)分数,但似乎没有这个函数!它是否因为我在谷歌中看到一些例子而被弃用?我正在使用 Keras 2.2.2。 最佳答
运行Python 3.7.3 我制作了一个简单的 GMM 并将其拟合到一些数据。使用predict_proba方法,返回的是1和0,而不是属于每个高斯的输入的概率。 我最初在更大的数据集上尝试过这个,
在docs , predict_proba(self, x, batch_size=32, verbose=1) 是 Generates class probability predictions f
我正在尝试使用LinearSVC 分类器 更新:添加了导入 import nltk from nltk.tokenize import word_tokenize from nltk.classify
这是来自 How to know what classes are represented in return array from predict_proba in Scikit-learn 的后续
我有许多类和对应的特征向量,当我运行 predict_proba() 时,我会得到这个: classes = ['one','two','three','one','three'] feature =
我正在尝试了解如何 sklearn's MLP Classifier检索其 predict_proba 函数的结果。 该网站仅列出: Probability estimates 还有很多其他的,例如
predict_proba 返回神经网络中的误差 我在这个链接上看到了例子 https://machinelearningmastery.com/how-to-make-classification-
我训练了一个简单的随机森林分类器,然后当我使用相同的测试输入测试预测时: rf_clf.predict([[50,0,500,0,20,0,250000,1.5,110,0,0,2]]) rf_clf
我是一名优秀的程序员,十分优秀!