English 您所在的位置:网站首页 摩擦音有哪些怎么读 English

English

2024-07-11 21:30| 来源: 网络整理| 查看: 265

Pytorch-RNN关于pack_padded_sequence之enforce_sorted详解

RRRRRemix: 函数参数enforce_sorted默认为True,即要求使用者必须将样本按照长度从长到短进行排序,我找到的好多的博客在介绍pack_padded_sequence这个函数时也说使用的时候需要排序(因为enforce_sorted默认为True,不这样做会报错),而没有去怎么去研究enforce_sort如果等于False会怎么样。而pytorch文档对函数的介绍里也只是提到enforce_sort等于False可以不用排序,那为什么这么多博客还强调需要预先排序呢?去看pack_padded_sequence的源码可以看到函数会在enforce_sorted等于False时自动根据输入的代表样本长度的tensor来自动排序的。那假设我输入进函数时数据的顺序是[0, 1, 2, 3],然后函数拿到这个数据后把样本根据长度进行了排序,生成顺序为[3, 0, 2, 1]的PackedSequence对象,那这时候我把这个PackedSequence对象输入进LSTM层里,他返回的output和hidden_state里各个样本的顺序究竟是[0, 1, 2, 3]还是[3, 0, 2, 1]呢?那这个博客不就在“原理”部分解释了吗?与其说原理,我觉得叫其“情况”更合适,即情况1:enforce_sorted为False时会自动帮我排序,把[0, 1, 2, 3]的循序排为[3, 0, 2, 1];情况2:函数自己帮我排序为[3, 0, 2, 1]后,用pad_packed_sequence函数解压出来后其顺序仍为[0, 1, 2, 3],这说明对LSTM层的输出output作解压后其顺序仍然是[0, 1, 2, 3],我不需要做额外的再排序;情况3:函数自己帮我排序为[3, 0, 2, 1]后,LSTM层的输出里的hidden_state里各样本的顺序仍为[0, 1, 2, 3],我不需要做额外的再排序。总结就是在pack之前的排序其实不是必要的,在设置enforce_sorted为False的时候仍然可以正常运行,且不会由于函数内部的自动排序更改我样本的顺序,这对于开头提到的样本顺序重要、不能够进行更改的情况正好合适。找了好几篇博客就没人写这个东西,文章怎么就没有意义了?开头提到的博客压根就没有提到enforce_sorted为False的情况,哪里有说明?

Pytorch-RuntimeError: CUDA unknown error - this may be due to an incorrectly set up environment

namelijink: 起作用的不是环境变量,而是重启

安装requirements.txt文件的两种方式(pip与conda)

꯭鱼꯭没꯭放꯭: 终于,小白找了好多方法都报错,这个终于弄好了,太感谢

Pytorch-RuntimeError: CUDA unknown error - this may be due to an incorrectly set up environment

爱吃代码-: export CUDA_VISIBLE_DEVICES='0,1,2,3 这句在哪里运 行呀

js-divergence的pytorch实现

muyuqing_sir: 楼主的mean和q或者p的位置是没有反的,因为pytorch实现的这个KL计算loss的时候,第一个位置是模型输出,第二个位置是真实概率分布;但是KL公式里面第一个位置是真实概率分布,第二个位置是模型输出,详见官方文档里面的note:https://pytorch.org/docs/stable/generated/torch.nn.KLDivLoss.html#torch.nn.KLDivLoss



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有