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

深度学习基础—序列采样

引言

深度学习基础—循环神经网络(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.mrgr.cn/news/64325.html

相关文章:

  • leetcode hot100【LeetCode 322. 零钱兑换】java实现
  • MySQL事务——针对实习面试
  • net 获取本地ip地址,net mvc + net core 两种
  • 掌握 CTE 技巧,实现连续日期和月份的 SQL 报表统计
  • 初始Docker
  • Lucene的概述与应用场景(1)
  • 网络:ARP的具体过程和ARP欺骗
  • MATLAB中sort函数用法
  • 【Kaggle | Pandas】练习6:重命名和组合
  • cn.afterturn.easypoi.exception.excel.ExcelExportException: Excel导出错误 -> 修正过程。
  • (九)JavaWeb后端开发——Servlet
  • 【机器学习】回归树
  • 微信小程序scroll-view吸顶css样式化表格的表头及iOS上下滑动表头的颜色覆盖、z-index应用及性能分析
  • 异步回调之Join
  • 第十七课 component组件解析
  • Rust语言有哪些常用语句?
  • zyb 的 Codeforces Round 983 (Div. 2)
  • WPF+MVVM案例实战(十八)- 自定义字体图标按钮的封装与实现(ABD类)
  • Python使用K-means实现文本聚类
  • Respiratory Physiology Neurobiology
  • TCP编程-socket(套接字)编程实战1
  • RK3568平台开发系列讲解(中断篇)延迟工作实验
  • vscode makfile编译
  • 电阻基础知识(六)-电阻的失效模式和失效机理
  • 【MacOS实操】如何基于SSH连接远程linux服务器
  • redis详细教程(7.哨兵)