打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
【tensorflow】tf.nn.sigmoid
userphoto

2022.06.13 北京

关注

该函数主要试用于每一个类别都是相不排斥的分类任务,即一个实例(instance)可以划分为到多个类别,比如图像中有一匹马,他即可以是是马这个标签,也可以是动物这个标签。

以下是代码示例,前面是分解的代码,后面with tf.session是一步到位代码,两者的输出相同

import numpy as npimport tensorflow as tfdef sigmoid(x):return 1.0/(1+np.exp(-x))labels=np.array([[1.,0.,0.],[0.,1.,0.],[0.,0.,1.]])logits=np.array([[-1.,8.,2.],[-3.,14.,1.],[1.,2.,4.]])y_pred=sigmoid(logits)prb_error1 = -labels*np.log(y_pred)  #计算分类结果在正确类别处的损失,prb_error2 = -(1-labels)*np.log(1-y_pred)prob_error1= prb_error1 + prb_error2  #属于该类的损失+其他类的损失print(prob_error1)with tf.Session() as sess:print(sess.run(tf.nn.sigmoid_cross_entropy_with_logits(labels=labels,logits=logits)))

label是one-hot的形式,有三行,表示有三个instance,1对应的位置表示每个instance真实的类别,即分别为类1,类2,类3。

Logits是网络预测的结果。

1、首先y_pred= sigmoid (logits) 函数将网络的输出映射为概率,如输出结果如下

可以看到对于第一个实例,因为其第二类预测结果logits为8,其余分别为-1和2,因此属于第二类的概率就最大,为0.999665;同理第二个实例的第二类预测结果logits为14,因此概率也最大,为0.9999;第三个实例预测为第三类的概率最大为0.982。

2、下面就是要计算sigmoid的交叉熵损失了,由两部分组成。

(1)首先来看第一部分,计算公式为:prb_error1 = labels* - np.log(y_pred) 

我们都知道- np.log(y_pred)  就是交叉熵中的log计算部分,计算出来是个矩阵。Labels也是一个矩阵,这两个矩阵的大小都为(2,3),用*号就是对应的元素相乘,就得到了预测结果对应正确类别处的损失,如下。可以看出,由于第二个实例和第三个实例预测的结果是正确的,因此他们的损失就很小,而第一个实例预测为第二个类别的概率最大(它实际是第一个类别),因此损失就很大。

(2) 再来看第二部分,计算公式为-(1-labels)*np.log(1-y_pred)。这个就是计算预测结果在错误类别处的损失,当预测结果在错误类别处的概率较大时,就说明错误的可能性就大,因此损失就大。所以我们在计算-log时,带入的值是(1-p),p越大,1-p越小,-log(1-p)的值就越大,损失就越大。

(3)最后将两部分加起来,就是总的损失:

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Tensorflow的采样方法:candidate sampling(zhuan)
TensorFlow四种Cross Entropy算法实现和应用
Tensorflow Python API 翻译(nn)
重磅!Tensorflow 2.0 即将入场
汐月教育之理解TensorFlow(二)基础理解
《炼数成金》.第七课 递归神经网络LSTM的讲解,以及LSTM网络的使用学习笔记
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服