tensorflow LSTM+CTC使用详解
最近用tensorflow写了个OCR的程序,在实现的过程中,发现自己还是跳了不少坑,在这里做一个记录,便于以后回忆。主要的内容有lstm+ctc具体的输入输出,以及TF中的CTC和百度开源的warpCTC在具体使用中的区别。
正文
输入输出
因为我最后要最小化的目标函数就是ctc_loss,所以下面就从如何构造输入输出说起。
tf.nn.ctc_loss
先从TF自带的tf.nn.ctc_loss说起,官方给的定义如下,因此我们需要做的就是将图片的label(需要OCR出的结果),图片,以及图片的长度转换为label,input,和sequence_length。
[max_time_step , batch_size , num_classes],当修改time_major = False时,[batch_size,max_time_step,num_classes]。image_batch
->
[batch_size,max_time_step,num_features]->lstm->
[batch_size,max_time_step,cell.output_size]->reshape->
[batch_size*max_time_step,num_hidden]->affine projection A*W+b->
[batch_size*max_time_step,num_classes]->reshape->
[batch_size,max_time_step,num_classes]->transpose->
[max_time_step,batch_size,num_classes]假如一张图片有如下shape:[60,160,3],我们如果读取灰度图则shape=[60,160],此时,我们将其一列作为feature,那么共有60个features,160个time_step,这时假设一个batch为64,那么我们此时获得到了一个
[batch_size,max_time_step,num_features] = [64,160,60]的训练数据。sequence_length(长度为batch_size的向量)来记录本次batch数据的长度,对于OCR这个问题,sequence_length就是长度为64,而值为160的一维向量)得到形如
[batch_size,max_time_step,cell.output_size]的输出,其中cell.output_size == num_hidden。W的结构为[num_hidden,num_classes],b的结构为[num_classes]。而tf.matmul操作中,两个矩阵相乘阶数应当匹配,所以我们将上一步的输出reshape成[batch_size*max_time_step,num_hidden](num_hidden为自己定义的lstm的unit个数)记为A,然后将其做一个线性变换,于是A*w+b得到形如[batch_size*max_time_step,num_classes]然后在reshape回来得到[batch_size,max_time_step,num_classes]最后由于ctc_loss的要求,我们再做一次转置,得到[max_time_step,batch_size,num_classes]形状的数据作为inputlabels: 标签序列
由于OCR的结果是不定长的,所以label实际上是一个稀疏矩阵SparseTensor,
其中:
indices:二维int64的矩阵,代表非0的坐标点values:二维tensor,代表indice位置的数据值dense_shape:一维,代表稀疏矩阵的大小
比如有两幅图,分别是123,和4567那么
indecs =[[0,0],[0,1],[0,2],[1,0],[1,1],[1,2],[1,3]]
values = [1,2,3,4,5,6,7]
dense_shape = [2,4]
代表dense tensor:
12[[1,2,3,0][4,5,6,7]]
seq_len: 在input一节中已经讲过,一维数据,[time_step,…,time_step]长度为batch_size,值为time_step
tensorflow LSTM+CTC使用详解的更多相关文章
- 【目标检测】SSD+Tensorflow 300&512 配置详解
SSD_300_vgg和SSD_512_vgg weights下载链接[需要科学上网~]: Model Training data Testing data mAP FPS SSD-300 VGG-b ...
- 【pytorch】关于Embedding和GRU、LSTM的使用详解
1. Embedding的使用 pytorch中实现了Embedding,下面是关于Embedding的使用. torch.nn包下的Embedding,作为训练的一层,随模型训练得到适合的词向量. ...
- (数据科学学习手札39)RNN与LSTM基础内容详解
一.简介 循环神经网络(recurrent neural network,RNN),是一类专门用于处理序列数据(时间序列.文本语句.语音等)的神经网络,尤其是可以处理可变长度的序列:在与传统的时间序列 ...
- Tensorflow.nn 核心模块详解
看过前面的例子,会发现实现深度神经网络需要使用 tensorflow.nn 这个核心模块.我们通过源码来一探究竟. # Copyright 2015 Google Inc. All Rights Re ...
- lstm和gru详解
一.LSTM(长短期记忆网络) LSTM是一种特殊的RNN类型,一般的RNN结构如下图所示,是一种将以往学习的结果应用到当前学习的模型,但是这种一般的RNN存在着许多的弊端.举个例子,如果我们要预测“ ...
- RNN 与 LSTM 的原理详解
原文地址:https://blog.csdn.net/happyrocking/article/details/83657993 RNN(Recurrent Neural Network)是一类用于处 ...
- Tensorflow中tf.ConfigProto()详解
参考Tensorflow Machine Leanrning Cookbook tf.ConfigProto()主要的作用是配置tf.Session的运算方式,比如gpu运算或者cpu运算 具体代码如 ...
- torch.nn.LSTM()函数维度详解
123456789101112lstm=nn.LSTM(input_size, hidden_size, num_la ...
- tensorflow 的tf.where详解
最近在用到数据筛选,观看代码中有tf.where()的用法,不是很常用,也不是很好理解.在这里记录一下 tf.where( condition, x=None, y=None, name=None ) ...
随机推荐
- LeetCode 13. 罗马数字转整数(Roman to Integer)
13. 罗马数字转整数 13. Roman to Integer 题目描述 罗马数字包含以下七种字符: I,V,X,L,C,D 和 M. 字符 数值 I 1 V ...
- ERP通过JAVA流的形式将数据传到外围系统
1.ERP封装数据成XML写入数据库服务器指定文件 --指定相关文件信息 v_file_path := '/u01/test/app/fs1/EBSapps/appl/cux/12.0.0/forms ...
- 开发板与pc之间文件传输:kermit and lrzsz
imx6开发板与pc机之间通过串口传输文件步骤: 1. 安装好kermit并可以使用 2. 交叉编译lrzsz开源软件并把可执行程序lrz lsz拷贝到开发板 2.1 下载并解压lrzsz-0.12. ...
- DjangoRestFramework学习一之restful规范、APIview、解析器组件、Postman等
DjangoRestFramework学习一之restful规范.APIview.解析器组件.Postman等 本节目录 一 预备知识 二 restful规范 三 DRF的APIView和解析器组件 ...
- ElementUI 源码定制防坑指南
背景 我司OA系统公文管理模块Office在线编辑使用的是金格IWebOffice中间件[PPAPI插件,通过<object>标签加载],IWebOffice在chrome中设置div盒子 ...
- CSS是什么
css是层叠样式表(英文全称:Cascading Style Sheets)是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言的一个子集)等文件样式的计算机语言. CSS不 ...
- iOS应用状态保存和恢复
当应用被后台Kill掉的时候希望从后台返回的时候显示进入后台之前的内容 在Appdelegate中设置 - (BOOL)application:(UIApplication *)application ...
- JavaWeb开发回顾总结【不断更新中】
1.Java语言编程 2.Servlet & JSP(JavaServer Pages) JSPGet方法中文乱码,以上是我的一篇解决Get方法的文章. 关于编码的约定,从项目的一开始就要规定 ...
- UNTIY Canvas
一.Canvas 组件 Render Mode(渲染模式) (1)Screen Space-Overlay:2D UI,始终显示在屏幕最前方,适合制作HP,MP等(相当于GUI) (2)Screen ...
- python接口自动化11-post传data参数案例
前言: 前面登录博客园的是传json参数,有些登录不是传json的,如jenkins的登录,本篇以jenkins登录为案例,传data参数. 一.登录jenkins抓包 1.登录jenkins,输入账 ...