tensorflow源码分析——CTC
CTC是2006年的论文Connectionist Temporal Classification: Labelling Unsegmented Sequence Data with Recurrent Neural Networks中提到的,论文地址: http://www.cs.toronto.edu/~graves/icml_2006.pdf
论文中CTC的定义是这样的:把对未分割的序列数据label的任务叫做Temporal Classification,把使用RNNs对未分割的序列数据label叫做Connectionist Temporal Classification(CTC) 。与之相对的是,把对数据序列的每一个time-step或者frame独立label 叫做framewise classification
tensorflow中的相关实现在 /tensorflow/python/ops/ctc_ops.py
1. ctc_loss, 计算ctc loss
def ctc_loss(labels, inputs, sequence_length,
preprocess_collapse_repeated=False,
ctc_merge_repeated=True, time_major=True):
这个类执行softmax操作,所以输入应该是LSTM输出的线性映射
inputs, 最内部维度大小是num_classes,代表“num_labels +1” 个类别,其中num_labels是真实的balebs的数目,最大值“num_labels-1”是为blank label保留的
例如,如果一个单词包含3个labels ‘[a, b, c]’,则num_classes =4, 且labels的索引号是 ‘{a:0, b:1, c:2, blank:3}’
至于参数 preprocess_collapse_repeated 和 ctc_merge_repeated:
如果 preprocess_collapse_repeated = True ,在计算ctc之前,重复的labels会被合并为一个labels。这种预处理对下面这种情况是有用的:如果训练数据是强制对齐得到的,会包含不必要的重复。
如果 ctc_merge_repeated = False,那么伴随ctc计算的深入,重复的非blank将不会被合并,会被解释为独立的labels。这是ctc的简化的非标准的版本
具体见下表
- preprocess_collapse_repeated = False,ctc_merge_repeated = True:经典CTC,输出的真实的重复的中间带有blanks类别,也可以通过解码器解码,输出不带有blanks的重复类别
- preprocess_collapse_repeated = True,ctc_merge_repeated = False:因为在training之前,input 的labels已经合并重复项了,所以不会输出重复的类
- preprocess_collapse_repeated = False,ctc_merge_repeated = False:输出重复的中间带有blank的类别,但是通常不需要解码器合并重复项
- preprocess_collapse_repeated = True,ctc_merge_repeated = True: 未测试,非常可能不会学会输出重复类
参数:
labels: int32 SparseTensor, 标准的输出,稀疏矩阵
inputs: 3-D float tensor . 计算得到的logits。 如果time_major = False, shape:batch_size x max_time x num_classes. 如果 time_major = True, shape:max_time x batch_size x num_classes
sequence_length: 1-D int32 向量, batch_size
输出:
1-D float tensor,size:[batch], 概率的负对数
2. ctc_beam_search_decoder: 对输入的logits执行beam search 解码
def ctc_beam_search_decoder(inputs, sequence_length, beam_width=100,
top_paths=1, merge_repeated=True):
如果 merge_repeated = True, 在输出的beam中合并重复类。这意味着如果一个beam中的连续项( consecutive entries) 相同,只有第一个提交。即,如果top path 是‘A B B B ’,返回值是‘A B’(当merge_repeated = True),‘A B B B ’ (当merge_repeated = False)
参数:
inputs: 3-D float tensor , shape:max_time x batch_size x num_classes
sequence_length: 1-D int32 向量, batch_size
beam_width: int scalar>=0
top_paths: int scalar>=0, <= beam_width, 输出解码后的数目
输出:
元组:(decoded, log_prob)
其中:
decoded : a list of length top_paths, 每一个是一个稀疏矩阵
log_prob : matrix , shape (batch_size x top_paths)
tensorflow源码分析——CTC的更多相关文章
- tensorflow源码分析
前言: 一般来说,如果安装tensorflow主要目的是为了调试些小程序的话,只要下载相应的包,然后,直接使用pip install tensorflow即可. 但有时我们需要将Tensorflow的 ...
- tensorflow源码分析——BasicLSTMCell
BasicLSTMCell 是最简单的LSTMCell,源码位于:/tensorflow/contrib/rnn/python/ops/core_rnn_cell_impl.py.BasicLSTMC ...
- tensorflow源码分析——LSTMCell
LSTMCell 是最简单的LSTMCell,源码位于:/tensorflow/contrib/rnn/python/ops/core_rnn_cell_impl.py.LSTMCell 继承了RNN ...
- 图解tensorflow 源码分析
http://www.cnblogs.com/yao62995/p/5773578.html https://github.com/yao62995/tensorflow
- [tensorflow源码分析] Conv2d卷积运算 (前向计算,反向梯度计算)
- [图解tensorflow源码] 入门准备工作附常用的矩阵计算工具[转]
[图解tensorflow源码] 入门准备工作 附常用的矩阵计算工具[转] Link: https://www.cnblogs.com/yao62995/p/5773142.html tensorf ...
- [图解tensorflow源码] 入门准备工作
tensorflow使用了自动化构建工具bazel.脚本语言调用c或cpp的包裹工具swig.使用EIGEN作为矩阵处理工具.Nvidia-cuBLAS GPU加速计算库.结构化数据存储格式prot ...
- [图解tensorflow源码] [原创] Tensorflow 图解分析 (Session, Graph, Kernels, Devices)
TF Prepare [图解tensorflow源码] 入门准备工作 [图解tensorflow源码] TF系统概述篇 Session篇 [图解tensorflow源码] Session::Run() ...
- TensorFlow源码框架 杂记
一.为什么我们需要使用线程池技术(ThreadPool) 线程:采用“即时创建,即时销毁”策略,即接受请求后,创建一个新的线程,执行任务,完毕后,线程退出: 线程池:应用软件启动后,立即创建一定数量的 ...
随机推荐
- 11.AutoMapper 之值转换器(Value Transformers)
https://www.jianshu.com/p/b77311546e64 值转换器(Value Transformers) 值转换器应用于单一类型的转换.AutoMapper在分配值之前,会检测该 ...
- async 异步抓取 花瓣网高清大图 30s爬取500张
废话 不多说,直接上代码,不懂得看注释 先安装 pip install aiohttp "异步抓取花瓣网图片" # pip install aiohttp import requ ...
- SQL的编写顺序和执行顺序,以及空值处理,别名处理,转义字符处理
SQL即结构化查询语言.也就是用来从数据库中操作数据的.数据总的来说就是增删改查CRUD. 一,sql的分类,大致有四类: 1)DDL : 数据定义语言 create alter drop trunc ...
- check cve
今天想检查一下 Gitlab 11.9.0 产品受哪些 cve 的影响.其实网上已经有很多网站可以查询产品的相关 cve,但就是粒度比较粗.我想在 cve 列表中筛选出特定的版本,已经特定的版本,比如 ...
- 第98:svd原理
SVD分解:任何矩阵都可以分解成第一行的形式,3个相乘.UV都是正交矩阵,中间的是奇异值. 3个相乘的形式可以拆分.即奇异值*第一行*第一列.在相加. 奇异值有时很小,在这种情况下,丢掉,可以减少计算 ...
- iOS-NSLog发布时取消打印日志
1 选择工程的Target -> Build Settings -> Preprocessor Macros. 如图,默认 Debug项,是“DEBUG=1”. 2 在程序中设置全局宏定义 ...
- Codeforces 981 共同点路径覆盖树构造 BFS/DP书架&最大值
A /*Huyyt*/ #include<bits/stdc++.h> #define mem(a,b) memset(a,b,sizeof(a)) #define pb push_bac ...
- 《Head First 软件开发》阅读四
构建代码:自动化构建 代码的完成不只是能运行,还包括编译代码和打包成可配置的单元.学会一个构建工具来编写自己的说明处理源代码.新的团队成员需要立刻知道软件的关联组件和主要类去做测试,但开发人员不是心理 ...
- 对Canvas的研究
1.标签定义图形,比如图表和其他图像,您必须使用脚本来绘制图形. 什么是 canvas? HTML5 <canvas> 元素用于图形的绘制,通过脚本 (通常是JavaScript)来完成. ...
- Quartz.NET常用方法 01
Quartz.NET作为一款定时框架,它的最小可运行程序如下: var scheduler = StdSchedulerFactory.GetDefaultScheduler(); scheduler ...