sparse 您所在的位置:网站首页 python的compile函数的loss的用法 sparse

sparse

2024-06-01 02:24| 来源: 网络整理| 查看: 265

在开发文档中有例程

import tensorflow as tf import numpy as np y_true = tf.constant([1, 2]) y_pred = tf.constant([[0.05, 0.95, 0], [0.1, 0.8, 0.1]]) loss = tf.reduce_mean(tf.keras.losses.sparse_categorical_crossentropy(y_true, y_pred)) scce = tf.keras.losses.SparseCategoricalCrossentropy() print(loss.numpy()) print(scce(y_true, y_pred).numpy())

其中有两个基准值1,2说明一共有两类且分别为第一类,第二类,又有两个预测数组[0.05, 0.95, 0], [0.1, 0.8, 0.1]。表明在预测第一个的时候,属于第一类的概率为0.05,属于第二类的概率为0.95,既不属于第一类也不属于第二类的概率为0。同理,在预测第二个的时候,属于第一类的概率为0.1,属于第二类的概率为0.8,既不属于第一类也不属于第二类的概率为0.1。 所以在使用这个函数时,需要如下组织y_true和y_pred: 假如分类时存在三类:其中y_true为:

[1, 2,1,3]

因为sparse_categorical_crossentropy接受的是离散值,且y_true出现了1,2,3 所以共三类,共四个需要预测。y_pred的组织应该如下:

[0.05, 0.95, 0,0], [0.1, 0.8, 0.1,0], [0.1, 0.8, 0.1,0], [0.1, 0.8, 0.1,0]

意思为,对于第1个预测:属于第一类,第二类,第三类的概率分别为0.05,0.95,0;不属于任何一类的概率为0。 对于第2,3,4个的预测依次类推。 其中这样的组织方式,适用于分类任务,也适用于语义分割任务。因为语义分割任务就是像素点所属类别的预测。 再比如:

y_true = tf.constant([1, 2, 3, 4]) y_pred = tf.constant([ [0.05, 0.95, 0, 0, 0], [0.1, 0.8, 0.1, 0, 0], [0.1, 0.8, 0.1, 0, 0], [0.1, 0.8, 0.1, 0, 0] })

注意,假如y_true:[1, 2, 4, 4],还是看做三类: y_pred:

[0.05, 0.95, 0,0], [0.1, 0.8, 0.1,0], [0.1, 0.8, 0.1,0], [0.1, 0.8, 0.1,0]

categorical_crossentropy与sparse_categorical_crossentropy的区别: 一般情况下:

二者y_true均需要做one-hot编码对于sparse_categorical_crossentropy好像要将y_true reshape成一维格式


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有