sparse | 您所在的位置:网站首页 › python的compile函数的loss的用法 › sparse |
在开发文档中有例程 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 实验室设备网 版权所有 |