1 前言

序列映射我们当前准备使用Transformer的结构;

2 致谢

感谢公众号《人工智能技术干货》提供的资料,《如何优雅的使用pytorch内置torch.nn.CTCLoss的方法》

让我收获了很棒的知识!

3 词表建立的规则

我们使用","作为统一的分隔符;

3.1 词典类——Vocab

我们使用set来作为词典的数据结构;

4 模型设计

3.1 backbone——rec_r34_vd

主干网络的设计我们是参考的PaddleOCR的识别模型,

代码的链接如下:

https://github.com/PaddlePaddle/PaddleOCR/blob/develop/ppocr/modeling/backbones/rec_resnet_vd.py

3.2 loss函数—— CTC Loss

CTC最初论文:

《Connectionist temporal classification: labelling unsegmented sequence data with recurrent neural networks》

关于 CTC Loss函数的数学推导:

https://zhuanlan.zhihu.com/p/43534801

关于 CTC Loss中CTC动态规划的计算过程,可以参考  Deep Systems的PPT文档:

https://docs.google.com/presentation/d/12gYcPft9_4cxk2AD6Z6ZlJNa3wvZCW1ms31nhq51vMk/pub?start=false&loop=false&delayms=3000#slide=id.g24e9f0de4f_0_332

3.2.1 代码写作——torch.nn.CTCLoss

我们使用PyTorch自带的CTCLoss;

CTCLoss的输入有两种方式:padded和un-padded;

这里我们是推荐un-padded方式,因为不用预先做padding的操作,会方便一些,也更好理解;


nn.CTCLoss()参数说明:

blank——空白标识:

类似于一种占位符,在CTC-Loss中用来分隔两种字符区间,例如“ap-ple”,可以使用blank来分隔字符串中相同的元素;

我们在词典中也会加入<blank>字符,并将词典中的ID闯入到这里的blank参数中;

ctc_loss()参数说明:

参考代码是

loss = ctc_loss(output.log_softmax(2), target, input_lengths, target_lengths)

input——预测数组:

input模型的预测值,在输入到loss之前需要log_softmax(2);

targets——目标数组的长数组:

称它为长数组,是因为它是由目标值拼接而成的,拼接的方法是使用了“long_array += array”;

形象化的解释可以参考我发的博文,这里粘贴一下,

input_lengths——N维相同值的向量,

input_lengths代表了所有输入序列的长度,由于这里我们使用的是CTCLoss,所以所有序列的长度都是相同的,即“时间长度T”;

5 模型调试

5.1 loss出现了“nan”——模型在计算时出现了数值溢出

5.1.1 由梯度爆炸引起的“nan”现象——而不是学习率lr过大引起的

梯度爆炸是会引起loss出现“nan”现象的,这是因为梯度在反向传播的过程中出现了“数值溢出”的问题,(这样的问题并不一定是代码的问题导致的)

观察点一:调小学习率之后,未出现梯度爆炸,说明不是loss计算的问题,而是梯度反向传播出现的问题;

观察点二:在使用最初大学习率时,会偶然出现“loss is nan”的情况,而不是每次训练都会出现,说明loss的前向计算不存在问题;

观察点三:使用最初大学习率时,模型有一定几率(例如50%)收敛的很好,说明学习率的设置不存在问题;

综上所述,这可能是由于模型存在大量的“全连接”结构,梯度在反向传递时,出现了多次的“乘法”运算而产生了梯度爆炸;

猜想:可以尝试使用梯度裁剪,来避免梯度回传时产生的数值溢出;

实验结果:使用梯度裁剪是可行的;

6 提问备忘

4.1 为什么Transformer不能指定输出encoding的大小呢?

今天在写作的时候,想到了这个问题,为什么Transformer不能指定输出encoding的大小呢?

我看了一下PyTorch的接口说明,的确是没有的,

然后请教了一下亮亮老师,老师说是因为PyTorch的实现版本没有提供这个功能,

他建议我看看OpenNMT-py,感谢亮亮老师!

自动驾驶—— Image Caption的学习笔记(legacy)相关推荐

  1. 自动驾驶—— Image Caption的学习笔记

    3.2 loss函数-- CTC Loss CTC Loss是一个易于使用的loss函数: 3.2.1 原始CTC存在的问题 此图片来自于李宏毅老师的课程视频, 4 CTC的改进 4.1 RNN-T- ...

  2. 自动驾驶——多目标跟踪模块的学习笔记

    1 系统状态模型 1.1 状态变量的定义 bbox:目标框位置: (在GoK的世界里,物体在没有外力的情况下速度为0) (class:检测模块会输出目标的类别) 备注: (loc_txt:如果信息量不 ...

  3. 自动驾驶——模型部署的学习笔记

    2 剪枝 模型剪枝是很有效的,因为模型在初始化时会有很多的神经元,也就是"想的很多",通过剪枝可以消除一些作用小的神经元:

  4. 自动驾驶—全局定位的学习笔记

    1 基于遗传算法的全局匹配方法 选取特征子算法,可以使用SIFT特征子: 使用遗传算法进行coarse匹配:

  5. 自动驾驶目标识别-----毫米波雷达学习笔记(1)

    1.毫米波雷达介绍 1.1 什么是毫米波雷达 通常将波长为1-10毫米的电磁波称毫米波,车载毫米波雷达工作的频段为24GHz和77GHz,少数国家(如日本)采用60GHz频段.车载毫米波雷达通过天线向 ...

  6. 自动驾驶、无人驾驶、车联网笔记分享

    持续更新整理一些自动驾驶领域.无人驾驶领域.车联网领域的优秀资源笔记,分享给有需要的人. 车路协同.车联网.智慧交通.智能网联车.自动驾驶.无人驾驶.高精度地图资料汇总与整理 车路协同优质资料整理地址 ...

  7. 自动驾驶汽车之深度学习 2018 MIT 6.S094 Deep Learning for Self-Driving Cars

    MIT自动驾驶汽车之深度学习课程更新到2018版本,PPT酷炫. ------ ------ 麻省理工学院6.S094:自驾车深度学习 跳至内容 Home DeepTraffic DeepCrash ...

  8. 新手入坑自动驾驶,我是这么学习的......

    它是谁? 没错,它就是是英伟达推出的一款入门级人工智能小车--Jetbot ,估计对机器人,尤其是对车械感兴趣的朋友们一定对它不陌生.组装完成后能够通过摄像头自主识别障碍物并避开,还可以进行人脸识别, ...

  9. ROS2的学习笔记(legacy)

    1 基础概念 1.1 执行单元 1.1.1 executable--执行程序 executable是一个具有main函数的执行程序,它反应了针对某个目标的程序执行流程, 于是一个executable可 ...

最新文章

  1. ARM汇编:使用汇编语言进行数据访问时需要注意的几个问题
  2. SQL Server 2000 To SQL Server 2005
  3. unix 网络编程卷2 第43页 管道:open竟然会阻塞?
  4. 计算机开机显示器无显示桌面,电脑开机后显示器不亮故障排除方法
  5. python 垃圾回收哪时候执行_Python 中的垃圾回收机制是如何工作的?
  6. UC将发布高性能HTML5游戏引擎X-Canvas
  7. ​618购物节,我用python逛淘宝、亚马逊,摸鱼被领导发现了
  8. CodeForces - 946C String Transformation
  9. STM32外部中断具体解释
  10. VS连接SQL ,Windows登录SQL 语句
  11. 高等数学常用极限求法总结(无详解)
  12. 电信光猫dns服务器修改,电信光猫自动获取的DNS被修改,肿么改回来?
  13. 私有链和联盟链的机会与挑战
  14. HBase eclipse开发环境搭建
  15. 2022(春)软工作业2:个人编程练习
  16. Ubuntu安装播放器 或 Linux上比较好用强大、并且可以倍速播放的播放器SMplayer
  17. el-form表单添加自定义验证
  18. CHIL-ORACLE-循环 语法
  19. 怎么登录服务器上的网页,云服务器怎么在网页上登录
  20. 拼多多如何提高大促报名通过率?

热门文章

  1. 初识HTML5(一)
  2. 使用MSIL 汇编程序 (Ilasm.exe) 2 强签名
  3. 代码测试:简单用户注册信息验证
  4. Sql Server 2000 无法打开用户默认数据库。登录失败
  5. html5手机常亮,vue开发的webapp中的手机物理返回键,以及屏幕常亮处理
  6. 耳挂式蓝牙耳机原理_蓝牙真无线耳机MP3功能二合一 wedoking W-607耳机评测
  7. Count on a tree SPOJ - COT
  8. 牛客第三场多校 H Diff-prime Pairs
  9. 51-表达式计算(带括号的)
  10. Struts2入门到放弃