变长序列咋使用mini-batch SGD训练( 二 )
这个时候的一次损失是一条句子在在模型中算出来的损失,Mini Batch是多个句子一起算的损失,所以梯度下降还是一样的在这个小batch上的梯度
■网友
谢邀。
变长序列是输入,SGD是算法,这两个不是直接建立关系的:算法训练的是模型,不是输入;先确定模型,再考虑怎么训练。
RNN是专门处理变长序列的,可以通过维护一个mask来获得真实的loss; CNN也可以尝试,不过padding或者clip会带来信息损失。
附上之前的一个答案:为什么RNN 需要mask 输入,而CNN则不需要?
■网友
如果是使用rnn模型的话,在tensorflow里面有dynamic_rnn函数可以实现这个功能,需要传入各个样本的长度sequence_length作为mask。
■网友
用bucket来做 输入是没有值的地方全填充为0 ,算loss时元素级乘mask(大小就是,有值的地方为1其余为0)
另外推荐使用bucket
其实tf的dynamic_rnn效率并不高,有长尾等待效应,一个batch中可能主要耗时是等最长的样本算完。
bucket 可以保证每个循环步里大部分运算是有效的,但是占显存比较多
■网友
【变长序列咋使用mini-batch SGD训练】 目前知道的有2类:
每条数据带一个mask或者length,并且operator支持这种mask或length才行;统一长度或者使用bucket,一个batch里面长短不一的填充成同样长度
推荐阅读
- 『先进』长江流域最先进洗舱站在宁投运 油可分离回收,水能循环使用
- 汽车|冬天怎样让车内温度快速升高?座椅加热的最佳使用方式二,外循环的作用总结
- 汽车|迈凯伦Artura不再使用迈凯伦祖传V8引擎了?
- python的html5lib这个库咋使用啊我在网上也没有找到相关文档
- win7中本地连接跟无线网卡同时使用时是怎么样的模式
- 可不可能利用网盘的秒传功能使用伪造的MD5(或其他信息)值进行文件分享
- 为啥很多企业给用户发邮件会使用noreply/no-reply@xx.xx的邮箱
- win10激活的问题
- 全网通的mate8能不能插美国手机卡,在美国使用
- 汽车|首批200辆吉利新能源出租车在长交付使用,充电半小时电量可达80%
