当前位置: 首页 > article >正文

深度学习基础—序列采样

引言

深度学习基础—循环神经网络(RNN)icon-default.png?t=O83Ahttps://blog.csdn.net/sniper_fandc/article/details/143417972?fromshare=blogdetail&sharetype=blogdetail&sharerId=143417972&sharerefer=PC&sharesource=sniper_fandc&sharefrom=from_link

深度学习基础—语言模型和序列生成icon-default.png?t=O83Ahttps://blog.csdn.net/sniper_fandc/article/details/143418185?fromshare=blogdetail&sharetype=blogdetail&sharerId=143418185&sharerefer=PC&sharesource=sniper_fandc&sharefrom=from_link

        当训练了一个序列模型后,如果我想要了解模型学习到的内容,就需要进行序列采样,序列采样最终会得到一个生成的序列,我们就可以知道模型学到的内容。

1.基于词汇的RNN模型的序列采样

        假设我们已经训练好了一个序列模型,序列采样和训练RNN不同的是:输入的数据不同,训练RNN我们要在每一个时间步输入这个时间步对应的词向量;序列采样在每一个时间步输入的是上一个时间步预测的结果。

        在第1个时间步,输入a0=0和x1=0,则第1个时间步可能会输出一个经过softmax层的概率向量,向量的每个元素表示是词典中某个词的概率,我们可以对概率向量随机采样,比如使用Python中numpy库的np.random.choice语句,获得一个词,这个词就是采样的第一个词。

        在第2个时间步,就把上一个时间步的输出y1作为输入,即x2=y1,然后经过softmax层,对y2进行采样。比如第1个时间步的采样结果是“The”,那么就把这个词输入到第2个时间步,让RNN在“The”的基础上预测下一个词是什么,依次类推。

        如何知道一个句子是否结束?如果词典中有EOS标识(结尾标志),那么就可以采样直到遇到这个符号,就意味着句子结束。如果没有这个词,那就预设时间步,让其达到预设的时间步就算结束。

        注意:采样过程中可能遇到UNK标识,如果不在意这样的结果可以忽视。如果在意这样的结果,那就认为此次采样无效,重新采样直到不再遇到UNK标识。

        上述序列采样是在词汇字典的RNN网络基础上,实际中我们也可能用到基于字符字典的RNN网络,那如何进行序列采样呢?

2.基于字符的RNN模型的序列采样

        基于字符的RNN模型采用的字典是字符表,比如26个字母大小写和一些标点符号组成。如下图所示:

        如果对这样的RNN进行序列采样,那么我们每一个时间步的输入不再是词,而是字符。比如“Cats average 15 hours of sleep a day.”这样的序列,y1就是C,y2就是a,y3就是t等等。

        基于字符的RNN模型的优点是:不用担心出现UNK这样的未知符号。缺点是:最终的输出将是非常长的序列,因为一个英文句子的序列可能只有10-20个词,但是拆成字符将会很多。并且因为序列过长,句子前后相距较远的词之间的依赖关系很难捕捉,训练成本高。


http://www.kler.cn/a/381680.html

相关文章:

  • 对javascript语言标准函数与箭头函数中this的理解(补充)
  • jsp | servlet | spring forEach读取不了对象List
  • 语音增强的损失函数选择
  • NACA四位数字翼型
  • Unity中有什么情况下是需要用UniTask替代其他异步方式的吗?
  • 北京中小学信息学编程能力测评 BCSP-X 2024 下半年 真题汇总
  • SAP RFC 用户安全授权
  • 理解为什么要有C++设计模式
  • 移植 AWTK 到 纯血鸿蒙 (HarmonyOS NEXT) 系统 (9) - 编译现有的AWTK应用程序
  • wps表格数据竖排变成横排方法
  • qt QDropEvent详解
  • 【JavaEE初阶 — 多线程】Thread的常见构造方法&属性
  • AI教育革命:辅导孩子的新神器,你用对了吗?‍
  • 【Wi-Fi】802.11n Vs 802.11ac 整理
  • 大屏可视化:舞动数据与美观的“设计秘籍”
  • 使用 JPA 的 `save()` 方法更新数据库中的数据
  • 【数据湖及大数据方案】数据湖建设方案|数据源|数据流|元数据|数据仓库|指标池|数据清洗
  • 【VScode】C/C++多文件夹下、多文件引用、分别编译——仅一个设置【适合新人入手】
  • Python - PDF 分割成单页、PDF 转图片(PNG)
  • Ubuntu 安装CUDA, cuDNN, TensorRT(草稿)
  • 【LeetCode】【算法】236. 二叉树最近公共祖先
  • 消息队列面试——打破沙锅问到底
  • 【系统架构设计师】论文:论基于 ABSD 的软件开发
  • Elasticsearch实战应用:构建高效的全文搜索引擎
  • 跨平台使用高德地图服务
  • C# Modbus RTU通讯回顾