使用 CNN 提取特征并作为序列传递给 RNN

人工智能 神经网络 深度学习 张量流 Python 长短期记忆
2021-10-25 04:27:48

我读了一篇关于字幕视频的文章,我想在我自己的项目中使用解决方案 4(使用 CNN 提取特征,将序列传递给单独的 RNN)。

但对我来说,在这种方法中我们使用 Inception 模型而没有任何重新训练或类似的东西,这似乎真的很奇怪。每个项目都有不同的要求,即使您使用预训练模型而不是自己的模型,您也应该进行一些培训。

我想知道如何做到这一点?例如,我创建了一个项目,其中我使用具有 CNN 层的网络,然后是 LSTM 和 Dense 层。在每个时期,整个网络的所有层都有前馈和反向传播。但是如果你有 CNN 网络来提取特征和 LSTM 网络以序列作为输入。如果没有定义的输出,如何训练 CNN 网络?这个网络应该只提取特征,但网络不知道什么特征。那么问题来了:如何训练 CNN 提取相关特征,然后将这些特征传递给 LSTM?

2个回答

您不训练整个网络,而只训练网络的后半部分(在我们的例子中都是以 lstm 开头)的方法实际上可以工作。这个想法是,Inception 已经预训练了一个非常大的数据集(例如 imagenet)。它能够从中提取一些有用的信息。实际上,imagenet 中存在不同的图像域,inception 网络需要捕获大量输入信息以对图像进行良好分类。这个想法是,预训练的 inception 已经能够提取几乎所有可能有用的东西(除非你的图像与 imagenet 没有完全不同,但这种情况很少见)。然后调整 lstm 层和全连接层以正确处理该信息。也许你不是

您也可以只使用与任务无关的 CNN作为编码器来提取(1)中的特征,然后使用最后一个全局池化层的输出,然后将其作为输入提供给 LSTM 层或任何其他下游任务。在 CNN 之后添加另一个小型神经网络(投影头)。然后在这个投影头的输出上使用对比损失来改进模型。

(1) Big Self-Supervised Models are Strong Semi-Supervised Learners (Ting Chen, Simon Kornblith, Kevin Swersky, Mohammad Norouzi, Geoffrey Hinton) 链接:https ://arxiv.org/abs/2006.10029