【Python-Tensorflow】tf.nn.softmax_cross_entropy_with_logits_v2()解析与使用
1 参数解析
tf.nn.softmax_cross_entropy_with_logits_v2(labels, logits)
第一个参数是实际的标签,label的含义就是一个分类标签,所不同的是,这个label是分类的概率,比如说[0.2,0.3,0.5],labels的每一行必须是一个概率分布(即概率之合加起来为1)。
第二个参数是它可以是其他分类器(如逻辑回归等、SVM等)最后一层神经网络的输出。它的值域范围[-inf,+inf](即正负无穷区间)。我们可以把logist理解为原生态的、未经缩放的,可视为一种未归一化的l“概率替代物”,如[4, 1, -2]。
2 作用
作用是: 计算label和logits之间的softmax交叉熵
这一个函数包括了三个步骤,分别是
(1)对网络最后一层的输出做一个softmax,即是将softmax应用于logit(y_hat)以便对其进行归一化
y_hat_softmax = softmax(y_hat)
(2)softmax的输出向量和样本的实际标签做一个交叉熵
y_cross = y_true_label * tf.log(y_hat_softmax)
(3)求实例的不同类的总和(注意前面有个负号)
-tf.reduce_sum(y_cross,reduction_indices = [1])
3 代码实现
分别拆分为三个步骤去实现和是直接使用该函数对比一下
y_true_label = tf.convert_to_tensor(np.array([[0.0, 1.0, 0.0],[0.0, 0.0, 1.0]]))
y_hat = tf.convert_to_tensor(np.array([[0.5, 1.5, 0.1],[2.2, 1.3, 1.7]]))
# 第一步
y_hat_softmax = tf.nn.softmax(y_hat)
# 第二步
y_cross = y_true_label * tf.log(y_hat_softmax)
# 第三步
result = - tf.reduce_sum(y_cross, 1)
# 使用 tf.nn.softmax_cross_entropy_with_logits_v2
result_tf = tf.nn.softmax_cross_entropy_with_logits_v2(labels = y_true_label, logits = y_hat)
with tf.Session() as sess:
sess.run(result)
sess.run(result_tf)
print('y_hat_softmax:\n{0}\n'.format(y_hat_softmax.eval()))
print('y_true_label: \n{0}\n'.format(y_true_label.eval()))
print('y_cross: \n{0}\n'.format(y_cross.eval()))
print('result: \n{0}\n'.format(result.eval()))
print('result_tf: \n{0}'.format(result_tf.eval()))
输出结果如下,对比可以看到输出结果一样
y_hat_softmax:
[[0.227863 0.61939586 0.15274114]
[0.49674623 0.20196195 0.30129182]]
y_true_label:
[[0. 1. 0.]
[0. 0. 1.]]
y_cross:
[[-0. -0.4790107 -0. ]
[-0. -0. -1.19967598]]
result:
[0.4790107 1.19967598]
result_tf:
[0.4790107 1.19967598]
相关文章
- Python面试基础知识_python自学需要哪些基础知识
- python中字符转换
- 踩坑容易躲坑难!写在你开始学Python之前,帮你顺利入门
- 使用Python和OCR进行文档解析的完整代码演示(附代码)
- python 删除文件中的空行
- 简述python变量的命名规则_Python 变量命名规则
- python监控网站更新_Python 通过网站search功能监控网站内容更新[通俗易懂]
- python常见运维脚本_Python运维常用脚本[通俗易懂]
- python中os.getcwd的作用_python中getitem是什么意思
- python chr()和ord()_Python函数ord
- python在线代码编辑器-5种最佳Python IDE和代码编辑器
- python表情代码_Python实现表情包的代码实例[通俗易懂]
- Python编程 pip换源
- python 变量锁_python字符串前面加b
- python win32api sendmessage_Python win32api.SendMessage方法代码示例[通俗易懂]
- 超级干货:手把手教你如何写Python脚本并且在网络设备上执行,举一反三!
- python图形界面多线程关闭问题
- 【Android 逆向】使用 Python 解析 ELF 文件 ( Capstone 反汇编 ELF 文件中的机器码数据 | 创建反汇编解析器实例对象 | 设置汇编解析器显示细节 )
- Python 小型项目大全 6~10
- python-Python与SQLite数据库-处理SQLite查询结果(二)
- Python 进程线程协程 GIL 闭包 与高阶函数(五)详解编程语言
- python工具——jieba详解编程语言
- Python open()打开文件
- Linux查看Python版本的有效方法(linux查看python版本)
- python驱动使用pip安装MySQL Python驱动的简单步骤(pip安装mysql)
- Linux下从系统卸载Python(linux下卸载python)
- python解析模块(ConfigParser)使用方法
- python网络编程学习笔记(七):HTML和XHTML解析(HTMLParser、BeautifulSoup)
- Python读取环境变量的方法和自定义类分享
- 跟老齐学Python之数据类型总结