为啥分割模型库的预测输出(值)是(0到1)而不是(0或1)?

Posted

技术标签:

【中文标题】为啥分割模型库的预测输出(值)是(0到1)而不是(0或1)?【英文标题】:Why is the predicted output (value) from segmentation model library (0 to 1) instead of (0 or 1)?为什么分割模型库的预测输出(值)是(0到1)而不是(0或1)? 【发布时间】:2021-07-23 23:07:34 【问题描述】:

在按照tutorial 执行语义分割任务时, 我注意到模型的最终预测输出不是 0 和 1, 它由从 0.0000xxxx 到 1.0 的十进制值组成。

由于模型只接受了0和1的标签,输出中的十进制值范围是什么意思? (像素属于某一类的可能性?)

test_img = cv2.imread('data/membrane1/test/0.png', cv2.IMREAD_COLOR)    
test_img = cv2.resize(test_img, (SIZE_Y, SIZE_X))
test_img = cv2.cvtColor(test_img, cv2.COLOR_RGB2BGR)
test_img = np.expand_dims(test_img, axis=0)
prediction = model.predict(test_img)
plt.imshow(prediction_image, cmap='gray')

示例输出图像

样本输出/预测值

Youtube tutorial - 177 - Semantic segmentation made easy (using segmentation models library)Github Original Source Code

【问题讨论】:

【参考方案1】:

不确定您使用的是什么类型的模型,但很可能模型的最后一层是一个密集层,其 sigmoid 函数作为activation_function。这将为您提供介于 0 和 1 之间的值。您需要找到一个阈值并查看哪个阈值可以提供更好的结果。例如,预测给出的所有小于 0.5 的值,将它们变为 0。预测给出的值 >= 0.5,将它们变为 1。但是,需要调整此阈值以查看哪个给出更好的结果。建议您在根本没有用于训练的数据中找到这个阈值。

【讨论】:

【参考方案2】:

我从另一个 video (19.20 ~ 20.04) 的同一个 youtube 教程中发现了这一点。

预测中的值确实反映了像素与其对应类别的概率。

这里指的是当前像素是膜的概率。

【讨论】:

以上是关于为啥分割模型库的预测输出(值)是(0到1)而不是(0或1)?的主要内容,如果未能解决你的问题,请参考以下文章

python做BP神经网络,进行数据预测,训练的输入和输出值都存在负数,为啥预测值永远为正数?

语义分割损失函数

股票预测:GRU 模型预测相同的给定值而不是未来的股票价格

使用逻辑回归模型获得 1 而不是 [0;1] 的预测概率

keras sequential 预测值为啥输出后半部分为恒定值

多类分割One-hot 编码实现方式(转)