深度学习模型如何处理大小可变的输入

RNN单元明明可以接受不同长度的输入,但我们却在实际训练时习惯于使用padding来补齐。对于大小可变的输入,深度学习模型如何处理?

  1. 究竟什么样的模型结构可以处理可变大小的输入?
  2. 若模型可处理,那该如何训练/预测?
  3. 若模型不可处理,那该如何训练/预测?

 一、什么样的网络结构可以处理可变大小的输入

只处理局部的信息
②网络是无参数化的;
参数矩阵跟输入大小无关;

CNN

CNN中的卷积层通过若干个kernel来获取输入的特征,每个kernel只通过一个小窗口在整体的输入上滑动,所以不管输入大小怎么变化,对于卷积层来说都是一样的。那为什么CNN不能直接处理大小不同的图片呢?是因为一般的CNN里都会有Dense层,Dense层连接的是全部的输入,一张图片,经过卷积层、池化层的处理后,要把全部的单元都“压扁(flatten)”然后输入给Dense层,所以图片的大小,是影响到输入给Dense层的维数的,因此CNN不能直接处理。

RNN

RNN,是由一个个共享参数的RNN单元组成的,本质上可以看成一层RNN只有一个RNN单元,只不过在不断地循环处理罢了。所以,一个RNN单元,也是处理局部的信息——当前time step的信息。无论输入的长度怎么变,RNN层都是使用同一个RNN单元。往往我们也会在RNN后面接上Dense层,然后再通过softmax输出,这里的Dense会有影响吗?答案是不影响,因为我们使用RNN,往往是只需要用最后一个time step的hidden state,这个hidden state的维度是RNN单元中设置的维度,跟输入的长度无关,因此这个hidden state跟Dense的交互也跟输入的维度无关。比如我们输入的长度是l,RNN单元的输出维度为u,Dense层的单元数为n,那么Dense层中的权重矩阵大小为u×n,跟l是无关的。RNN单元中的权重也跟l无关,只跟每个time step的输入的维度有关,比如词向量的维度d,RNN单元中的权重矩阵大小是d×u。

虽然RNN可以处理各种长度的序列,但是我们在训练时,为了加速训练,往往会将一批数据同时输入到模型中进行计算、求导。那同一批数据,要喂给网络,我们必须把它组织成矩阵的形式,那矩阵的每一行/列自然维度需要相同。所以我们必须让同一个batch中的各个样本长度/大小一致

最常用的方法,就是padding,我们通过padding补零,把同一个batch中的所有样本都变成同一个长度,这样就可以方便我们进行批量计算了。对于那些padded values,也就是补的零,我们可以使用masking机制来避免模型对这些值进行训练。

参考链接:

一个小问题:深度学习模型如何处理大小可变的输入 - 知乎 (zhihu.com)

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值