在做seq2seq的时候,经常需要使用sequence_loss这是损失函数。

现在分析一下sequence_loss这个函数到底在做什么

# coding: utf-8
import numpy as np
import tensorflow as tf
from tensorflow.contrib.seq2seq import sequence_loss logits_np = np.array([
[[1.0, 2.0], [1.0, 2.0]],
[[1.0, 2.0], [1.0, 2.0]]
]) targets_np = np.array([
[0,1],
[1,1]
], dtype=np.int32) logits = tf.convert_to_tensor(logits_np)
targets = tf.convert_to_tensor(targets_np)
cost = sequence_loss(logits=logits,
targets=targets,
weights=tf.ones_like(targets, dtype=tf.float64))
init = tf.global_variables_initializer()
with tf.Session() as sess:
sess.run(init)
r = sess.run(cost)
print(r) # sequence_loss的结果是0.563261687518082

求loss值

\[logits=\left[\begin{matrix} [1.0, 2.0] & [1.0, 2.0] \cr [1.0, 2.0] & [1.0, 2.0]\end{matrix}\right]
\]

\[target=\left[\begin{matrix} 0.0 & 1.0 \cr 1.0 & 1.0 \end{matrix}\right]
\]

\[cost=sequence\_loss( logits=logits,targets=targets,weights=tf.ones_like(targets, dtype=tf.float64))
\]

sequence_loss的求值过程

1.softmax求值

2.交叉熵选择

3.求平均值

1.softmax

将得分或者概率fi,统一转化到0到1之间,就是计算权重占比(归一化处理)

但是在计算权重的时候,分数都通过自然数e映射转换,目的是,让大的分数更大,让小的分数更小,增加区分度

\[f_i(z)=-log( \frac{ e^{f_i} }{ \sum{e^{f_j} }} )
\]

其输入值是一个向量,向量中元素为任意实数的得分值

输出一个向量,其中每个元素值在0到1之间,且所有元素之和为1(计算每个得分在总分中的占比。这里通过指数映射了一下 )

\[f_i(z)=-log( \frac{ e^{f_i} }{ \sum{e^{f_j} }} )
\]

logits = [

[[1.0, 2.0], [1.0, 2.0]],

[[1.0, 2.0], [1.0, 2.0]]

]

\[softmax=\left[\begin{matrix} [ \frac{ e^{1.0} }{ e^{1.0}+e^{2.0}} , \frac{ e^{2.0} }{ e^{1.0}+e^{2.0}}] & [\frac{ e^{1.0} }{ e^{1.0}+e^{2.0}},\frac{ e^{2.0} }{ e^{1.0}+e^{2.0}}] \cr [\frac{ e^{1.0} }{ e^{1.0}+e^{2.0}},\frac{ e^{2.0} }{ e^{1.0}+e^{2.0}}] & [\frac{ e^{1.0} }{ e^{1.0}+e^{2.0}},\frac{ e^{2.0} }{ e^{1.0}+e^{2.0}}]\end{matrix}\right]
\]

2求交叉熵

targets = [

[0,1],

[1,1]

]

根据targets, 确定选取哪个值。

\[crross\_softmax=\left[\begin{matrix} -log(\frac{ e^{1.0} }{ e^{1.0}+e^{2.0}}) & -log(\frac{ e^{2.0} }{ e^{1.0}+e^{2.0}}) \cr -log(\frac{ e^{2.0} }{ e^{1.0}+e^{2.0}}) & -log(\frac{ e^{2.0} }{ e^{1.0}+e^{2.0}}\end{matrix}) \right]
\]

再求平均值
loss1=(-log(2.718/(2.718+7.387))+(-log(7.387/(2.718+7.387))))/2
loss2=(-log(7.387/(2.718+7.387))+(-log(7.387/(2.718+7.387))))/2
loss=(loss1+loss2)/2
loss=0.563

sequence_loss的解释的更多相关文章

  1. ZIP压缩算法详细分析及解压实例解释

    最近自己实现了一个ZIP压缩数据的解压程序,觉得有必要把ZIP压缩格式进行一下详细总结,数据压缩是一门通信原理和计算机科学都会涉及到的学科,在通信原理中,一般称为信源编码,在计算机科学里,一般称为数据 ...

  2. 说说BPM数据表和日志表中几个状态字段的详细解释

    有个客户说需要根据这些字段的值作为判断条件做一些定制化需求,所以需要知道这些字段的名词解释,以及里面存储的值具体代表什么意思 我只好为你们整理奉上这些了! Open Work Sheet  0 Sav ...

  3. 【完全开源】知乎日报UWP版:项目结构说明、关键源代码解释

    目录 说明 项目结构 关键代码 演示视频 说明 上一篇博客将源码放出来了,但是并没有做过多的介绍,所以如果自己硬看可能需要花费很长的时间,尤其这些代码并不是自己写的.项目不算复杂但是也不算简单,这篇文 ...

  4. nodejs、npm、grunt——名词解释

    最近着手开发一个新项目,打算从工程化的角度整理一套自己的前端开发.发布体系. grunt这些工具,之前别人用我也用,并没有认真想过它们的前世今生,正好趁着这个机会,我来理一理目前业界比较流行这些工具的 ...

  5. HTTP各状态码解释

      状态码 含义 100 客户端应当继续发送请求.这个临时响应是用来通知客户端它的部分请求已经被服务器接收,且仍未被拒绝.客户端应当继续发送请求的剩余部分,或者如果请求已经完成,忽略这个响应.服务器必 ...

  6. JavaScript中‘this’关键词的优雅解释

    本文转载自:众成翻译 译者:MinweiShen 链接:http://www.zcfy.cc/article/901 原文:https://rainsoft.io/gentle-explanation ...

  7. XML简介与CDATA解释

    简介XML 是一种受到广泛支持的 Internet 标准,用于以一种特殊的方式编码结构化数据.实际上,以 XML 编码的数据可以通过任何编程语言解码,人们甚至可以使用标准的文本编辑器来阅读或编写 XM ...

  8. free-简单明了解释清楚怎么看内存使用

    free命令可以用来查看系统内存使用情况.我一般习惯-m参数以MB的方式查看 [root@localhost ~]# free -m total used free shared buffers ca ...

  9. .htaccess语法之RewriteCond与RewriteRule指令格式详细解释

    htaccess语法之RewriteCond与RewriteRule指令格式详细解释 (2012-11-09 18:09:08) 转载▼ 标签:  htaccess it 分类: 网络 上文htacc ...

随机推荐

  1. 西门子软件sinutrain-for-sinumerik-operate-v4.8安装报错的处理

       西门子软件sinutrain-for-sinumerik-operate-v4.8安装报错的处理 安装时报错提示: 原因: 可能缺少某些文件 处理: 安装 海康ivms-4200后,可直接安装西 ...

  2. dotnetcore下解压zip文件,解决中文文件名乱码问题

    (迄今为止网上那些说的用Encoding.Default解决中文文件名乱码的都不能真正解决问题!) 1.在程序开始处 Encoding.RegisterProvider(CodePagesEncodi ...

  3. 清北学堂-DAY2-数论专题-中国剩余定理(CRT)

    首先请看定义:(百科上抄下来的)孙子定理是中国古代求解一次同余式组(见同余)的方法.是数论中一个重要定理.又称中国余数定理. 一元线性同余方程组问题最早可见于中国南北朝时期(公元5世纪)的数学著作&l ...

  4. 漏洞预警 | ThinkPHP 5.x远程命令执行漏洞

    ThinkPHP采用面向对象的开发结构和MVC模式,融合了Struts的思想和TagLib(标签库).RoR的ORM映射和ActiveRecord模式,是一款兼容性高.部署简单的轻量级国产PHP开发框 ...

  5. bootstrap实现Carousel旋转木马(焦点图)

    引入bootstrap相关文件后,在html中写如下代码: <div class="col-lg-9" > <!-- Carousel============== ...

  6. JAVA基于PDF box将PDF转为图片

    在一项目中用到,本身我是.NET的,团队中有用到JAVA,故此我处理这个功能,记录以下备用. 1.引用:fontbox-2.0.16.jar.pdfbox-app-2.0.16.jar 版本一定要正确 ...

  7. SpringCloud之RabbitMQ消息队列原理及配置

    本篇章讲解RabbitMQ的用途.原理以及配置,RabbitMQ的安装请查看SpringCloud之RabbitMQ安装 一.MQ用途 1.同步变异步消息 场景:用户下单完成后,发送邮件和短信通知. ...

  8. 【Zookeeper】应用场景概述

    一.数据发布与订阅(配置中心) 二.负载均衡 三.命名服务(Naming Service) 四.分布式通知/协调 五.集群管理与Master选举 六.分布式锁 七.分布式事务 一.数据发布与订阅(配置 ...

  9. linux(centos)下安装supervisor进程管理工具

    在接触supervisor进程管理工具之前,使用springboot打包部署到linux服务器的流程是这样子的,如下图所示: 上图展示的就是最一般的流程,如果项目是小项目或者demo可以这样子去部署, ...

  10. gorm 更新数据时,0值会被忽略

    原文: https://www.tizi365.com/archives/22.html ------------------------------------------------------- ...