为啥分割模型库的预测输出(值)是(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神经网络,进行数据预测,训练的输入和输出值都存在负数,为啥预测值永远为正数?